| // 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.member_builder; |
| |
| import 'dart:core' hide MapEntry; |
| |
| import 'package:kernel/ast.dart'; |
| |
| import '../problems.dart' show unsupported; |
| |
| import 'builder.dart' |
| show ClassBuilder, Builder, LibraryBuilder, ModifierBuilder; |
| |
| import 'declaration.dart'; |
| import 'declaration_builder.dart'; |
| import 'extension_builder.dart'; |
| |
| abstract class MemberBuilder extends ModifierBuilder { |
| /// For top-level members, the parent is set correctly during |
| /// construction. However, for class members, the parent is initially the |
| /// library and updated later. |
| @override |
| Builder parent; |
| |
| @override |
| String get name; |
| |
| MemberBuilder(this.parent, int charOffset) : super(parent, charOffset); |
| |
| bool get isDeclarationInstanceMember => isDeclarationMember && !isStatic; |
| |
| @override |
| bool get isClassInstanceMember => isClassMember && !isStatic; |
| |
| @override |
| bool get isExtensionInstanceMember => isExtensionMember && !isStatic; |
| |
| @override |
| bool get isDeclarationMember => parent is DeclarationBuilder; |
| |
| @override |
| bool get isClassMember => parent is ClassBuilder; |
| |
| @override |
| bool get isExtensionMember => parent is ExtensionBuilder; |
| |
| @override |
| bool get isTopLevel => !isDeclarationMember; |
| |
| @override |
| bool get isNative => false; |
| |
| bool get isRedirectingGenerativeConstructor => false; |
| |
| LibraryBuilder get library { |
| if (parent is LibraryBuilder) { |
| LibraryBuilder library = parent; |
| return library.partOfLibrary ?? library; |
| } else if (parent is ExtensionBuilder) { |
| ExtensionBuilder extension = parent; |
| return extension.library; |
| } else { |
| ClassBuilder cls = parent; |
| return cls.library; |
| } |
| } |
| |
| /// The [Member] built by this builder; |
| Member get member; |
| |
| // TODO(johnniwinther): Deprecate this. |
| Member get target => member; |
| |
| // TODO(johnniwinther): Remove this and create a [ProcedureBuilder] interface. |
| Member get extensionTearOff => |
| unsupported("extensionTearOff", charOffset, fileUri); |
| |
| // TODO(johnniwinther): Remove this and create a [ProcedureBuilder] interface. |
| Procedure get procedure => unsupported("procedure", charOffset, fileUri); |
| |
| // TODO(johnniwinther): Remove this and create a [ProcedureBuilder] interface. |
| ProcedureKind get kind => unsupported("kind", charOffset, fileUri); |
| |
| void buildOutlineExpressions(LibraryBuilder library) {} |
| |
| @override |
| String get fullNameForErrors => name; |
| |
| void inferType() => unsupported("inferType", charOffset, fileUri); |
| |
| void inferCopiedType(covariant Object other) { |
| unsupported("inferType", charOffset, fileUri); |
| } |
| } |