blob: 7bc39e69a75b716d30c10564dbc9a7d254a536ab [file] [log] [blame]
// Copyright (c) 2019, 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.kernel_metadata_builder;
import 'package:kernel/ast.dart' show Annotatable, Class, Library;
import 'kernel_body_builder.dart' show KernelBodyBuilder;
import 'kernel_builder.dart'
show
KernelClassBuilder,
KernelLibraryBuilder,
MetadataBuilder,
MemberBuilder;
import '../scanner.dart' show Token;
import '../scope.dart' show Scope;
class KernelMetadataBuilder extends MetadataBuilder {
final Token beginToken;
int get charOffset => beginToken.charOffset;
KernelMetadataBuilder(this.beginToken);
static void buildAnnotations(
Annotatable parent,
List<MetadataBuilder> metadata,
KernelLibraryBuilder library,
KernelClassBuilder classBuilder,
MemberBuilder member,
Scope parameterScope) {
if (metadata == null) return;
Uri fileUri = member?.fileUri ?? classBuilder?.fileUri ?? library.fileUri;
Scope scope = parent is Library || parent is Class || classBuilder == null
? library.scope
: classBuilder.scope;
KernelBodyBuilder bodyBuilder = new KernelBodyBuilder.forAnnotation(
library, classBuilder, member, scope, parameterScope, fileUri);
for (int i = 0; i < metadata.length; ++i) {
KernelMetadataBuilder annotationBuilder = metadata[i];
parent.addAnnotation(
bodyBuilder.parseAnnotation(annotationBuilder.beginToken));
}
bodyBuilder.inferAnnotations(parent.annotations);
bodyBuilder.resolveRedirectingFactoryTargets();
}
}