diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart index 187181ed1f3..38a93cf1b9e 100644 --- a/pkg/analyzer/lib/src/dart/ast/ast.dart +++ b/pkg/analyzer/lib/src/dart/ast/ast.dart @@ -1644,7 +1644,7 @@ class ClassTypeAliasImpl extends TypeAliasImpl implements ClassTypeAlias { Token? abstractKeyword; /// The name of the superclass of the class being declared. - TypeNameImpl _superclass; + NamedTypeImpl _superclass; /// The with clause for this class. WithClauseImpl _withClause; @@ -1711,14 +1711,14 @@ class ClassTypeAliasImpl extends TypeAliasImpl implements ClassTypeAlias { @Deprecated('Use superclass2 instead') @override - TypeNameImpl get superclass => _superclass; + NamedTypeImpl get superclass => _superclass; set superclass(NamedType superclass) { - _superclass = _becomeParentOf(superclass as TypeNameImpl); + _superclass = _becomeParentOf(superclass as NamedTypeImpl); } @override - TypeNameImpl get superclass2 => _superclass; + NamedTypeImpl get superclass2 => _superclass; @override TypeParameterListImpl? get typeParameters => _typeParameters; @@ -2594,7 +2594,7 @@ abstract class ConstructorInitializerImpl extends AstNodeImpl /// type ('.' identifier)? class ConstructorNameImpl extends AstNodeImpl implements ConstructorName { /// The name of the type defining the constructor. - TypeNameImpl _type; + NamedTypeImpl _type; /// The token for the period before the constructor name, or `null` if the /// specified constructor is the unnamed constructor. @@ -2644,14 +2644,14 @@ class ConstructorNameImpl extends AstNodeImpl implements ConstructorName { @Deprecated('Use type2 instead') @override - TypeNameImpl get type => _type; + NamedTypeImpl get type => _type; set type(NamedType type) { - _type = _becomeParentOf(type as TypeNameImpl); + _type = _becomeParentOf(type as NamedTypeImpl); } @override - TypeNameImpl get type2 => _type; + NamedTypeImpl get type2 => _type; @override E? accept(AstVisitor visitor) => visitor.visitConstructorName(this); @@ -3638,7 +3638,7 @@ class ExtendsClauseImpl extends AstNodeImpl implements ExtendsClause { Token extendsKeyword; /// The name of the class that is being extended. - TypeNameImpl _superclass; + NamedTypeImpl _superclass; /// Initialize a newly created extends clause. ExtendsClauseImpl(this.extendsKeyword, this._superclass) { @@ -3658,14 +3658,14 @@ class ExtendsClauseImpl extends AstNodeImpl implements ExtendsClause { @Deprecated('Use superclass2 instead') @override - TypeNameImpl get superclass => _superclass; + NamedTypeImpl get superclass => _superclass; set superclass(NamedType name) { - _superclass = _becomeParentOf(name as TypeNameImpl); + _superclass = _becomeParentOf(name as NamedTypeImpl); } @override - TypeNameImpl get superclass2 => _superclass; + NamedTypeImpl get superclass2 => _superclass; @override E? accept(AstVisitor visitor) => visitor.visitExtendsClause(this); @@ -7378,6 +7378,82 @@ class NamedExpressionImpl extends ExpressionImpl implements NamedExpression { } } +/// The name of a type, which can optionally include type arguments. +/// +/// typeName ::= +/// [Identifier] typeArguments? '?'? +/// ignore: deprecated_member_use_from_same_package +class NamedTypeImpl extends TypeAnnotationImpl implements TypeName { + /// The name of the type. + IdentifierImpl _name; + + /// The type arguments associated with the type, or `null` if there are no + /// type arguments. + TypeArgumentListImpl? _typeArguments; + + @override + Token? question; + + /// The type being named, or `null` if the AST structure has not been + /// resolved, or if this is part of a [ConstructorReference]. + @override + DartType? type; + + /// Initialize a newly created type name. The [typeArguments] can be `null` if + /// there are no type arguments. + NamedTypeImpl(this._name, this._typeArguments, {this.question}) { + _becomeParentOf(_name); + _becomeParentOf(_typeArguments); + } + + @override + Token get beginToken => _name.beginToken; + + @override + Iterable get childEntities => ChildEntities() + ..add(_name) + ..add(_typeArguments) + ..add(question); + + @override + Token get endToken => question ?? _typeArguments?.endToken ?? _name.endToken; + + @override + bool get isDeferred { + Identifier identifier = name; + if (identifier is! PrefixedIdentifier) { + return false; + } + return identifier.isDeferred; + } + + @override + bool get isSynthetic => _name.isSynthetic && _typeArguments == null; + + @override + IdentifierImpl get name => _name; + + set name(Identifier identifier) { + _name = _becomeParentOf(identifier as IdentifierImpl); + } + + @override + TypeArgumentListImpl? get typeArguments => _typeArguments; + + set typeArguments(TypeArgumentList? typeArguments) { + _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl?); + } + + @override + E? accept(AstVisitor visitor) => visitor.visitNamedType(this); + + @override + void visitChildren(AstVisitor visitor) { + _name.accept(visitor); + _typeArguments?.accept(visitor); + } +} + /// A node that represents a directive that impacts the namespace of a library. /// /// directive ::= @@ -10215,7 +10291,7 @@ abstract class TypedLiteralImpl extends LiteralImpl implements TypedLiteral { /// always be the type `Type`). To see the type represented by the type literal /// use `.typeName.type`. class TypeLiteralImpl extends ExpressionImpl implements TypeLiteral { - TypeNameImpl _typeName; + NamedTypeImpl _typeName; TypeLiteralImpl(this._typeName) { _becomeParentOf(_typeName); @@ -10237,13 +10313,13 @@ class TypeLiteralImpl extends ExpressionImpl implements TypeLiteral { : Precedence.postfix; @override - TypeNameImpl get type => _typeName; + NamedTypeImpl get type => _typeName; @Deprecated('Use namedType instead') @override - TypeNameImpl get typeName => _typeName; + NamedTypeImpl get typeName => _typeName; - set typeName(TypeNameImpl value) { + set typeName(NamedTypeImpl value) { _typeName = _becomeParentOf(value); } @@ -10256,82 +10332,6 @@ class TypeLiteralImpl extends ExpressionImpl implements TypeLiteral { } } -/// The name of a type, which can optionally include type arguments. -/// -/// typeName ::= -/// [Identifier] typeArguments? '?'? -/// ignore: deprecated_member_use_from_same_package -class TypeNameImpl extends TypeAnnotationImpl implements TypeName { - /// The name of the type. - IdentifierImpl _name; - - /// The type arguments associated with the type, or `null` if there are no - /// type arguments. - TypeArgumentListImpl? _typeArguments; - - @override - Token? question; - - /// The type being named, or `null` if the AST structure has not been - /// resolved, or if this is part of a [ConstructorReference]. - @override - DartType? type; - - /// Initialize a newly created type name. The [typeArguments] can be `null` if - /// there are no type arguments. - TypeNameImpl(this._name, this._typeArguments, {this.question}) { - _becomeParentOf(_name); - _becomeParentOf(_typeArguments); - } - - @override - Token get beginToken => _name.beginToken; - - @override - Iterable get childEntities => ChildEntities() - ..add(_name) - ..add(_typeArguments) - ..add(question); - - @override - Token get endToken => question ?? _typeArguments?.endToken ?? _name.endToken; - - @override - bool get isDeferred { - Identifier identifier = name; - if (identifier is! PrefixedIdentifier) { - return false; - } - return identifier.isDeferred; - } - - @override - bool get isSynthetic => _name.isSynthetic && _typeArguments == null; - - @override - IdentifierImpl get name => _name; - - set name(Identifier identifier) { - _name = _becomeParentOf(identifier as IdentifierImpl); - } - - @override - TypeArgumentListImpl? get typeArguments => _typeArguments; - - set typeArguments(TypeArgumentList? typeArguments) { - _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl?); - } - - @override - E? accept(AstVisitor visitor) => visitor.visitNamedType(this); - - @override - void visitChildren(AstVisitor visitor) { - _name.accept(visitor); - _typeArguments?.accept(visitor); - } -} - /// A type parameter. /// /// typeParameter ::= diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart index e12111d9185..0fcad99eb3c 100644 --- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart +++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart @@ -197,7 +197,7 @@ class AstFactoryImpl extends AstFactory { typeParameters as TypeParameterListImpl?, equals, abstractKeyword, - superclass as TypeNameImpl, + superclass as NamedTypeImpl, withClause as WithClauseImpl, implementsClause as ImplementsClauseImpl?, semicolon); @@ -298,7 +298,7 @@ class AstFactoryImpl extends AstFactory { ConstructorNameImpl constructorName( NamedType type, Token? period, SimpleIdentifier? name) => ConstructorNameImpl( - type as TypeNameImpl, period, name as SimpleIdentifierImpl?); + type as NamedTypeImpl, period, name as SimpleIdentifierImpl?); @override ConstructorReferenceImpl constructorReference( @@ -434,7 +434,7 @@ class AstFactoryImpl extends AstFactory { @override ExtendsClauseImpl extendsClause(Token extendsKeyword, NamedType superclass) => - ExtendsClauseImpl(extendsKeyword, superclass as TypeNameImpl); + ExtendsClauseImpl(extendsKeyword, superclass as NamedTypeImpl); @override ExtensionDeclarationImpl extensionDeclaration( @@ -980,12 +980,12 @@ class AstFactoryImpl extends AstFactory { NamedExpressionImpl(name as LabelImpl, expression as ExpressionImpl); @override - TypeNameImpl namedType({ + NamedTypeImpl namedType({ required Identifier name, TypeArgumentList? typeArguments, Token? question, }) => - TypeNameImpl( + NamedTypeImpl( name as IdentifierImpl, typeArguments as TypeArgumentListImpl?, question: question); @@ -1242,13 +1242,13 @@ class AstFactoryImpl extends AstFactory { @override TypeLiteralImpl typeLiteral({required NamedType typeName}) => - TypeLiteralImpl(typeName as TypeNameImpl); + TypeLiteralImpl(typeName as NamedTypeImpl); @Deprecated('Use namedType() instead') @override - TypeNameImpl typeName(Identifier name, TypeArgumentList? typeArguments, + NamedTypeImpl typeName(Identifier name, TypeArgumentList? typeArguments, {Token? question}) => - TypeNameImpl( + NamedTypeImpl( name as IdentifierImpl, typeArguments as TypeArgumentListImpl?, question: question); diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart index 0a2871d55fa..11c386e8b70 100644 --- a/pkg/analyzer/lib/src/dart/ast/utilities.dart +++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart @@ -2534,7 +2534,7 @@ class NodeReplacer implements AstVisitor { } @override - bool? visitNamedType(covariant TypeNameImpl node) { + bool? visitNamedType(covariant NamedTypeImpl node) { if (identical(node.name, _oldNode)) { node.name = _newNode as Identifier; return true; @@ -2864,14 +2864,14 @@ class NodeReplacer implements AstVisitor { @override bool visitTypeLiteral(covariant TypeLiteralImpl node) { if (identical(node.type, _oldNode)) { - node.typeName = _newNode as TypeNameImpl; + node.typeName = _newNode as NamedTypeImpl; return true; } return visitNode(node); } @override - bool visitTypeName(covariant TypeNameImpl node) { + bool visitTypeName(covariant NamedTypeImpl node) { throw StateError('Should not be invoked'); } diff --git a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart index 9cf8cfdd560..969d189f757 100644 --- a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart +++ b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart @@ -74,7 +74,7 @@ class NamedTypeResolver { /// given [node] is resolved, all its children must be already resolved. /// /// The client must set [nameScope] before calling [resolve]. - void resolve(TypeNameImpl node) { + void resolve(NamedTypeImpl node) { rewriteResult = null; hasErrorReported = false; @@ -283,7 +283,7 @@ class NamedTypeResolver { } } - void _resolveToElement(TypeNameImpl node, Element? element) { + void _resolveToElement(NamedTypeImpl node, Element? element) { if (element == null) { node.type = dynamicType; if (!_libraryElement.shouldIgnoreUndefinedIdentifier(node.name)) { @@ -306,7 +306,7 @@ class NamedTypeResolver { /// will be a [PrefixElement]. But when we resolved the `prefix` it turned /// out to be a [ClassElement], so it is probably a `Class.constructor`. void _rewriteToConstructorName( - TypeNameImpl node, + NamedTypeImpl node, PrefixedIdentifier typeIdentifier, ) { var constructorName = node.parent; diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart index 179367517b0..0fb4f74f383 100644 --- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart +++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart @@ -882,7 +882,7 @@ class ResolutionVisitor extends RecursiveAstVisitor { } @override - void visitNamedType(covariant TypeNameImpl node) { + void visitNamedType(covariant NamedTypeImpl node) { node.typeArguments?.accept(this); _typeNameResolver.nameScope = _nameScope; @@ -1256,7 +1256,7 @@ class ResolutionVisitor extends RecursiveAstVisitor { /// The flag [asClass] specifies if the type will be used as a class, so mixin /// declarations are not valid (they declare interfaces and mixins, but not /// classes). - void _resolveType(TypeNameImpl namedType, ErrorCode errorCode, + void _resolveType(NamedTypeImpl namedType, ErrorCode errorCode, {bool asClass = false}) { _typeNameResolver.classHierarchy_namedType = namedType; visitNamedType(namedType); @@ -1295,7 +1295,7 @@ class ResolutionVisitor extends RecursiveAstVisitor { /// @return an array containing all of the types that were resolved. void _resolveTypes(NodeList namedTypes, ErrorCode errorCode) { for (var namedType in namedTypes) { - _resolveType(namedType as TypeNameImpl, errorCode); + _resolveType(namedType as NamedTypeImpl, errorCode); } } @@ -1305,7 +1305,7 @@ class ResolutionVisitor extends RecursiveAstVisitor { for (var namedType in clause.mixinTypes2) { _typeNameResolver.withClause_namedType = namedType; _resolveType( - namedType as TypeNameImpl, + namedType as NamedTypeImpl, CompileTimeErrorCode.MIXIN_OF_NON_CLASS, ); _typeNameResolver.withClause_namedType = null; diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart index 6077d9188bd..d722db43e69 100644 --- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart +++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart @@ -1427,7 +1427,7 @@ class AstTestFactory { /// /// Note: This method does not correctly handle class elements that /// have type parameters. - static TypeNameImpl typeName(ClassElement element, + static NamedTypeImpl typeName(ClassElement element, [List? arguments]) { var name = identifier3(element.name); name.staticElement = element; @@ -1442,14 +1442,14 @@ class AstTestFactory { return typeName; } - static TypeNameImpl typeName3(Identifier name, + static NamedTypeImpl typeName3(Identifier name, [List? arguments]) => astFactory.namedType( name: name, typeArguments: typeArgumentList(arguments), ); - static TypeNameImpl typeName4(String name, + static NamedTypeImpl typeName4(String name, [List? arguments, bool question = false]) => astFactory.namedType( name: identifier3(name), diff --git a/pkg/analyzer/lib/src/summary2/default_types_builder.dart b/pkg/analyzer/lib/src/summary2/default_types_builder.dart index 356de043a85..d565a18bfb5 100644 --- a/pkg/analyzer/lib/src/summary2/default_types_builder.dart +++ b/pkg/analyzer/lib/src/summary2/default_types_builder.dart @@ -91,7 +91,7 @@ class DefaultTypesBuilder { var boundNode = element.parameter.bound; if (boundNode is GenericFunctionTypeImpl) { boundNode.type = DynamicTypeImpl.instance; - } else if (boundNode is TypeNameImpl) { + } else if (boundNode is NamedTypeImpl) { boundNode.type = DynamicTypeImpl.instance; } else { throw UnimplementedError('(${boundNode.runtimeType}) $boundNode'); @@ -108,7 +108,7 @@ class DefaultTypesBuilder { for (var parameter in typeParameters) { parameter as TypeParameterImpl; var boundNode = parameter.bound; - if (boundNode is TypeNameImpl) { + if (boundNode is NamedTypeImpl) { if (typeParametersByName == null) { typeParametersByName = {}; for (var parameterNode in typeParameters) { diff --git a/pkg/analyzer/lib/src/summary2/named_type_builder.dart b/pkg/analyzer/lib/src/summary2/named_type_builder.dart index 5c3473b657a..e6cd97a54db 100644 --- a/pkg/analyzer/lib/src/summary2/named_type_builder.dart +++ b/pkg/analyzer/lib/src/summary2/named_type_builder.dart @@ -40,7 +40,7 @@ class NamedTypeBuilder extends TypeBuilder { /// The node for which this builder is created, or `null` if the builder /// was detached from its node, e.g. during computing default types for /// type parameters. - final TypeNameImpl? node; + final NamedTypeImpl? node; /// The actual built type, not a [TypeBuilder] anymore. /// @@ -55,7 +55,7 @@ class NamedTypeBuilder extends TypeBuilder { factory NamedTypeBuilder.of( Linker linker, TypeSystemImpl typeSystem, - TypeNameImpl node, + NamedTypeImpl node, Element element, NullabilitySuffix nullabilitySuffix, ) { diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart index ef6c18080d5..6e6cbe29071 100644 --- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart +++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart @@ -311,7 +311,7 @@ class ReferenceResolver extends ThrowingAstVisitor { } @override - void visitNamedType(covariant TypeNameImpl node) { + void visitNamedType(covariant NamedTypeImpl node) { var typeIdentifier = node.name; Element? element; diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart index 48731a7e0e3..9887d9c7149 100644 --- a/pkg/analyzer/lib/src/summary2/types_builder.dart +++ b/pkg/analyzer/lib/src/summary2/types_builder.dart @@ -364,7 +364,7 @@ class _MixinInference { if (withClause == null) return; for (var mixinNode in withClause.mixinTypes2) { - var mixinType = _inferSingle(mixinNode as TypeNameImpl); + var mixinType = _inferSingle(mixinNode as NamedTypeImpl); interfacesMerger.addWithSupertypes(mixinType); } } @@ -400,7 +400,7 @@ class _MixinInference { return result; } - InterfaceType _inferSingle(TypeNameImpl mixinNode) { + InterfaceType _inferSingle(NamedTypeImpl mixinNode) { var mixinType = _interfaceType(mixinNode.typeOrThrow); if (mixinNode.typeArguments != null) { diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart index 7524133d501..5e57c8b3b31 100644 --- a/pkg/nnbd_migration/lib/src/fix_builder.dart +++ b/pkg/nnbd_migration/lib/src/fix_builder.dart @@ -1231,7 +1231,7 @@ class _FixBuilderPreVisitor extends GeneralizingAstVisitor _makeTypeNameNullable(node, decoratedType); } } - (node as TypeNameImpl).type = + (node as NamedTypeImpl).type = _fixBuilder._variables!.toFinalType(decoratedType); super.visitNamedType(node); }