// 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();
  }
}
