blob: c4497b1bb853dee1b5caa698a3018d73082c5abd [file] [log] [blame]
// Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library fasta.metadata_builder;
import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
import 'package:kernel/ast.dart';
import '../kernel/body_builder.dart' show BodyBuilder;
import '../source/source_library_builder.dart' show SourceLibraryBuilder;
import '../scope.dart' show Scope;
import 'declaration_builder.dart';
import 'member_builder.dart';
class MetadataBuilder {
final Token beginToken;
int get charOffset => beginToken.charOffset;
MetadataBuilder(this.beginToken);
static void buildAnnotations(
Annotatable parent,
List<MetadataBuilder>? metadata,
SourceLibraryBuilder library,
DeclarationBuilder? classOrExtensionBuilder,
MemberBuilder? member,
Uri fileUri, Scope scope) {
if (metadata == null) return;
BodyBuilder bodyBuilder = library.loader
.createBodyBuilderForOutlineExpression(library, classOrExtensionBuilder,
member ?? classOrExtensionBuilder ?? library, scope, fileUri);
for (int i = 0; i < metadata.length; ++i) {
MetadataBuilder annotationBuilder = metadata[i];
parent.addAnnotation(
bodyBuilder.parseAnnotation(annotationBuilder.beginToken));
}
bodyBuilder.inferAnnotations(parent, parent.annotations);
bodyBuilder.resolveRedirectingFactoryTargets();
}
}