diff --git a/pkg/analysis_server/test/analysis/get_hover_test.dart b/pkg/analysis_server/test/analysis/get_hover_test.dart index c6a47a767f1..d505960ff95 100644 --- a/pkg/analysis_server/test/analysis/get_hover_test.dart +++ b/pkg/analysis_server/test/analysis/get_hover_test.dart @@ -1762,7 +1762,7 @@ typedef A = void Function(int); var hover = await prepareHover('A'); _assertHover( hover, - elementDescription: 'typedef A = void Function(int )', + elementDescription: 'typedef A = void Function(int)', elementKind: 'type alias', ); } diff --git a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart index b8043674e21..15a4a1ea2a4 100644 --- a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart +++ b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart @@ -36,19 +36,11 @@ class ElementDisplayStringBuilder { @override String toString() => _buffer.toString(); - void writeAbstractElement(FragmentImpl element) { + void writeAbstractElement(ElementImpl element) { _write(element.name ?? ''); } - void writeAbstractElement2(ElementImpl element) { - _write(element.name ?? ''); - } - - void writeClassElement(ClassFragmentImpl element) { - if (element.isAugmentation) { - _write('augment '); - } - + void writeClassElement(ClassElementImpl element) { if (element.isSealed) { _write('sealed '); } else if (element.isAbstract) { @@ -68,23 +60,17 @@ class ElementDisplayStringBuilder { _write('class '); _write(element.displayName); - _writeTypeParameters(element.typeParameters); + _writeTypeParameters2(element.typeParameters); _writeTypeIfNotObject(' extends ', element.supertype); _writeTypesIfNotEmpty(' with ', element.mixins); _writeTypesIfNotEmpty(' implements ', element.interfaces); } - void writeCompilationUnitElement(LibraryFragmentImpl element) { - var path = element.source.fullName; - _write(path); - } - void writeConstructorElement(ConstructorElementMixin2 element) { _writeType(element.returnType); - _write(' '); - _write(element.displayName); + _write(' ${element.displayName}'); _writeFormalParameters2( element.formalParameters, @@ -93,31 +79,18 @@ class ElementDisplayStringBuilder { ); } - void writeConstructorFragment(ConstructorFragmentImpl element) { - _writeType(element.element.returnType); - _write(' '); - - _write(element.displayName); - - _writeFormalParameters( - element.parameters, - forElement: true, - allowMultiline: true, - ); + void writeDynamicElement(DynamicElementImpl element) { + _write('dynamic'); } void writeDynamicType() { _write('dynamic'); } - void writeEnumElement(EnumFragmentImpl element) { - if (element.isAugmentation) { - _write('augment '); - } - + void writeEnumElement(EnumElementImpl element) { _write('enum '); _write(element.displayName); - _writeTypeParameters(element.typeParameters); + _writeTypeParameters2(element.typeParameters); _writeTypesIfNotEmpty(' with ', element.mixins); _writeTypesIfNotEmpty(' implements ', element.interfaces); } @@ -140,54 +113,23 @@ class ElementDisplayStringBuilder { } } - void writeExecutableFragment(ExecutableFragmentImpl fragment, String name) { - if (fragment.isAugmentation) { - _write('augment '); - } - - if (fragment is! SetterFragmentImpl) { - _writeType(fragment.element.returnType); - _write(' '); - } - - _write(name); - - if (fragment is! GetterFragmentImpl) { - _writeTypeParameters(fragment.typeParameters); - _writeFormalParameters( - fragment.parameters, - forElement: true, - allowMultiline: true, - ); - } - } - - void writeExtensionElement(ExtensionFragmentImpl element) { - if (element.isAugmentation) { - _write('augment '); - } - + void writeExtensionElement(ExtensionElementImpl element) { _write('extension'); - if (element.displayName.isNotEmpty) { - _write(' '); - _write(element.displayName); - _writeTypeParameters(element.typeParameters); + if (element.name case var name?) { + _write(' $name'); } + _writeTypeParameters2(element.typeParameters); _write(' on '); _writeType(element.extendedType); } - void writeExtensionTypeElement(ExtensionTypeFragmentImpl element) { - if (element.isAugmentation) { - _write('augment '); - } - + void writeExtensionTypeElement(ExtensionTypeElementImpl element) { _write('extension type '); _write(element.displayName); - _writeTypeParameters(element.typeParameters); + _writeTypeParameters2(element.typeParameters); _write('('); - _writeType(element.representation.element.type); + _writeType(element.representation.type); _write(' '); _write(element.representation.name ?? ''); _write(')'); @@ -195,21 +137,7 @@ class ElementDisplayStringBuilder { _writeTypesIfNotEmpty(' implements ', element.interfaces); } - void writeFormalParameter(FormalParameterFragmentImpl element) { - if (element.isRequiredPositional) { - _writeWithoutDelimiters(element, forElement: true); - } else if (element.isOptionalPositional) { - _write('['); - _writeWithoutDelimiters(element, forElement: true); - _write(']'); - } else if (element.isNamed) { - _write('{'); - _writeWithoutDelimiters(element, forElement: true); - _write('}'); - } - } - - void writeFormalParameter2(FormalParameterElementMixin element) { + void writeFormalParameterElement(FormalParameterElementMixin element) { if (element.isRequiredPositional) { _writeWithoutDelimiters2(element, forElement: true); } else if (element.isOptionalPositional) { @@ -237,13 +165,15 @@ class ElementDisplayStringBuilder { _writeNullability(type.nullabilitySuffix); } - void writeGenericFunctionTypeElement( - GenericFunctionTypeFragmentImpl element, - ) { + void writeGenericFunctionTypeElement(GenericFunctionTypeElementImpl element) { _writeType(element.returnType); _write(' Function'); - _writeTypeParameters(element.typeParameters); - _writeFormalParameters(element.parameters, forElement: true); + _writeTypeParameters2(element.typeParameters); + _writeFormalParameters2(element.formalParameters.cast(), forElement: true); + } + + void writeGetterElement(GetterElementImpl element) { + writeExecutableElement(element, 'get ${element.displayName}'); } void writeInterfaceType(InterfaceType type) { @@ -260,6 +190,10 @@ class ElementDisplayStringBuilder { _write('InvalidType'); } + void writeLabelElement(LabelElementImpl element) { + _write(element.name ?? ''); + } + void writeLibraryElement(LibraryElementImpl element) { _write('library '); _write('${element.source.uri}'); @@ -275,20 +209,40 @@ class ElementDisplayStringBuilder { _writeDirectiveUri(element.uri); } - void writeMixinElement(MixinFragmentImpl element) { - if (element.isAugmentation) { - _write('augment '); - } + void writeLocalFunctionElement(LocalFunctionElementImpl element) { + _writeType(element.returnType); + _write(element.name ?? ' '); + _writeTypeParameters2(element.typeParameters); + _writeFormalParameters2(element.formalParameters, forElement: true); + } + + void writeMethodElement(MethodElementImpl element) { + _writeType(element.returnType); + _write(' '); + _write(element.name ?? ''); + _writeTypeParameters2(element.typeParameters); + _writeFormalParameters2( + element.formalParameters, + forElement: true, + allowMultiline: true, + ); + } + + void writeMixinElement(MixinElementImpl element) { if (element.isBase) { _write('base '); } _write('mixin '); _write(element.displayName); - _writeTypeParameters(element.typeParameters); + _writeTypeParameters2(element.typeParameters); _writeTypesIfNotEmpty(' on ', element.superclassConstraints); _writeTypesIfNotEmpty(' implements ', element.interfaces); } + void writeNeverElement(NeverElementImpl element) { + _write('Never'); + } + void writeNeverType(NeverType type) { _write('Never'); _writeNullability(type.nullabilitySuffix); @@ -339,8 +293,7 @@ class ElementDisplayStringBuilder { _write('{'); for (var field in namedFields) { _writeType(field.type); - _write(' '); - _write(field.name); + _write(' ${field.name}'); if (index++ < fieldCount - 1) { _write(', '); } @@ -357,45 +310,40 @@ class ElementDisplayStringBuilder { _writeNullability(type.nullabilitySuffix); } - void writeTypeAliasElement(TypeAliasFragmentImpl element) { - if (element.isAugmentation) { - _write('augment '); - } + void writeSetterElement(SetterElementImpl element) { + writeExecutableElement(element, 'set ${element.displayName}'); + } + void writeTopLevelFunctionElement(TopLevelFunctionElementImpl element) { + _writeType(element.returnType); + _write(' '); + _write(element.name ?? ' '); + _writeTypeParameters2(element.typeParameters); + _writeFormalParameters2( + element.formalParameters, + forElement: true, + allowMultiline: true, + ); + } + + void writeTypeAliasElement(TypeAliasElementImpl element) { _write('typedef '); _write(element.displayName); - _writeTypeParameters(element.typeParameters); + _writeTypeParameters2(element.typeParameters); _write(' = '); var aliasedElement = element.aliasedElement; if (aliasedElement != null) { aliasedElement.appendTo(this); } else { - _writeType(element.element.aliasedType); + _writeType(element.aliasedType); } } - void writeTypeParameter(TypeParameterFragmentImpl element) { + void writeTypeParameterElement(TypeParameterElementImpl element) { var variance = element.variance; if (!element.isLegacyCovariant && variance != Variance.unrelated) { - _write(variance.keyword); - _write(' '); - } - - _write(element.displayName); - - var bound = element.bound; - if (bound != null) { - _write(' extends '); - _writeType(bound); - } - } - - void writeTypeParameter2(TypeParameterElementImpl element) { - var variance = element.variance; - if (!element.isLegacyCovariant && variance != Variance.unrelated) { - _write(variance.keyword); - _write(' '); + _write('${variance.keyword} '); } _write(element.displayName); @@ -430,16 +378,9 @@ class ElementDisplayStringBuilder { _write('_'); } - void writeVariableElement(VariableFragmentImpl element) { - _writeType(element.element.type); - _write(' '); - _write(element.displayName); - } - void writeVariableElement2(VariableElement2OrMember element) { _writeType(element.type); - _write(' '); - _write(element.displayName); + _write(' ${element.displayName}'); } void writeVoidType() { @@ -472,65 +413,6 @@ class ElementDisplayStringBuilder { } } - void _writeFormalParameters( - List parameters, { - required bool forElement, - bool allowMultiline = false, - }) { - // Assume the display string looks better wrapped when there are at least - // three parameters. This avoids having to pre-compute the single-line - // version and know the length of the function name/return type. - var multiline = allowMultiline && _multiline && parameters.length >= 3; - - // The prefix for open groups is included in separator for single-line but - // not for multiline so must be added explicitly. - var openGroupPrefix = multiline ? ' ' : ''; - var separator = multiline ? ',' : ', '; - var trailingComma = multiline ? ',\n' : ''; - var parameterPrefix = multiline ? '\n ' : ''; - - _write('('); - - _WriteFormalParameterKind? lastKind; - var lastClose = ''; - - void openGroup(_WriteFormalParameterKind kind, String open, String close) { - if (lastKind != kind) { - _write(lastClose); - if (lastKind != null) { - // We only need to include the space before the open group if there - // was a previous parameter, otherwise it goes immediately after the - // open paren. - _write(openGroupPrefix); - } - _write(open); - lastKind = kind; - lastClose = close; - } - } - - for (var i = 0; i < parameters.length; i++) { - if (i != 0) { - _write(separator); - } - - var parameter = parameters[i]; - if (parameter.isRequiredPositional) { - openGroup(_WriteFormalParameterKind.requiredPositional, '', ''); - } else if (parameter.isOptionalPositional) { - openGroup(_WriteFormalParameterKind.optionalPositional, '[', ']'); - } else if (parameter.isNamed) { - openGroup(_WriteFormalParameterKind.named, '{', '}'); - } - _write(parameterPrefix); - _writeWithoutDelimiters(parameter, forElement: forElement); - } - - _write(trailingComma); - _write(lastClose); - _write(')'); - } - void _writeFormalParameters2( List parameters, { required bool forElement, @@ -628,19 +510,6 @@ class ElementDisplayStringBuilder { } } - void _writeTypeParameters(List elements) { - if (elements.isEmpty) return; - - _write('<'); - for (var i = 0; i < elements.length; i++) { - if (i != 0) { - _write(', '); - } - elements[i].appendTo(this); - } - _write('>'); - } - void _writeTypeParameters2(List elements) { if (elements.isEmpty) return; @@ -670,32 +539,6 @@ class ElementDisplayStringBuilder { } } - void _writeWithoutDelimiters( - FormalParameterFragmentImpl element, { - required bool forElement, - }) { - if (element.isRequiredNamed) { - _write('required '); - } - - // TODO(scheglov): write a placeholder, or remove completely - // When we do correct separate writing elements. - _writeType(element.element.type); - - if (forElement || element.isNamed) { - _write(' '); - _write(element.displayName); - } - - if (forElement) { - var defaultValueCode = element.element.defaultValueCode; - if (defaultValueCode != null) { - _write(' = '); - _write(defaultValueCode); - } - } - } - void _writeWithoutDelimiters2( FormalParameterElementMixin element, { required bool forElement, @@ -707,8 +550,9 @@ class ElementDisplayStringBuilder { _writeType(element.type); if (forElement || element.isNamed) { - _write(' '); - _write(element.displayName); + if (element.name case var name?) { + _write(' $name'); + } } if (forElement) { diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart index 046b8875869..172a89acacc 100644 --- a/pkg/analyzer/lib/src/dart/element/element.dart +++ b/pkg/analyzer/lib/src/dart/element/element.dart @@ -374,6 +374,11 @@ class ClassElementImpl extends InterfaceElementImpl implements ClassElement { return accept(visitor); } + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeClassElement(this); + } + @override @trackedIndirectly bool isExtendableIn(LibraryElement library) { @@ -667,11 +672,6 @@ class ClassFragmentImpl extends ClassOrMixinFragmentImpl fragment.previousFragment = this; nextFragment = fragment; } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeClassElement(this); - } } abstract class ClassOrMixinFragmentImpl extends InterfaceFragmentImpl { @@ -888,23 +888,17 @@ class ConstructorElementImpl extends ExecutableElementImpl @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeConstructorElement(this); + } + /// Ensures that dependencies of this constructor, such as default values /// of formal parameters, are evaluated. void computeConstantDependencies() { firstFragment.computeConstantDependencies(); } - @override - String displayString({bool multiline = false, bool preferTypeAlias = false}) { - // TODO(scheglov): de-duplicate - var builder = ElementDisplayStringBuilder( - multiline: multiline, - preferTypeAlias: preferTypeAlias, - ); - builder.writeConstructorElement(this); - return builder.toString(); - } - @override void visitChildren(ElementVisitor2 visitor) { for (var child in children) { @@ -1077,11 +1071,6 @@ class ConstructorFragmentImpl extends ExecutableFragmentImpl firstTokenOffset ?? enclosingElement.offset; - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeConstructorFragment(this); - } - /// Ensures that dependencies of this constructor, such as default values /// of formal parameters, are evaluated. void computeConstantDependencies() { @@ -1293,6 +1282,11 @@ class DynamicElementImpl extends TypeDefiningElementImpl { @Deprecated('Use accept instead') @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeDynamicElement(this); + } } /// The synthetic element representing the declaration of the type `dynamic`. @@ -1864,7 +1858,7 @@ abstract class ElementImpl implements Element { /// Append a textual representation of this element to the given [builder]. void appendTo(ElementDisplayStringBuilder builder) { - builder.writeAbstractElement2(this); + builder.writeAbstractElement(this); } @override @@ -2033,6 +2027,11 @@ class EnumElementImpl extends InterfaceElementImpl implements EnumElement { @Deprecated('Use accept instead') @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeEnumElement(this); + } } /// An [InterfaceFragmentImpl] which is an enum. @@ -2068,11 +2067,6 @@ class EnumFragmentImpl extends InterfaceFragmentImpl implements EnumFragment { fragment.previousFragment = this; nextFragment = fragment; } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeEnumElement(this); - } } /// Common base class for all analyzer-internal classes that implement @@ -2191,6 +2185,11 @@ abstract class ExecutableElementImpl extends FunctionTypedElementImpl nullabilitySuffix: NullabilitySuffix.none, ); } + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeExecutableElement(this, name!); + } } abstract class ExecutableFragmentImpl extends _ExistingFragmentImpl @@ -2353,11 +2352,6 @@ abstract class ExecutableFragmentImpl extends _ExistingFragmentImpl List get parameters_unresolved { return _parameters; } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeExecutableFragment(this, displayName); - } } class ExtensionElementImpl extends InstanceElementImpl @@ -2412,6 +2406,11 @@ class ExtensionElementImpl extends InstanceElementImpl @Deprecated('Use accept instead') @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeExtensionElement(this); + } } class ExtensionFragmentImpl extends InstanceFragmentImpl @@ -2472,11 +2471,6 @@ class ExtensionFragmentImpl extends InstanceFragmentImpl fragment.previousFragment = this; nextFragment = fragment; } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeExtensionElement(this); - } } class ExtensionTypeElementImpl extends InterfaceElementImpl @@ -2564,6 +2558,11 @@ class ExtensionTypeElementImpl extends InterfaceElementImpl @Deprecated('Use accept instead') @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeExtensionTypeElement(this); + } } class ExtensionTypeFragmentImpl extends InterfaceFragmentImpl @@ -2617,11 +2616,6 @@ class ExtensionTypeFragmentImpl extends InterfaceFragmentImpl fragment.previousFragment = this; nextFragment = fragment; } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeExtensionTypeElement(this); - } } /// Common base class for all analyzer-internal classes that implement @@ -3103,6 +3097,11 @@ class FormalParameterElementImpl extends PromotableElementImpl @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeFormalParameterElement(this); + } + @override void visitChildren(ElementVisitor2 visitor) { for (var child in children) { @@ -3378,11 +3377,6 @@ class FormalParameterFragmentImpl extends VariableFragmentImpl _typeParameters = typeParameters; } - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeFormalParameter(this); - } - FormalParameterElementImpl _createElement( FormalParameterFragment firstFragment, ) => FormalParameterElementImpl(firstFragment as FormalParameterFragmentImpl); @@ -3452,19 +3446,6 @@ mixin FragmentedElementMixin implements _Fragmented { } return result; } - - String displayString({bool multiline = false, bool preferTypeAlias = false}) { - var builder = ElementDisplayStringBuilder( - multiline: multiline, - preferTypeAlias: preferTypeAlias, - ); - var fragment = firstFragment; - if (fragment is! FragmentImpl) { - throw UnsupportedError('Fragment is not an ElementImpl'); - } - (fragment as FragmentImpl).appendTo(builder); - return builder.toString(); - } } mixin FragmentedExecutableElementMixin @@ -3723,11 +3704,6 @@ abstract class FragmentImpl implements Fragment { return identical(this, other); } - /// Append a textual representation of this element to the given [builder]. - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeAbstractElement(this); - } - /// Set this element as the enclosing element for given [element]. void encloseElement(FragmentImpl element) { element.enclosingElement = this; @@ -3740,36 +3716,6 @@ abstract class FragmentImpl implements Fragment { } } - /// Returns the presentation of this element as it should appear when - /// presented to users. - /// - /// If [withNullability] is `true`, then [NullabilitySuffix.question] and - /// [NullabilitySuffix.star] in types will be represented as `?` and `*`. - /// [NullabilitySuffix.none] does not have any explicit presentation. - /// - /// If [withNullability] is `false`, nullability suffixes will not be - /// included into the presentation. - /// - /// If [multiline] is `true`, the string may be wrapped over multiple lines - /// with newlines to improve formatting. For example function signatures may - /// be formatted as if they had trailing commas. - /// - /// Clients should not depend on the content of the returned value as it will - /// be changed if doing so would improve the UX. - String getDisplayString({ - @Deprecated('Only non-nullable by default mode is supported') - bool withNullability = true, - bool multiline = false, - bool preferTypeAlias = false, - }) { - var builder = ElementDisplayStringBuilder( - multiline: multiline, - preferTypeAlias: preferTypeAlias, - ); - appendTo(builder); - return builder.toString(); - } - /// Return `true` if this element has the given [modifier] associated with it. bool hasModifier(Modifier modifier) => _modifiers[modifier]; @@ -3791,7 +3737,7 @@ abstract class FragmentImpl implements Fragment { @override String toString() { - return getDisplayString(); + return "fragmentOf: $element"; } void writeModifiers(BufferedSink writer) { @@ -3889,7 +3835,7 @@ class GenericFunctionTypeElementImpl extends FunctionTypedElementImpl @override List get formalParameters => - _wrappedElement.formalParameters + _wrappedElement.formalParameters .map((fragment) => fragment.element) .toList(); @@ -3936,7 +3882,7 @@ class GenericFunctionTypeElementImpl extends FunctionTypedElementImpl String? get name3 => name; @override - DartType get returnType => _wrappedElement.returnType; + TypeImpl get returnType => _wrappedElement.returnType; @override FunctionType get type => _wrappedElement.type; @@ -3959,6 +3905,11 @@ class GenericFunctionTypeElementImpl extends FunctionTypedElementImpl @Deprecated('Use accept instead') @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeGenericFunctionTypeElement(this); + } } /// The element used for a generic function type. @@ -4065,11 +4016,6 @@ class GenericFunctionTypeFragmentImpl extends _ExistingFragmentImpl set type(FunctionTypeImpl type) { _type = type; } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeGenericFunctionTypeElement(this); - } } /// Common base class for all analyzer-internal classes that implement @@ -4163,6 +4109,11 @@ class GetterElementImpl extends PropertyAccessorElementImpl @Deprecated('Use accept instead') @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeGetterElement(this); + } } class GetterFragmentImpl extends PropertyAccessorFragmentImpl @@ -4185,11 +4136,6 @@ class GetterFragmentImpl extends PropertyAccessorFragmentImpl fragment.previousFragment = this; nextFragment = fragment; } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeExecutableFragment(this, 'get $displayName'); - } } /// A concrete implementation of a [HideElementCombinator]. @@ -4388,15 +4334,6 @@ abstract class InstanceElementImpl extends ElementImpl _setters = [..._setters, element]; } - @override - String displayString({ - bool multiline = false, - bool preferTypeAlias = false, - }) => firstFragment.getDisplayString( - multiline: multiline, - preferTypeAlias: preferTypeAlias, - ); - @Deprecated('Use displayString instead') @override String displayString2({ @@ -5537,13 +5474,9 @@ class LabelElementImpl extends ElementImpl implements LabelElement { T? accept2(ElementVisitor2 visitor) => accept(visitor); @override - String displayString({ - bool multiline = false, - bool preferTypeAlias = false, - }) => _wrappedFragment.getDisplayString( - multiline: multiline, - preferTypeAlias: preferTypeAlias, - ); + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeLabelElement(this); + } @Deprecated('Use displayString instead') @override @@ -6058,16 +5991,6 @@ class LibraryElementImpl extends ElementImpl builder.writeLibraryElement(this); } - @override - String displayString({bool multiline = false, bool preferTypeAlias = false}) { - var builder = ElementDisplayStringBuilder( - multiline: multiline, - preferTypeAlias: preferTypeAlias, - ); - appendTo(builder); - return builder.toString(); - } - @Deprecated('Use displayString instead') @override String displayString2({ @@ -6721,11 +6644,6 @@ class LibraryFragmentImpl extends _ExistingFragmentImpl fragment.enclosingElement = this; } - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeCompilationUnitElement(this); - } - /// Indicates whether it is unnecessary to report an undefined identifier /// error for an identifier reference with the given [name] and optional /// [prefix]. @@ -6987,13 +6905,9 @@ class LocalFunctionElementImpl extends ExecutableElementImpl T? accept2(ElementVisitor2 visitor) => accept(visitor); @override - String displayString({ - bool multiline = false, - bool preferTypeAlias = false, - }) => _wrappedFragment.getDisplayString( - multiline: multiline, - preferTypeAlias: preferTypeAlias, - ); + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeLocalFunctionElement(this); + } @Deprecated('Use displayString instead') @override @@ -7110,16 +7024,6 @@ class LocalVariableElementImpl extends PromotableElementImpl @override T? accept2(ElementVisitor2 visitor) => accept(visitor); - @override - String displayString({bool multiline = false, bool preferTypeAlias = false}) { - var builder = ElementDisplayStringBuilder( - multiline: multiline, - preferTypeAlias: preferTypeAlias, - ); - builder.writeVariableElement2(this); - return builder.toString(); - } - @Deprecated('Use displayString instead') @override String displayString2({ @@ -7681,6 +7585,11 @@ class MethodElementImpl extends ExecutableElementImpl @Deprecated('Use accept instead') @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeMethodElement(this); + } } class MethodFragmentImpl extends ExecutableFragmentImpl @@ -7816,6 +7725,11 @@ class MixinElementImpl extends InterfaceElementImpl implements MixinElement { @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeMixinElement(this); + } + @override bool isImplementableIn(LibraryElement library) { if (library == this.library) { @@ -7894,11 +7808,6 @@ class MixinFragmentImpl extends ClassOrMixinFragmentImpl fragment.previousFragment = this; nextFragment = fragment; } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeMixinElement(this); - } } /// The constants for all of the modifiers defined by the Dart language and for @@ -8311,6 +8220,11 @@ class NeverElementImpl extends TypeDefiningElementImpl { @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeNeverElement(this); + } + DartType instantiate({required NullabilitySuffix nullabilitySuffix}) { switch (nullabilitySuffix) { case NullabilitySuffix.question: @@ -8619,13 +8533,8 @@ class PrefixElementImpl extends ElementImpl implements PrefixElement { } @override - String displayString({bool multiline = false, bool preferTypeAlias = false}) { - var builder = ElementDisplayStringBuilder( - multiline: multiline, - preferTypeAlias: preferTypeAlias, - ); + void appendTo(ElementDisplayStringBuilder builder) { builder.writePrefixElement(this); - return builder.toString(); } @Deprecated('Use displayString instead') @@ -8957,6 +8866,11 @@ abstract class PropertyInducingElementImpl extends VariableElementImpl } List get _fragments; + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeVariableElement2(this); + } } /// Instances of this class are set for fields and top-level variables @@ -9145,6 +9059,11 @@ class SetterElementImpl extends PropertyAccessorElementImpl @Deprecated('Use accept instead') @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeSetterElement(this); + } } class SetterFragmentImpl extends PropertyAccessorFragmentImpl @@ -9179,11 +9098,6 @@ class SetterFragmentImpl extends PropertyAccessorFragmentImpl fragment.previousFragment = this; nextFragment = fragment; } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeExecutableFragment(this, 'set $displayName'); - } } /// A concrete implementation of a [ShowElementCombinator]. @@ -9465,6 +9379,11 @@ class TopLevelFunctionElementImpl extends ExecutableElementImpl @Deprecated('Use accept instead') @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeTopLevelFunctionElement(this); + } } /// A concrete implementation of a [TopLevelFunctionFragment]. @@ -9656,11 +9575,11 @@ class TypeAliasElementImpl extends TypeDefiningElementImpl } @override - Element? get aliasedElement { + ElementImpl? get aliasedElement { switch (firstFragment.aliasedElement) { - case InstanceFragment instance: + case InstanceFragmentImpl instance: return instance.element; - case GenericFunctionTypeFragment instance: + case GenericFunctionTypeFragmentImpl instance: return instance.element; } return null; @@ -9785,6 +9704,11 @@ class TypeAliasElementImpl extends TypeDefiningElementImpl @override T? accept2(ElementVisitor2 visitor) => accept(visitor); + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeTypeAliasElement(this); + } + @override TypeImpl instantiate({ required List typeArguments, @@ -9960,11 +9884,6 @@ class TypeAliasFragmentImpl extends _ExistingFragmentImpl fragment.previousFragment = this; nextFragment = fragment; } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeTypeAliasElement(this); - } } abstract class TypeDefiningElementImpl extends ElementImpl @@ -10061,7 +9980,7 @@ class TypeParameterElementImpl extends TypeDefiningElementImpl @override void appendTo(ElementDisplayStringBuilder builder) { - builder.writeTypeParameter2(this); + builder.writeTypeParameterElement(this); } @override @@ -10217,11 +10136,6 @@ class TypeParameterFragmentImpl extends FragmentImpl set variance(shared.Variance? newVariance) => _variance = newVariance; - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeTypeParameter(this); - } - /// Computes the variance of the type parameters in the [type]. shared.Variance computeVarianceInType(DartType type) { if (type is TypeParameterTypeImpl) { @@ -10381,6 +10295,11 @@ abstract class VariableElementImpl extends ElementImpl // TODO(scheglov): eventually move logic from PropertyInducingElementImpl } + @override + void appendTo(ElementDisplayStringBuilder builder) { + builder.writeVariableElement2(this); + } + /// Return a representation of the value of this variable, forcing the value /// to be computed if it had not previously been computed, or `null` if either /// this variable was not declared with the 'const' modifier or if the value @@ -10535,11 +10454,6 @@ abstract class VariableFragmentImpl extends FragmentImpl } throw StateError('($runtimeType) $this'); } - - @override - void appendTo(ElementDisplayStringBuilder builder) { - builder.writeVariableElement(this); - } } abstract class _ExistingFragmentImpl extends FragmentImpl diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart index 24f2ef6296b..a86d8200d67 100644 --- a/pkg/analyzer/lib/src/dart/element/member.dart +++ b/pkg/analyzer/lib/src/dart/element/member.dart @@ -991,7 +991,7 @@ class ParameterMember extends VariableMember with FormalParameterElementMixin { @override void appendTo(ElementDisplayStringBuilder builder) { - builder.writeFormalParameter2(this); + builder.writeFormalParameterElement(this); } @override diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart index 7944be7c8a0..4d441311158 100644 --- a/pkg/analyzer/lib/src/generated/resolver.dart +++ b/pkg/analyzer/lib/src/generated/resolver.dart @@ -5294,7 +5294,7 @@ class ScopeResolverVisitor extends UnifyingAstVisitor { node.type.accept(this); var aliasedElement = element.aliasedElement; - if (aliasedElement is GenericFunctionTypeElement) { + if (aliasedElement is GenericFunctionTypeElementImpl) { nameScope = FormalParameterScope( TypeParameterScope(nameScope, aliasedElement.typeParameters), aliasedElement.formalParameters, diff --git a/pkg/analyzer/test/src/dart/element/display_string_test.dart b/pkg/analyzer/test/src/dart/element/display_string_test.dart index 8d6f45b1440..9ca721e320d 100644 --- a/pkg/analyzer/test/src/dart/element/display_string_test.dart +++ b/pkg/analyzer/test/src/dart/element/display_string_test.dart @@ -2,7 +2,6 @@ // 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. -import 'package:analyzer/src/dart/element/element.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -22,8 +21,8 @@ class A {} abstract class B extends A {} '''); - var B = findElement2.class_('B').firstFragment as ClassFragmentImpl; - var displayString = B.getDisplayString(); + var B = findElement2.class_('B'); + var displayString = B.displayString(); expect(displayString, 'abstract class B extends A'); } @@ -33,9 +32,7 @@ extension StringExtension on String {} '''); var element = findElement2.extension_('StringExtension'); - var fragment = element.firstFragment as ExtensionFragmentImpl; - - var displayString = fragment.getDisplayString(); + var displayString = element.displayString(); expect(displayString, 'extension StringExtension on String'); } @@ -45,9 +42,7 @@ extension on String {} '''); var element = result.libraryElement2.extensions.single; - var fragment = element.firstFragment; - - var displayString = fragment.getDisplayString(); + var displayString = element.displayString(); expect(displayString, 'extension on String'); } @@ -57,9 +52,7 @@ extension type MyString(String it) implements String {} '''); var element = findElement2.extensionType('MyString'); - var fragment = element.firstFragment as ExtensionTypeFragmentImpl; - - var displayString = fragment.getDisplayString(); + var displayString = element.displayString(); expect( displayString, 'extension type MyString(String it) implements String', @@ -74,13 +67,11 @@ abstract class A { '''); var methodElement = findElement2.method('longMethodName'); - var methodFragment = methodElement.firstFragment as MethodFragmentImpl; - - var singleLine = methodFragment.getDisplayString(); + var singleLine = methodElement.displayString(); expect(singleLine, ''' String? longMethodName(String? aaa, [String? bbb = 'a', String? ccc])'''); - var multiLine = methodFragment.getDisplayString(multiline: true); + var multiLine = methodElement.displayString(multiline: true); expect(multiLine, ''' String? longMethodName( String? aaa, [ @@ -101,16 +92,14 @@ abstract class A { '''); var methodElement = findElement2.method('longMethodName'); - var methodFragment = methodElement.firstFragment as MethodFragmentImpl; - - var singleLine = methodFragment.getDisplayString(); + var singleLine = methodElement.displayString(); expect( singleLine, ''' String? longMethodName(String? aaa, [String? Function(String?, String?, String?) bbb, String? ccc])''', ); - var multiLine = methodFragment.getDisplayString(multiline: true); + var multiLine = methodElement.displayString(multiline: true); expect(multiLine, ''' String? longMethodName( String? aaa, [ @@ -125,9 +114,7 @@ String get a => ''; '''); var element = findElement2.topGet('a'); - var fragment = element.firstFragment as GetterFragmentImpl; - - expect(fragment.getDisplayString(), 'String get a'); + expect(element.displayString(), 'String get a'); } test_property_setter() async { @@ -136,9 +123,7 @@ set a(String value) {} '''); var element = findElement2.topSet('a'); - var fragment = element.firstFragment as SetterFragmentImpl; - - expect(fragment.getDisplayString(), 'set a(String value)'); + expect(element.displayString(), 'set a(String value)'); } test_shortMethod() async { @@ -149,12 +134,10 @@ abstract class A { '''); var element = findElement2.method('m'); - var fragment = element.firstFragment as MethodFragmentImpl; - - var singleLine = fragment.getDisplayString(); + var singleLine = element.displayString(); expect(singleLine, 'String? m(String? a, [String? b])'); - var multiLine = fragment.getDisplayString(multiline: true); + var multiLine = element.displayString(multiline: true); // The signature is short enough that it remains on one line even for // multiline: true. expect(multiLine, 'String? m(String? a, [String? b])');