blob: e26a05dddba02b70ed9fcbcc95dcba7226aa2a2d [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.
part of 'declaration_builders.dart';
abstract class IDeclarationBuilder implements ITypeDeclarationBuilder {
DeclarationNameSpace get nameSpace;
/// Type parameters declared on this declaration.
///
/// This is `null` if the declaration is not generic.
List<NominalParameterBuilder>? get typeParameters;
LibraryBuilder get libraryBuilder;
@override
Uri get fileUri;
/// Lookup a member accessed statically through this declaration.
MemberLookupResult? findStaticBuilder(
String name,
int fileOffset,
Uri fileUri,
LibraryBuilder accessingLibrary,
);
MemberLookupResult? findConstructorOrFactory(
String name,
LibraryBuilder accessingLibrary,
);
/// Returns the type of `this` in an instance of this declaration.
///
/// This is non-null for class and mixin declarations and `null` for
/// extension declarations.
InterfaceType? get thisType;
/// Lookups the member [name] declared in this declaration.
///
/// If [setter] is `true` the sought member is a setter or assignable field.
/// If [required] is `true` and no member is found an internal problem is
/// reported.
LookupResult? lookupLocalMember(String name, {bool required = false});
List<DartType> buildAliasedTypeArguments(
LibraryBuilder library,
List<TypeBuilder>? arguments,
ClassHierarchyBase? hierarchy,
);
/// Returns an iterator of all members declared in this declaration, including
/// duplicate declarations.
Iterator<MemberBuilder> get unfilteredMembersIterator;
/// [Iterator] for all members declared in this declaration of type [T].
///
/// If [includeDuplicates] is `true`, duplicate declarations are included.
Iterator<T> filteredMembersIterator<T extends MemberBuilder>({
required bool includeDuplicates,
});
/// Returns an iterator of all constructors declared in this declaration,
/// including duplicate declarations.
Iterator<MemberBuilder> get unfilteredConstructorsIterator;
/// [Iterator] for all constructors declared in this declaration of type [T].
///
/// If [includeDuplicates] is `true`, duplicate declarations are included.
Iterator<T> filteredConstructorsIterator<T extends MemberBuilder>({
required bool includeDuplicates,
});
}
abstract class DeclarationBuilderImpl extends TypeDeclarationBuilderImpl
implements IDeclarationBuilder {
@override
LibraryBuilder get parent;
@override
LibraryBuilder get libraryBuilder {
return parent.partOfLibrary ?? parent;
}
@override
MemberLookupResult? findConstructorOrFactory(
String name,
LibraryBuilder accessingLibrary,
) {
if (accessingLibrary.nameOriginBuilder !=
libraryBuilder.nameOriginBuilder &&
name.startsWith("_")) {
return null;
}
return nameSpace.lookupConstructor(name == 'new' ? '' : name);
}
}