blob: cb656b4ab4973c91037ecc8fdbc3a8c1b6c843f1 [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 'builder.dart' show Declaration, TypeBuilder;
import 'constructor_reference_builder.dart' show ConstructorReferenceBuilder;
abstract class MetadataBuilder<T extends TypeBuilder> {
final int charOffset;
MetadataBuilder(Declaration parent, this.charOffset);
factory MetadataBuilder.fromConstructor(
ConstructorReferenceBuilder constructorReference,
List<Object> arguments,
Declaration parent,
int charOffset) {
return new ConstructorMetadataBuilder<T>(
constructorReference, arguments, parent, charOffset);
}
factory MetadataBuilder.fromExpression(
Object expression, String postfix, Declaration parent, int charOffset) {
return new ExpressionMetadataBuilder<T>(
expression, postfix, parent, charOffset);
}
}
class ConstructorMetadataBuilder<T extends TypeBuilder>
extends MetadataBuilder<T> {
final ConstructorReferenceBuilder constructorReference;
final List<Object> arguments;
ConstructorMetadataBuilder(this.constructorReference, this.arguments,
Declaration parent, int charOffset)
: super(parent, charOffset);
}
/// Expression metadata (without arguments).
///
/// Matches this grammar rule:
///
/// '@' qualified (‘.’ identifier)?
class ExpressionMetadataBuilder<T extends TypeBuilder>
extends MetadataBuilder<T> {
final Object qualified;
final String identifier;
ExpressionMetadataBuilder(
this.qualified, this.identifier, Declaration parent, int charOffset)
: super(parent, charOffset);
}