From 4be4ec7d364984b658d99cc308e00d57d5660df3 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Thu, 9 Jan 2025 13:37:59 -0800 Subject: [PATCH] Elements. Migrate AnalyzerConverter. Change-Id: Ia3da05853e97e64899358bdc787c0226ba036bc6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403904 Reviewed-by: Brian Wilkerson Commit-Queue: Konstantin Shcheglov --- pkg/analyzer_plugin/CHANGELOG.md | 1 + .../analyzer_use_new_elements.txt | 2 - .../completion/suggestion_builder.dart | 2 +- .../lib/utilities/analyzer_converter.dart | 361 +++--------------- .../utilities/analyzer_converter_test.dart | 42 +- 5 files changed, 86 insertions(+), 322 deletions(-) diff --git a/pkg/analyzer_plugin/CHANGELOG.md b/pkg/analyzer_plugin/CHANGELOG.md index dbba541ca60..d243c8afca5 100644 --- a/pkg/analyzer_plugin/CHANGELOG.md +++ b/pkg/analyzer_plugin/CHANGELOG.md @@ -1,6 +1,7 @@ ## 0.13.0-dev - Remove `elementName()` from `RangeFactory`. Use `fragmentName()` instead. - Breaking changes to `DartFileEditBuilder` and `DartEditBuilder`. +- Breaking changes to `AnalyzerConverter`. ## 0.12.0 - Breaking changes to `DartFileEditBuilder`: `convertFunctionFromSyncToAsync` diff --git a/pkg/analyzer_plugin/analyzer_use_new_elements.txt b/pkg/analyzer_plugin/analyzer_use_new_elements.txt index 3acbf58d2e0..3aa29d7104d 100644 --- a/pkg/analyzer_plugin/analyzer_use_new_elements.txt +++ b/pkg/analyzer_plugin/analyzer_use_new_elements.txt @@ -1,4 +1,2 @@ lib/src/utilities/completion/optype.dart lib/src/utilities/navigation/navigation_dart.dart -lib/utilities/analyzer_converter.dart -test/utilities/analyzer_converter_test.dart diff --git a/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart b/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart index a28b2b02d52..e0c6606c241 100644 --- a/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart +++ b/pkg/analyzer_plugin/lib/src/utilities/completion/suggestion_builder.dart @@ -99,7 +99,7 @@ class SuggestionBuilderImpl implements SuggestionBuilder { suggestion.docComplete = doc; suggestion.docSummary = getDartDocSummary(doc); - suggestion.element = converter.convertElement2(element); + suggestion.element = converter.convertElement(element); var enclosingElement = element.enclosingElement2; if (enclosingElement is ClassElement2) { suggestion.declaringType = enclosingElement.displayName; diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart index cd0bf4fc690..8f7b4179967 100644 --- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart +++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart @@ -2,15 +2,13 @@ // 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/dart/element/element.dart' as analyzer; -import 'package:analyzer/dart/element/element2.dart' as engine; +import 'package:analyzer/dart/element/element2.dart' as analyzer; import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/diagnostic/diagnostic.dart' as analyzer; import 'package:analyzer/error/error.dart' as analyzer; import 'package:analyzer/source/error_processor.dart' as analyzer; import 'package:analyzer/source/line_info.dart' as analyzer; import 'package:analyzer/source/source_range.dart' as analyzer; -import 'package:analyzer/source/source_range.dart' as engine; import 'package:analyzer/src/generated/engine.dart' as analyzer; import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin; import 'package:analyzer_plugin/protocol/protocol_common.dart'; @@ -125,49 +123,26 @@ class AnalyzerConverter { endLine: endLine, endColumn: endColumn)); } - /// Convert the given [element] from the 'analyzer' package to an element - /// defined by the plugin API. - plugin.Element convertElement(analyzer.Element element) { - var kind = _convertElementToElementKind(element); - return plugin.Element( - kind, - element.displayName, - plugin.Element.makeFlags( - isPrivate: element.isPrivate, - isDeprecated: element.hasDeprecated, - isAbstract: _isAbstract(element), - isConst: _isConst(element), - isFinal: _isFinal(element), - isStatic: _isStatic(element), - ), - location: locationFromElement(element), - typeParameters: _getTypeParametersString(element), - aliasedType: _getAliasedTypeString(element), - parameters: _getParametersString(element), - returnType: _getReturnTypeString(element), - ); - } - - Element convertElement2(engine.Element2 element) { - var kind = convertElementToElementKind2(element); - var name = getElementDisplayName2(element); - var elementTypeParameters = _getTypeParametersString2(element); - var aliasedType = _getAliasedTypeString2(element); - var elementParameters = _getParametersString2(element); - var elementReturnType = _getReturnTypeString2(element); + Element convertElement(analyzer.Element2 element) { + var kind = convertElementToElementKind(element); + var name = getElementDisplayName(element); + var elementTypeParameters = _getTypeParametersString(element); + var aliasedType = _getAliasedTypeString(element); + var elementParameters = _getParametersString(element); + var elementReturnType = _getReturnTypeString(element); return Element( kind, name, Element.makeFlags( isPrivate: element.isPrivate, - isDeprecated: (element is engine.Annotatable) && - (element as engine.Annotatable).metadata2.hasDeprecated, - isAbstract: _isAbstract2(element), - isConst: _isConst2(element), - isFinal: _isFinal2(element), - isStatic: _isStatic2(element), + isDeprecated: (element is analyzer.Annotatable) && + (element as analyzer.Annotatable).metadata2.hasDeprecated, + isAbstract: _isAbstract(element), + isConst: _isConst(element), + isFinal: _isFinal(element), + isStatic: _isStatic(element), ), - location: newLocation_fromElement2(element), + location: newLocation_fromElement(element), typeParameters: elementTypeParameters, aliasedType: aliasedType, parameters: elementParameters, @@ -185,14 +160,14 @@ class AnalyzerConverter { plugin.ElementKind convertElementKind(analyzer.ElementKind kind) => kind.toPluginElementKind; - /// Return an [ElementKind] corresponding to the given [engine.Element2]. - ElementKind convertElementToElementKind2(engine.Element2 element) { - if (element is engine.EnumElement2) { + /// Return an [ElementKind] corresponding to the given [analyzer.Element2]. + ElementKind convertElementToElementKind(analyzer.Element2 element) { + if (element is analyzer.EnumElement2) { return ElementKind.ENUM; - } else if (element is engine.MixinElement2) { + } else if (element is analyzer.MixinElement2) { return ElementKind.MIXIN; } - if (element is engine.FieldElement2 && element.isEnumConstant) { + if (element is analyzer.FieldElement2 && element.isEnumConstant) { return ElementKind.ENUM_CONSTANT; } return convertElementKind(element.kind); @@ -209,132 +184,50 @@ class AnalyzerConverter { plugin.AnalysisErrorType convertErrorType(analyzer.ErrorType type) => plugin.AnalysisErrorType.values.byName(type.name); - String getElementDisplayName2(engine.Element2 element) { - if (element is engine.LibraryFragment) { - return path.basename((element as engine.LibraryFragment).source.fullName); + String getElementDisplayName(analyzer.Element2 element) { + if (element is analyzer.LibraryFragment) { + return path + .basename((element as analyzer.LibraryFragment).source.fullName); } else { return element.displayName; } } - /// Create a location based on an the given [element]. - // TODO(srawlins): Deprecate this. - plugin.Location? locationFromElement(analyzer.Element? element, - {int? offset, int? length}) => - element.toLocation(offset: offset, length: length); - - /// Create a Location based on an [engine.Element2]. - Location? newLocation_fromElement2(engine.Element2? element) { + /// Create a Location based on an [analyzer.Element2]. + Location? newLocation_fromElement(analyzer.Element2? element) { if (element == null) { return null; } - if (element is engine.FormalParameterElement && + if (element is analyzer.FormalParameterElement && element.enclosingElement2 == null) { return null; } var fragment = element.firstFragment; - var offset = fragment.nameOffset2 ?? 0; + var offset = fragment.nameOffset2 ?? -1; var length = fragment.name2?.length ?? 0; - var range = engine.SourceRange(offset, length); - return _locationForArgs2(fragment, range); + var range = analyzer.SourceRange(offset, length); + return _locationForArgs(fragment, range); } - /// Convert the element kind of the [element] from the 'analyzer' package to - /// an element kind defined by the plugin API. - plugin.ElementKind _convertElementToElementKind(analyzer.Element element) { - if (element is analyzer.EnumElement) { - return plugin.ElementKind.ENUM; - } else if (element is analyzer.FieldElement && element.isEnumConstant - // MyEnum.values and MyEnum.one.index return isEnumConstant = true - // so these additional checks are necessary. - // TODO(danrubel): MyEnum.values is constant, but is a list - // so should it return isEnumConstant = true? - // MyEnum.one.index is final but *not* constant - // so should it return isEnumConstant = true? - // Or should we return ElementKind.ENUM_CONSTANT here - // in either or both of these cases? - ) { - var type = element.type; - if (type is InterfaceType && type.element == element.enclosingElement3) { - return plugin.ElementKind.ENUM_CONSTANT; - } - } - return convertElementKind(element.kind); - } - - String? _getAliasedTypeString(analyzer.Element element) { - if (element is analyzer.TypeAliasElement) { + String? _getAliasedTypeString(analyzer.Element2 element) { + if (element is analyzer.TypeAliasElement2) { var aliasedType = element.aliasedType; return aliasedType.getDisplayString(); } return null; } - String? _getAliasedTypeString2(engine.Element2 element) { - if (element is engine.TypeAliasElement2) { - var aliasedType = element.aliasedType; - return aliasedType.getDisplayString(); - } - return null; - } - - /// Return a textual representation of the parameters of the given [element], - /// or `null` if the element does not have any parameters. - String? _getParametersString(analyzer.Element element) { + String? _getParametersString(analyzer.Element2 element) { // TODO(scheglov): expose the corresponding feature from ExecutableElement - List parameters; - if (element is analyzer.ExecutableElement) { + List parameters; + if (element is analyzer.ExecutableElement2) { // valid getters don't have parameters if (element.kind == analyzer.ElementKind.GETTER && - element.parameters.isEmpty) { - return null; - } - parameters = element.parameters; - } else if (element is analyzer.TypeAliasElement) { - var aliasedElement = element.aliasedElement; - if (aliasedElement is analyzer.GenericFunctionTypeElement) { - parameters = aliasedElement.parameters; - } else { - return null; - } - } else { - return null; - } - var buffer = StringBuffer(); - var closeOptionalString = ''; - buffer.write('('); - for (var i = 0; i < parameters.length; i++) { - var parameter = parameters[i]; - if (i > 0) { - buffer.write(', '); - } - if (closeOptionalString.isEmpty) { - if (parameter.isNamed) { - buffer.write('{'); - closeOptionalString = '}'; - } else if (parameter.isOptionalPositional) { - buffer.write('['); - closeOptionalString = ']'; - } - } - parameter.appendToWithoutDelimiters(buffer); - } - buffer.write(closeOptionalString); - buffer.write(')'); - return buffer.toString(); - } - - String? _getParametersString2(engine.Element2 element) { - // TODO(scheglov): expose the corresponding feature from ExecutableElement - List parameters; - if (element is engine.ExecutableElement2) { - // valid getters don't have parameters - if (element.kind == engine.ElementKind.GETTER && element.formalParameters.isEmpty) { return null; } parameters = element.formalParameters.toList(); - } else if (element is engine.TypeAliasElement2) { + } else if (element is analyzer.TypeAliasElement2) { var aliasedType = element.aliasedType; if (aliasedType is FunctionType) { parameters = aliasedType.formalParameters.toList(); @@ -373,37 +266,17 @@ class AnalyzerConverter { return '($sb)'; } - /// Return a textual representation of the return type of the given [element], - /// or `null` if the element does not have a return type. - String? _getReturnTypeString(analyzer.Element element) { - if (element is analyzer.ExecutableElement) { + String? _getReturnTypeString(analyzer.Element2 element) { + if (element is analyzer.ExecutableElement2) { if (element.kind == analyzer.ElementKind.SETTER) { return null; - } - return element.returnType.getDisplayString(); - } else if (element is analyzer.VariableElement) { - return element.type.getDisplayString(); - } else if (element is analyzer.TypeAliasElement) { - var aliasedType = element.aliasedType; - if (aliasedType is FunctionType) { - var returnType = aliasedType.returnType; - return returnType.getDisplayString(); - } - } - return null; - } - - String? _getReturnTypeString2(engine.Element2 element) { - if (element is engine.ExecutableElement2) { - if (element.kind == engine.ElementKind.SETTER) { - return null; } else { return element.returnType.getDisplayString(); } - } else if (element is engine.VariableElement2) { + } else if (element is analyzer.VariableElement2) { var type = element.type; return type.getDisplayString(); - } else if (element is engine.TypeAliasElement2) { + } else if (element is analyzer.TypeAliasElement2) { var aliasedType = element.aliasedType; if (aliasedType is FunctionType) { var returnType = aliasedType.returnType; @@ -413,24 +286,11 @@ class AnalyzerConverter { return null; } - /// Return a textual representation of the type parameters of the given - /// [element], or `null` if the element does not have type parameters. - String? _getTypeParametersString(analyzer.Element element) { - if (element is analyzer.TypeParameterizedElement) { - var typeParameters = element.typeParameters; - if (typeParameters.isEmpty) { - return null; - } - return '<${typeParameters.join(', ')}>'; - } - return null; - } - - String? _getTypeParametersString2(engine.Element2 element) { - List? typeParameters; - if (element is engine.InterfaceElement2) { + String? _getTypeParametersString(analyzer.Element2 element) { + List? typeParameters; + if (element is analyzer.InterfaceElement2) { typeParameters = element.typeParameters2; - } else if (element is engine.TypeAliasElement2) { + } else if (element is analyzer.TypeAliasElement2) { typeParameters = element.typeParameters2; } if (typeParameters == null || typeParameters.isEmpty) { @@ -439,90 +299,50 @@ class AnalyzerConverter { return '<${typeParameters.join(', ')}>'; } - bool _isAbstract(analyzer.Element element) { - // TODO(scheglov): add isAbstract to Element API - if (element is analyzer.ClassElement) { - return element.isAbstract; - } else if (element is analyzer.MethodElement) { - return element.isAbstract; - } else if (element is analyzer.PropertyAccessorElement) { + bool _isAbstract(analyzer.Element2 element) { + if (element is analyzer.ClassElement2) { return element.isAbstract; } - return false; - } - - bool _isAbstract2(engine.Element2 element) { - if (element is engine.ClassElement2) { + if (element is analyzer.MethodElement2) { return element.isAbstract; } - if (element is engine.MethodElement2) { - return element.isAbstract; - } - if (element is engine.MixinElement2) { + if (element is analyzer.MixinElement2) { return true; } return false; } - bool _isConst(analyzer.Element element) { - // TODO(scheglov): add isConst to Element API - if (element is analyzer.ConstructorElement) { + bool _isConst(analyzer.Element2 element) { + if (element is analyzer.ConstructorElement2) { return element.isConst; - } else if (element is analyzer.VariableElement) { + } + if (element is analyzer.VariableElement2) { return element.isConst; } return false; } - bool _isConst2(engine.Element2 element) { - if (element is engine.ConstructorElement2) { - return element.isConst; - } - if (element is engine.VariableElement2) { - return element.isConst; - } - return false; - } - - bool _isFinal(analyzer.Element element) { - // TODO(scheglov): add isFinal to Element API - if (element is analyzer.VariableElement) { + bool _isFinal(analyzer.Element2 element) { + if (element is analyzer.VariableElement2) { return element.isFinal; } return false; } - bool _isFinal2(engine.Element2 element) { - if (element is engine.VariableElement2) { - return element.isFinal; - } - return false; - } - - bool _isStatic(analyzer.Element element) { - // TODO(scheglov): add isStatic to Element API - if (element is analyzer.ExecutableElement) { - return element.isStatic; - } else if (element is analyzer.PropertyInducingElement) { + bool _isStatic(analyzer.Element2 element) { + if (element is analyzer.ExecutableElement2) { return element.isStatic; } - return false; - } - - bool _isStatic2(engine.Element2 element) { - if (element is engine.ExecutableElement2) { - return element.isStatic; - } - if (element is engine.PropertyInducingElement2) { + if (element is analyzer.PropertyInducingElement2) { return element.isStatic; } return false; } /// Creates a new [Location]. - Location? _locationForArgs2( - engine.Fragment fragment, - engine.SourceRange range, + Location? _locationForArgs( + analyzer.Fragment fragment, + analyzer.SourceRange range, ) { var libraryFragment = fragment.libraryFragment; if (libraryFragment == null) { @@ -551,8 +371,8 @@ class AnalyzerConverter { /// Sort required named parameters before optional ones. int _preferRequiredParams2( - engine.FormalParameterElement e1, - engine.FormalParameterElement e2, + analyzer.FormalParameterElement e1, + analyzer.FormalParameterElement e2, ) { var rank1 = (e1.isRequiredNamed || e1.metadata2.hasRequired) ? 0 @@ -568,63 +388,6 @@ class AnalyzerConverter { } } -// TODO(srawlins): Move this to a better location. -extension ElementExtensions on analyzer.Element? { - /// Return the compilation unit containing the given [element]. - analyzer.CompilationUnitElement? get _unitElement { - var currentElement = this; - for (; - currentElement != null; - currentElement = currentElement.enclosingElement3) { - if (currentElement is analyzer.CompilationUnitElement) { - return currentElement; - } else if (currentElement is analyzer.LibraryElement) { - return currentElement.definingCompilationUnit; - } - } - return null; - } - - /// Create a location based on this element. - plugin.Location? toLocation({int? offset, int? length}) { - var self = this; - if (self == null || self.source == null) { - return null; - } - offset ??= self.nameOffset; - length ??= self.nameLength; - if (self is analyzer.CompilationUnitElement || - (self is analyzer.LibraryElement && offset < 0)) { - offset = 0; - length = 0; - } - return _locationForArgs( - self._unitElement, analyzer.SourceRange(offset, length)); - } - - /// Create and return a location within the given [unitElement] at the given - /// [range]. - plugin.Location? _locationForArgs( - analyzer.CompilationUnitElement? unitElement, - analyzer.SourceRange range) { - if (unitElement == null) { - return null; - } - - var lineInfo = unitElement.lineInfo; - var offsetLocation = lineInfo.getLocation(range.offset); - var endLocation = lineInfo.getLocation(range.offset + range.length); - var startLine = offsetLocation.lineNumber; - var startColumn = offsetLocation.columnNumber; - var endLine = endLocation.lineNumber; - var endColumn = endLocation.columnNumber; - - return plugin.Location(unitElement.source.fullName, range.offset, - range.length, startLine, startColumn, - endLine: endLine, endColumn: endColumn); - } -} - // TODO(srawlins): Move this to a better location. extension ElementKindExtensions on analyzer.ElementKind { static const _kindMap = { diff --git a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart index 5ac1d2e769a..eda8aec32f0 100644 --- a/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart +++ b/pkg/analyzer_plugin/test/utilities/analyzer_converter_test.dart @@ -55,7 +55,7 @@ class AnalyzerConverterTest extends AbstractSingleUnitTest { var contextMessages = []; await resolveTestCode(''); - var testSource = result.unit.declaredElement!.source; + var testSource = result.unit.declaredFragment!.source; if (contextMessage != null) { contextMessages.add( @@ -213,7 +213,7 @@ class AnalyzerConverterTest extends AbstractSingleUnitTest { abstract class _A {} class B {}'''); { - var engineElement = findElement.class_('_A'); + var engineElement = findElement2.class_('_A'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.CLASS); @@ -235,7 +235,7 @@ class B {}'''); plugin.Element.FLAG_PRIVATE); } { - var engineElement = findElement.class_('B'); + var engineElement = findElement2.class_('B'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.CLASS); @@ -250,7 +250,7 @@ class B {}'''); class A { const A.myConstructor(int a, [String? b]); }'''); - var engineElement = findElement.constructor('myConstructor'); + var engineElement = findElement2.constructor('myConstructor'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.CONSTRUCTOR); @@ -270,7 +270,7 @@ class A { } void test_convertElement_dynamic() { - var engineElement = analyzer.DynamicElementImpl.instance; + var engineElement = analyzer.DynamicElementImpl2.instance; // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.UNKNOWN); @@ -287,8 +287,8 @@ class A { enum _E1 { one, two } enum E2 { three, four }'''); { - var engineElement = findElement.enum_('_E1'); - expect(engineElement.hasDeprecated, isTrue); + var engineElement = findElement2.enum_('_E1'); + expect(engineElement.metadata2.hasDeprecated, isTrue); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.ENUM); @@ -305,11 +305,13 @@ enum E2 { three, four }'''); expect(element.parameters, isNull); expect( element.flags, - (engineElement.hasDeprecated ? plugin.Element.FLAG_DEPRECATED : 0) | + (engineElement.metadata2.hasDeprecated + ? plugin.Element.FLAG_DEPRECATED + : 0) | plugin.Element.FLAG_PRIVATE); } { - var engineElement = findElement.enum_('E2'); + var engineElement = findElement2.enum_('E2'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.ENUM); @@ -325,7 +327,7 @@ enum E2 { three, four }'''); enum _E1 { one, two } enum E2 { three, four }'''); { - var engineElement = findElement.field('one'); + var engineElement = findElement2.field('one'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.ENUM_CONSTANT); @@ -349,7 +351,7 @@ enum E2 { three, four }'''); plugin.Element.FLAG_CONST | plugin.Element.FLAG_STATIC); } { - var engineElement = findElement.field('three'); + var engineElement = findElement2.field('three'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.ENUM_CONSTANT); @@ -368,7 +370,7 @@ enum E2 { three, four }'''); plugin.Element.FLAG_CONST | plugin.Element.FLAG_STATIC); } { - var engineElement = findElement.field('values', of: 'E2'); + var engineElement = findElement2.field('values', of: 'E2'); // create notification Element var element = converter.convertElement(engineElement); @@ -394,7 +396,7 @@ enum E2 { three, four }'''); class A { static const myField = 42; }'''); - var engineElement = findElement.field('myField'); + var engineElement = findElement2.field('myField'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.FIELD); @@ -417,7 +419,7 @@ class A { await resolveTestCode(''' typedef int F(String x); '''); - var engineElement = findElement.typeAlias('F'); + var engineElement = findElement2.typeAlias('F'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.TYPE_ALIAS); @@ -441,7 +443,7 @@ typedef int F(String x); class A { int get myGetter => 42; }'''); - var engineElement = findElement.getter('myGetter'); + var engineElement = findElement2.getter('myGetter'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.GETTER); @@ -467,7 +469,7 @@ myLabel: break myLabel; } }'''); - var engineElement = findElement.label('myLabel'); + var engineElement = findElement2.label('myLabel'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.LABEL); @@ -492,7 +494,7 @@ class A { return []; } }'''); - var engineElement = findElement.method('myMethod'); + var engineElement = findElement2.method('myMethod'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.METHOD); @@ -515,7 +517,7 @@ class A { class A { set mySetter(String x) {} }'''); - var engineElement = findElement.setter('mySetter'); + var engineElement = findElement2.setter('mySetter'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.SETTER); @@ -537,7 +539,7 @@ class A { await resolveTestCode(''' typedef F = int Function(String x); '''); - var engineElement = findElement.typeAlias('F'); + var engineElement = findElement2.typeAlias('F'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.TYPE_ALIAS); @@ -560,7 +562,7 @@ typedef F = int Function(String x); await resolveTestCode(''' typedef A = Map; '''); - var engineElement = findElement.typeAlias('A'); + var engineElement = findElement2.typeAlias('A'); // create notification Element var element = converter.convertElement(engineElement); expect(element.kind, plugin.ElementKind.TYPE_ALIAS);