Elements. Migrate src/dart/element/scope.dart
Change-Id: Id5f07a688138f463e307cb145d56cb286ba85cac
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407220
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/dart/element/element2.dart b/pkg/analyzer/lib/dart/element/element2.dart
index 8220877..a85edba 100644
--- a/pkg/analyzer/lib/dart/element/element2.dart
+++ b/pkg/analyzer/lib/dart/element/element2.dart
@@ -2561,6 +2561,10 @@
/// Clients may not extend, implement or mix-in this class.
abstract class TopLevelFunctionElement
implements ExecutableElement2, HasSinceSdkVersion {
+ /// The name of the synthetic function defined for libraries that are
+ /// deferred.
+ static final String LOAD_LIBRARY_NAME = "loadLibrary";
+
@override
TopLevelFunctionElement get baseElement;
diff --git a/pkg/analyzer/lib/dart/element/scope.dart b/pkg/analyzer/lib/dart/element/scope.dart
index 61d0037..bc8d49b 100644
--- a/pkg/analyzer/lib/dart/element/scope.dart
+++ b/pkg/analyzer/lib/dart/element/scope.dart
@@ -6,6 +6,7 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
+import 'package:analyzer/src/utilities/extensions/element.dart';
/// Scopes are used to resolve names to elements.
///
@@ -23,8 +24,10 @@
///
/// Clients may not extend, implement or mix-in this class.
abstract class ScopeLookupResult {
- Element? get getter;
+ Element? get getter => getter2?.asElement;
Element2? get getter2;
- Element? get setter;
+
+ Element? get setter => setter2?.asElement;
+
Element2? get setter2;
}
diff --git a/pkg/analyzer/lib/src/dart/ast/extensions.dart b/pkg/analyzer/lib/src/dart/ast/extensions.dart
index b40317e..aaff107 100644
--- a/pkg/analyzer/lib/src/dart/ast/extensions.dart
+++ b/pkg/analyzer/lib/src/dart/ast/extensions.dart
@@ -279,14 +279,14 @@
name2: self.identifier.token,
typeArguments: typeArguments,
question: question,
- )..element2 = self.identifier.staticElement.asElement2;
+ )..element2 = self.identifier.staticElement?.asElement2;
} else if (self is SimpleIdentifierImpl) {
return NamedTypeImpl(
importPrefix: null,
name2: self.token,
typeArguments: typeArguments,
question: question,
- )..element2 = self.staticElement.asElement2;
+ )..element2 = self.staticElement?.asElement2;
} else {
throw UnimplementedError('(${self.runtimeType}) $self');
}
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 959c4d9..69c0e25 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -683,6 +683,10 @@
@override
bool get isDartCoreObject => firstFragment.isDartCoreObject;
+ bool get isDartCoreRecord {
+ return name3 == 'Record' && library2.isDartCore;
+ }
+
bool get isEnumLike {
// Must be a concrete class.
if (isAbstract) {
@@ -844,14 +848,12 @@
@override
List<ExtensionElement> get accessibleExtensions {
- return scope.accessibleExtensions;
+ return scope.accessibleExtensions.map((e) => e.asElement).toList();
}
@override
List<ExtensionElement2> get accessibleExtensions2 {
- return scope.accessibleExtensions
- .map((element) => element.augmented as ExtensionElement2)
- .toList();
+ return scope.accessibleExtensions;
}
@override
@@ -9851,6 +9853,10 @@
return asElement.scope;
}
+ set scope(PrefixScope value) {
+ asElement.scope = value;
+ }
+
@override
T? accept2<T>(ElementVisitor2<T> visitor) {
return visitor.visitPrefixElement(this);
diff --git a/pkg/analyzer/lib/src/dart/element/scope.dart b/pkg/analyzer/lib/src/dart/element/scope.dart
index b83db1d..ca9f6f2 100644
--- a/pkg/analyzer/lib/src/dart/element/scope.dart
+++ b/pkg/analyzer/lib/src/dart/element/scope.dart
@@ -2,29 +2,26 @@
// 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.
-// ignore_for_file: analyzer_use_new_elements
-
import 'package:_fe_analyzer_shared/src/scanner/string_canonicalizer.dart';
import 'package:analyzer/dart/analysis/features.dart';
-import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/scope.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/extensions.dart';
import 'package:analyzer/src/summary2/combinator.dart';
import 'package:analyzer/src/utilities/extensions/collection.dart';
-import 'package:analyzer/src/utilities/extensions/element.dart';
/// The scope for the initializers in a constructor.
class ConstructorInitializerScope extends EnclosedScope {
- ConstructorInitializerScope(super.parent, ConstructorElement element) {
- for (var parameter in element.parameters) {
+ ConstructorInitializerScope(super.parent, ConstructorElement2 element) {
+ var hasWildcardVariables =
+ element.library2.featureSet.isEnabled(Feature.wildcard_variables);
+ for (var formalParameter in element.formalParameters) {
// Skip wildcards.
- if (parameter.name == '_' &&
- element.library.featureSet.isEnabled(Feature.wildcard_variables)) {
+ if (formalParameter.name3 == '_' && hasWildcardVariables) {
continue;
}
- _addGetter(parameter);
+ _addGetter(formalParameter);
}
}
}
@@ -41,15 +38,15 @@
Scope innerScope;
DocumentationCommentScope(
- this.innerScope, List<LibraryElement> docImportLibraries) {
+ this.innerScope, List<LibraryElement2> docImportLibraries) {
for (var importedLibrary in docImportLibraries) {
if (importedLibrary is LibraryElementImpl) {
// TODO(kallentu): Handle combinators.
for (var exportedReference in importedLibrary.exportedReferences) {
var reference = exportedReference.reference;
var element = importedLibrary.session.elementFactory
- .elementOfReference(reference)!;
- if (element is PropertyAccessorElement && element.isSetter) {
+ .elementOfReference2(reference)!;
+ if (element is SetterElement) {
_addSetter(element);
} else {
_addGetter(element);
@@ -62,10 +59,10 @@
@override
ScopeLookupResult lookup(String id) {
var result = innerScope.lookup(id);
- if (result.getter != null || result.setter != null) return result;
+ if (result.getter2 != null || result.setter2 != null) return result;
return ScopeLookupResultImpl(
- getter: _getters[id],
- setter: _setters[id],
+ getter2: _getters[id],
+ setter2: _setters[id],
);
}
}
@@ -84,8 +81,8 @@
var setter = _setters[id];
if (getter != null || setter != null) {
return ScopeLookupResultImpl(
- getter: getter,
- setter: setter,
+ getter2: getter,
+ setter2: setter,
);
}
@@ -97,21 +94,22 @@
class ExtensionScope extends EnclosedScope {
ExtensionScope(
super.parent,
- ExtensionElement element,
+ ExtensionElement2 element,
) {
- element.accessors.forEach(_addPropertyAccessor);
- element.methods.forEach(_addGetter);
+ element.getters2.forEach(_addGetter);
+ element.setters2.forEach(_addSetter);
+ element.methods2.forEach(_addGetter);
}
}
class FormalParameterScope extends EnclosedScope {
FormalParameterScope(
super.parent,
- List<ParameterElement> elements,
+ List<FormalParameterElement> elements,
) {
for (var parameter in elements) {
- if (parameter is! FieldFormalParameterElement &&
- parameter is! SuperFormalParameterElement) {
+ if (parameter is! FieldFormalParameterElement2 &&
+ parameter is! SuperFormalParameterElement2) {
if (!parameter.isWildcardVariable) {
_addGetter(parameter);
}
@@ -123,36 +121,26 @@
/// Tracking information for all import in [CompilationUnitElementImpl].
class ImportsTracking {
/// Tracking information for each import prefix.
- final Map<PrefixElementImpl?, ImportsTrackingOfPrefix> map;
+ final Map<PrefixElementImpl2?, ImportsTrackingOfPrefix> map;
ImportsTracking({
required this.map,
});
/// The elements that are used from [import].
- Set<Element> elementsOf(LibraryImportElementImpl import) {
- return trackerOf(import).importToUsedElements[import] ?? {};
+ Set<Element2> elementsOf(LibraryImportElementImpl import) {
+ return trackerOf(import)?.importToUsedElements[import] ?? {};
}
- /// The elements that are used from [import].
- Set<Element2> elementsOf2(LibraryImportElementImpl import) {
- return trackerOf(import)
- .importToUsedElements[import]
- ?.map((e) => e.asElement2)
- .nonNulls
- .toSet() ??
- {};
- }
-
- void notifyExtensionUsed(ExtensionElement element) {
+ void notifyExtensionUsed(ExtensionElement2 element) {
for (var tracking in map.values) {
tracking.notifyExtensionUsed(element);
}
}
- ImportsTrackingOfPrefix trackerOf(LibraryImportElementImpl import) {
- var prefix = import.prefix?.element;
- return map[prefix]!;
+ ImportsTrackingOfPrefix? trackerOf(LibraryImportElementImpl import) {
+ var prefix = import.prefix2?.element;
+ return map[prefix];
}
}
@@ -161,16 +149,16 @@
/// Key: an element.
/// Value: the imports that provide the element.
- final Map<Element, List<LibraryImportElementImpl>> _elementImports = {};
+ final Map<Element2, List<LibraryImportElementImpl>> _elementImports = {};
/// Key: an import.
/// Value: used elements imported from the import.
- final Map<LibraryImportElementImpl, Set<Element>> importToUsedElements = {};
+ final Map<LibraryImportElementImpl, Set<Element2>> importToUsedElements = {};
/// Key: an import.
/// Value: used elements imported from the import.
/// Excludes elements from deprecated exports.
- final Map<LibraryImportElementImpl, Set<Element>> importToAccessedElements2 =
+ final Map<LibraryImportElementImpl, Set<Element2>> importToAccessedElements2 =
{};
/// Usually it is an error to use an import prefix without `.identifier`
@@ -187,13 +175,8 @@
_buildElementToImportsMap();
}
- Map<LibraryImportElementImpl, Set<Element2>> get importToUsedElements2 {
- return importToUsedElements.mapValue(
- (elements) => elements.map((e) => e.asElement2).nonNulls.toSet());
- }
-
/// The elements that are used from [import].
- Set<Element> elementsOf(LibraryImportElementImpl import) {
+ Set<Element2> elementsOf(LibraryImportElementImpl import) {
return importToUsedElements[import] ?? {};
}
@@ -202,7 +185,7 @@
Set<Element2> elementsOf2(LibraryImportElementImpl import) {
var result = importToAccessedElements2[import];
if (result != null) {
- return result.map((e) => e.asElement2).nonNulls.toSet();
+ return result;
}
var accessedElements = elementsOf(import);
@@ -213,7 +196,7 @@
for (var exportedReference in importedLibrary.exportedReferences) {
var reference = exportedReference.reference;
- var element = elementFactory.elementOfReference(reference)!;
+ var element = elementFactory.elementOfReference2(reference)!;
// Check only accessed elements.
if (!accessedElements.contains(element)) {
@@ -231,11 +214,10 @@
}
result ??= accessedElements;
- importToAccessedElements2[import] = result;
- return result.map((e) => e.asElement2).nonNulls.toSet();
+ return importToAccessedElements2[import] = result;
}
- void lookupResult(Element? element) {
+ void lookupResult(Element2? element) {
if (!active) {
return;
}
@@ -244,7 +226,7 @@
return;
}
- if (element is MultiplyDefinedElement) {
+ if (element is MultiplyDefinedElement2) {
return;
}
@@ -255,7 +237,7 @@
}
}
- void notifyExtensionUsed(ExtensionElement element) {
+ void notifyExtensionUsed(ExtensionElement2 element) {
var imports = _elementImports[element];
if (imports != null) {
for (var import in imports) {
@@ -282,7 +264,7 @@
for (var exportedReference in importedLibrary.exportedReferences) {
var reference = exportedReference.reference;
if (combinators.allows(reference.name)) {
- var element = elementFactory.elementOfReference(reference)!;
+ var element = elementFactory.elementOfReference2(reference)!;
(_elementImports[element] ??= []).add(import);
}
}
@@ -292,65 +274,48 @@
/// The scope defined by an instance element.
class InstanceScope extends EnclosedScope {
- InstanceScope(super.parent, InstanceElement element) {
- var augmented = element.augmented;
- augmented.accessors.forEach(_addPropertyAccessor);
- augmented.methods.forEach(_addGetter);
+ InstanceScope(super.parent, InstanceElement2 element) {
+ element.getters2.forEach(_addGetter);
+ element.setters2.forEach(_addSetter);
+ element.methods2.forEach(_addGetter);
}
}
/// The top-level declarations of the library.
class LibraryDeclarations with _GettersAndSetters {
- List<ExtensionElement> extensions = [];
+ List<ExtensionElement2> extensions = [];
LibraryDeclarations(LibraryElementImpl library) {
- library.units.forEach(_addLibraryFragment);
+ library.getters.forEach(_addGetter);
+ library.enums.forEach(_addGetter);
+ library.extensions.forEach(_addExtension);
+ library.extensionTypes.forEach(_addGetter);
+ library.setters.forEach(_addSetter);
+ library.topLevelFunctions.forEach(_addGetter);
+ library.typeAliases.forEach(_addGetter);
+ library.mixins.forEach(_addGetter);
+ library.classes.forEach(_addGetter);
// Add implicit 'dart:core' declarations.
if ('${library.source.uri}' == 'dart:core') {
- _addGetter(DynamicElementImpl.instance);
- _addGetter(NeverElementImpl.instance);
+ _addGetter(DynamicElementImpl2.instance);
+ _addGetter(NeverElementImpl2.instance);
}
extensions = extensions.toFixedList();
}
/// Returns a getter or setter with the [name].
- Element? withName(String name) {
+ Element2? withName(String name) {
return _getters[name] ?? _setters[name];
}
- void _addExtension(ExtensionElement element) {
- if (element.isAugmentation) {
- return;
- }
-
+ void _addExtension(ExtensionElement2 element) {
_addGetter(element);
if (!extensions.contains(element)) {
extensions.add(element);
}
}
-
- void _addLibraryFragment(CompilationUnitElement fragment) {
- for (var element in fragment.accessors) {
- if (element.augmentation == null) {
- _addPropertyAccessor(element);
- }
- }
-
- for (var element in fragment.functions) {
- if (element.augmentation == null) {
- _addGetter(element);
- }
- }
-
- fragment.enums.forEach(_addGetter);
- fragment.extensions.forEach(_addExtension);
- fragment.extensionTypes.forEach(_addGetter);
- fragment.typeAliases.forEach(_addGetter);
- fragment.mixins.forEach(_addGetter);
- fragment.classes.forEach(_addGetter);
- }
}
class LibraryFragmentScope implements Scope {
@@ -358,10 +323,10 @@
final CompilationUnitElementImpl fragment;
final PrefixScope noPrefixScope;
- final Map<String, PrefixElementImpl> _prefixElements = {};
+ final Map<String, PrefixElementImpl2> _prefixElements = {};
/// The cached result for [accessibleExtensions].
- List<ExtensionElement>? _extensions;
+ List<ExtensionElement2>? _extensions;
/// This field is set temporarily while resolving all files of a library.
/// So, we can track which elements were actually returned, and which imports
@@ -390,8 +355,10 @@
required this.fragment,
required this.noPrefixScope,
}) {
- for (var prefix in fragment.libraryImportPrefixes) {
- _prefixElements[prefix.name] = prefix;
+ for (var prefix in fragment.prefixes) {
+ if (prefix.name3 case var name?) {
+ _prefixElements[name] = prefix;
+ }
prefix.scope = PrefixScope(
libraryFragment: fragment,
parent: _getParentPrefixScope(prefix),
@@ -402,7 +369,7 @@
}
/// The extensions accessible within [fragment].
- List<ExtensionElement> get accessibleExtensions {
+ List<ExtensionElement2> get accessibleExtensions {
var libraryDeclarations = fragment.library.libraryDeclarations;
return _extensions ??= {
...libraryDeclarations.extensions,
@@ -456,25 +423,25 @@
// No result.
return ScopeLookupResultImpl(
- getter: null,
- setter: null,
+ getter2: null,
+ setter2: null,
);
}
void notifyExtensionUsed(ExtensionElement2 element) {
- _importsTracking?.notifyExtensionUsed(element.asElement);
+ _importsTracking?.notifyExtensionUsed(element);
}
- PrefixScope? _getParentPrefixScope(PrefixElementImpl prefix) {
+ PrefixScope? _getParentPrefixScope(PrefixElementImpl2 prefix) {
var isDeferred = prefix.imports.any((import) {
- return import.prefix is DeferredImportElementPrefix;
+ return import.prefix2?.isDeferred ?? false;
});
if (isDeferred) {
return null;
}
for (var scope = parent; scope != null; scope = scope.parent) {
- var parentPrefix = scope._prefixElements[prefix.name];
+ var parentPrefix = scope._prefixElements[prefix.name3];
if (parentPrefix != null) {
return parentPrefix.scope;
}
@@ -487,15 +454,15 @@
if (_shouldTryPrefixElement(id)) {
if (_prefixElements[id] case var prefixElement?) {
return ScopeLookupResultImpl(
- getter: prefixElement,
- setter: null,
+ getter2: prefixElement,
+ setter2: null,
);
}
}
// Try imports of the library fragment.
var noPrefixResult = noPrefixScope.lookup(id);
- if (noPrefixResult.getter != null || noPrefixResult.setter != null) {
+ if (noPrefixResult.getter2 != null || noPrefixResult.setter2 != null) {
return noPrefixResult;
}
@@ -509,8 +476,8 @@
var librarySetter = libraryDeclarations._setters[id];
if (libraryGetter != null || librarySetter != null) {
return ScopeLookupResultImpl(
- getter: libraryGetter,
- setter: librarySetter,
+ getter2: libraryGetter,
+ setter2: librarySetter,
);
}
return null;
@@ -528,7 +495,7 @@
class LocalScope extends EnclosedScope {
LocalScope(super.parent);
- void add(Element element) {
+ void add(Element2 element) {
if (!element.isWildcardVariable) {
_addGetter(element);
}
@@ -541,12 +508,12 @@
final List<LibraryImportElementImpl> _importElements = [];
- final Map<String, Element> _getters = {};
- final Map<String, Element> _setters = {};
+ final Map<String, Element2> _getters = {};
+ final Map<String, Element2> _setters = {};
Set<String>? _settersFromDeprecatedExport;
Set<String>? _gettersFromDeprecatedExport;
- final Set<ExtensionElement> _extensions = {};
- LibraryElement? _deferredLibrary;
+ final Set<ExtensionElement2> _extensions = {};
+ LibraryElement2? _deferredLibrary;
ImportsTrackingOfPrefix? _importsTracking;
@@ -554,20 +521,20 @@
required this.libraryFragment,
required this.parent,
required List<LibraryImportElementImpl> libraryImports,
- required PrefixElement? prefix,
+ required PrefixElement2? prefix,
}) {
var elementFactory = libraryElement.session.elementFactory;
for (var import in libraryImports) {
var importedUri = import.uri;
if (importedUri is DirectiveUriWithLibraryImpl &&
- import.prefix?.element == prefix) {
+ import.prefix2?.element == prefix) {
_importElements.add(import);
var importedLibrary = importedUri.library;
var combinators = import.combinators.build();
for (var exportedReference in importedLibrary.exportedReferences) {
var reference = exportedReference.reference;
if (combinators.allows(reference.name)) {
- var element = elementFactory.elementOfReference(reference)!;
+ var element = elementFactory.elementOfReference2(reference)!;
if (_shouldAdd(importedLibrary, element)) {
_add(
element,
@@ -576,8 +543,10 @@
}
}
}
- if (import.prefix is DeferredImportElementPrefix) {
- _deferredLibrary ??= importedLibrary;
+ if (import.prefix2 case var importPrefix?) {
+ if (importPrefix.isDeferred) {
+ _deferredLibrary ??= importedLibrary;
+ }
}
}
}
@@ -600,10 +569,11 @@
@override
ScopeLookupResult lookup(String id) {
var deferredLibrary = _deferredLibrary;
- if (deferredLibrary != null && id == FunctionElement.LOAD_LIBRARY_NAME) {
+ if (deferredLibrary != null &&
+ id == TopLevelFunctionElement.LOAD_LIBRARY_NAME) {
return ScopeLookupResultImpl(
- getter: deferredLibrary.loadLibraryFunction,
- setter: null,
+ getter2: deferredLibrary.loadLibraryFunction2,
+ setter2: null,
);
}
@@ -613,8 +583,8 @@
_importsTracking?.lookupResult(getter);
_importsTracking?.lookupResult(setter);
return PrefixScopeLookupResult(
- getter: getter,
- setter: setter,
+ getter2: getter,
+ setter2: setter,
getterIsFromDeprecatedExport:
_gettersFromDeprecatedExport?.contains(id) ?? false,
setterIsFromDeprecatedExport:
@@ -627,8 +597,8 @@
}
return ScopeLookupResultImpl(
- getter: null,
- setter: null,
+ getter2: null,
+ setter2: null,
);
}
@@ -637,8 +607,8 @@
_importsTracking?.notifyPrefixUsedInCommentReference();
}
- void _add(Element element, bool isFromDeprecatedExport) {
- if (element is PropertyAccessorElement && element.isSetter) {
+ void _add(Element2 element, bool isFromDeprecatedExport) {
+ if (element is SetterElement) {
_addTo(
element,
isFromDeprecatedExport: isFromDeprecatedExport,
@@ -650,14 +620,14 @@
isFromDeprecatedExport: isFromDeprecatedExport,
isSetter: false,
);
- if (element is ExtensionElement) {
+ if (element is ExtensionElement2) {
_extensions.add(element);
}
}
}
void _addTo(
- Element element, {
+ Element2 element, {
required bool isFromDeprecatedExport,
required bool isSetter,
}) {
@@ -693,7 +663,7 @@
}
}
- Element _merge(Element existing, Element other) {
+ Element2 _merge(Element2 existing, Element2 other) {
if (_isSdkElement(existing)) {
if (!_isSdkElement(other)) {
return other;
@@ -704,18 +674,18 @@
}
}
- var conflictingElements = <Element>{};
+ var conflictingElements = <Element2>{};
_addElement(conflictingElements, existing);
_addElement(conflictingElements, other);
- return MultiplyDefinedElementImpl(
+ return MultiplyDefinedElementImpl2(
libraryFragment,
- conflictingElements.first.name!,
+ conflictingElements.first.name3!,
conflictingElements.toList(),
);
}
- bool _shouldAdd(LibraryElementImpl importedLibrary, Element element) {
+ bool _shouldAdd(LibraryElementImpl importedLibrary, Element2 element) {
// It is an error for the identifier `Record`, denoting the `Record` class
// from `dart:core`, where that import scope name is only imported from
// platform libraries, to appear in a library whose language version is
@@ -723,7 +693,7 @@
// records are released.
if (!libraryElement.featureSet.isEnabled(Feature.records)) {
if (importedLibrary.isInSdk &&
- element is ClassElementImpl &&
+ element is ClassElementImpl2 &&
element.isDartCoreRecord) {
return false;
}
@@ -732,24 +702,24 @@
}
static void _addElement(
- Set<Element> conflictingElements,
- Element element,
+ Set<Element2> conflictingElements,
+ Element2 element,
) {
- if (element is MultiplyDefinedElementImpl) {
- conflictingElements.addAll(element.conflictingElements);
+ if (element is MultiplyDefinedElementImpl2) {
+ conflictingElements.addAll(element.conflictingElements2);
} else {
conflictingElements.add(element);
}
}
- static bool _isSdkElement(Element element) {
- if (element is DynamicElementImpl || element is NeverElementImpl) {
+ static bool _isSdkElement(Element2 element) {
+ if (element is DynamicElementImpl2 || element is NeverElementImpl2) {
return true;
}
- if (element is MultiplyDefinedElement) {
+ if (element is MultiplyDefinedElement2) {
return false;
}
- return element.library!.isInSdk;
+ return element.library2!.isInSdk;
}
}
@@ -760,8 +730,8 @@
final int _deprecatedBits;
PrefixScopeLookupResult({
- required super.getter,
- required super.setter,
+ required super.getter2,
+ required super.setter2,
required bool getterIsFromDeprecatedExport,
required bool setterIsFromDeprecatedExport,
}) : _deprecatedBits = (getterIsFromDeprecatedExport
@@ -784,28 +754,23 @@
(_deprecatedBits & setterIsFromDeprecatedExportBit) != 0;
}
-class ScopeLookupResultImpl implements ScopeLookupResult {
+class ScopeLookupResultImpl extends ScopeLookupResult {
@override
- final Element? getter;
+ final Element2? getter2;
@override
- final Element? setter;
+ final Element2? setter2;
ScopeLookupResultImpl({
- required this.getter,
- required this.setter,
+ required this.getter2,
+ required this.setter2,
});
-
- @override
- Element2? get getter2 => getter?.asElement2;
- @override
- Element2? get setter2 => setter?.asElement2;
}
class TypeParameterScope extends EnclosedScope {
TypeParameterScope(
super.parent,
- List<TypeParameterElement> elements,
+ List<TypeParameterElement2> elements,
) {
for (var element in elements) {
if (!element.isWildcardVariable) {
@@ -816,26 +781,18 @@
}
mixin _GettersAndSetters {
- final Map<String, Element> _getters = {};
- final Map<String, Element> _setters = {};
+ final Map<String, Element2> _getters = {};
+ final Map<String, Element2> _setters = {};
- void _addGetter(Element element) {
- var id = element.name;
+ void _addGetter(Element2 element) {
+ var id = element.lookupName;
if (id != null) {
_getters[id] ??= element;
}
}
- void _addPropertyAccessor(PropertyAccessorElement element) {
- if (element.isGetter) {
- _addGetter(element);
- } else {
- _addSetter(element);
- }
- }
-
- void _addSetter(Element element) {
- var name = element.name;
+ void _addSetter(Element2 element) {
+ var name = element.lookupName;
if (name != null && name.endsWith('=')) {
var id = considerCanonicalizeString(name.substring(0, name.length - 1));
_setters[id] ??= element;
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 9400593..647f2c4 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -675,7 +675,7 @@
var variablesMap = _patternVariables.casePatternFinish();
node.variables = variablesMap.values
.whereType<BindPatternVariableElementImpl2>()
- .map((e) => e.asElement as BindPatternVariableElementImpl)
+ .map((e) => e.asElement)
.toList();
}
@@ -1154,7 +1154,7 @@
var variablesMap = _patternVariables.casePatternFinish();
node.elements = variablesMap.values
.whereType<BindPatternVariableElementImpl2>()
- .map((e) => e.asElement as BindPatternVariableElementImpl)
+ .map((e) => e.asElement)
.toList();
}
@@ -1571,7 +1571,7 @@
void _define(Element element) {
if (_nameScope case LocalScope nameScope) {
- nameScope.add(element);
+ nameScope.add(element.asElement2!);
}
}
diff --git a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
index c1380ea..0d046cf 100644
--- a/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
+++ b/pkg/analyzer/lib/src/error/duplicate_definition_verifier.dart
@@ -20,6 +20,7 @@
import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/error_verifier.dart';
+import 'package:analyzer/src/utilities/extensions/element.dart';
class DuplicateDefinitionVerifier {
final LibraryElementImpl _currentLibrary;
@@ -170,7 +171,7 @@
_diagnosticFactory.duplicateDefinition(
CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER,
importPrefix,
- existing,
+ existing.asElement!,
[name],
),
);
diff --git a/pkg/analyzer/lib/src/error/imports_verifier.dart b/pkg/analyzer/lib/src/error/imports_verifier.dart
index 69daba3..d4b49ad 100644
--- a/pkg/analyzer/lib/src/error/imports_verifier.dart
+++ b/pkg/analyzer/lib/src/error/imports_verifier.dart
@@ -178,6 +178,9 @@
for (var firstDirective in usedImports) {
var firstElement = firstDirective.element!;
var tracker = importsTracking.trackerOf(firstElement);
+ if (tracker == null) {
+ continue;
+ }
// Ignore unresolved imports.
var importedLibrary = firstElement.importedLibrary;
@@ -241,8 +244,12 @@
for (var importDirective in fileAnalysis.unit.directives) {
if (importDirective is ImportDirectiveImpl) {
var importElement = importDirective.element!;
- var prefixElement = importElement.prefix?.element;
- var tracking = importsTracking.map[prefixElement]!;
+ var prefixElement = importElement.prefix2?.element;
+
+ var tracking = importsTracking.map[prefixElement];
+ if (tracking == null) {
+ continue;
+ }
// Ignore the group of imports with a prefix in a comment reference.
if (tracking.hasPrefixUsedInCommentReference) {
@@ -260,8 +267,7 @@
continue;
}
- var isUsed =
- tracking.importToUsedElements2.containsKey(importElement);
+ var isUsed = tracking.importToUsedElements.containsKey(importElement);
if (!isUsed) {
_unusedImports.add(importDirective);
errorReporter.atNode(
@@ -310,7 +316,7 @@
for (var identifier in combinator.shownNames) {
var element = identifier.element;
if (element != null) {
- var importElements = importsTracking.elementsOf2(importElement);
+ var importElements = importsTracking.elementsOf(importElement);
var isUsed = importElements.contains(element);
if (element is PropertyInducingElement2) {
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 0cf11b9..147a842 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -4564,7 +4564,7 @@
ScopeResolverVisitor(
this.errorReporter, {
required this.nameScope,
- List<LibraryElement> docImportLibraries = const [],
+ List<LibraryElement2> docImportLibraries = const [],
}) : _docImportScope =
DocumentationCommentScope(nameScope, docImportLibraries);
@@ -4610,10 +4610,10 @@
Scope outerScope = nameScope;
try {
nameScope = LocalScope(nameScope);
- _define(exception.declaredElement!);
+ _define(exception.declaredElement!.asElement2!);
var stackTrace = node.stackTraceParameter;
if (stackTrace != null) {
- _define(stackTrace.declaredElement!);
+ _define(stackTrace.declaredElement!.asElement2!);
}
super.visitCatchClause(node);
} finally {
@@ -4633,7 +4633,7 @@
nameScope = TypeParameterScope(
nameScope,
- element.typeParameters,
+ element.typeParameters.map((e) => e.asElement2).toList(),
);
node.nameScope = nameScope;
node.typeParameters?.accept(this);
@@ -4642,7 +4642,7 @@
node.implementsClause?.accept(this);
node.nativeClause?.accept(this);
- nameScope = InstanceScope(nameScope, element);
+ nameScope = InstanceScope(nameScope, element.asElement2);
_visitDocumentationComment(node.documentationComment);
node.members.accept(this);
} finally {
@@ -4657,8 +4657,11 @@
try {
ClassElement element = node.declaredElement!;
nameScope = InstanceScope(
- TypeParameterScope(nameScope, element.typeParameters),
- element,
+ TypeParameterScope(
+ nameScope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ ),
+ element.asElement2,
);
_visitDocumentationComment(node.documentationComment);
node.typeParameters?.accept(this);
@@ -4690,7 +4693,7 @@
try {
nameScope = ConstructorInitializerScope(
nameScope,
- element,
+ element.asElement2,
);
node.initializers.accept(this);
_visitDocumentationComment(node.documentationComment);
@@ -4702,7 +4705,7 @@
nameScope = FormalParameterScope(
nameScope,
- element.parameters,
+ element.parameters.map((e) => e.asElement2).toList(),
);
node.body.accept(this);
} finally {
@@ -4717,7 +4720,7 @@
@override
void visitDeclaredIdentifier(DeclaredIdentifier node) {
- _define(node.declaredElement!);
+ _define(node.declaredElement!.asElement2!);
super.visitDeclaredIdentifier(node);
}
@@ -4750,14 +4753,14 @@
nameScope = TypeParameterScope(
nameScope,
- element.typeParameters,
+ element.typeParameters.map((e) => e.asElement2).toList(),
);
node.nameScope = nameScope;
node.typeParameters?.accept(this);
node.withClause?.accept(this);
node.implementsClause?.accept(this);
- nameScope = InstanceScope(nameScope, element);
+ nameScope = InstanceScope(nameScope, element.asElement2);
_visitDocumentationComment(node.documentationComment);
node.constants.accept(this);
node.members.accept(this);
@@ -4781,13 +4784,13 @@
nameScope = TypeParameterScope(
nameScope,
- element.typeParameters,
+ element.typeParameters.map((e) => e.asElement2).toList(),
);
node.nameScope = nameScope;
node.typeParameters?.accept(this);
node.onClause?.accept(this);
- nameScope = ExtensionScope(nameScope, element);
+ nameScope = ExtensionScope(nameScope, element.asElement2);
_visitDocumentationComment(node.documentationComment);
node.members.accept(this);
} finally {
@@ -4806,14 +4809,14 @@
nameScope = TypeParameterScope(
nameScope,
- element.typeParameters,
+ element.typeParameters.map((e) => e.asElement2).toList(),
);
node.nameScope = nameScope;
node.typeParameters?.accept(this);
node.representation.accept(this);
node.implementsClause?.accept(this);
- nameScope = InstanceScope(nameScope, element);
+ nameScope = InstanceScope(nameScope, element.asElement2);
_visitDocumentationComment(node.documentationComment);
node.members.accept(this);
} finally {
@@ -4845,7 +4848,7 @@
node.iterable.accept(this);
for (var variable in node.variables) {
- _define(variable);
+ _define(variable.asElement2);
}
node.pattern.accept(this);
@@ -4875,19 +4878,19 @@
if (parent is FunctionExpression) {
nameScope = FormalParameterScope(
nameScope,
- parent.declaredElement!.parameters,
+ parent.declaredElement!.parameters.map((e) => e.asElement2).toList(),
);
} else if (parent is FunctionTypeAlias) {
var aliasedElement = parent.declaredElement!.aliasedElement;
var functionElement = aliasedElement as GenericFunctionTypeElement;
nameScope = FormalParameterScope(
nameScope,
- functionElement.parameters,
+ functionElement.parameters.map((e) => e.asElement2).toList(),
);
} else if (parent is MethodDeclaration) {
nameScope = FormalParameterScope(
nameScope,
- parent.declaredElement!.parameters,
+ parent.declaredElement!.parameters.map((e) => e.asElement2).toList(),
);
}
}
@@ -4921,7 +4924,7 @@
var element = node.declaredElement!;
nameScope = TypeParameterScope(
nameScope,
- element.typeParameters,
+ element.typeParameters.map((e) => e.asElement2).toList(),
);
node.nameScope = nameScope;
node.returnType?.accept(this);
@@ -4951,8 +4954,11 @@
ExecutableElement element = node.declaredElement!;
nameScope = FormalParameterScope(
- TypeParameterScope(nameScope, element.typeParameters),
- element.parameters,
+ TypeParameterScope(
+ nameScope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ ),
+ element.parameters.map((e) => e.asElement2).toList(),
);
super.visitFunctionExpression(node);
} finally {
@@ -4967,7 +4973,10 @@
Scope outerScope = nameScope;
try {
var element = node.declaredElement!;
- nameScope = TypeParameterScope(nameScope, element.typeParameters);
+ nameScope = TypeParameterScope(
+ nameScope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.returnType?.accept(this);
node.typeParameters?.accept(this);
node.parameters.accept(this);
@@ -4988,7 +4997,7 @@
ParameterElement element = node.declaredElement!;
nameScope = TypeParameterScope(
nameScope,
- element.typeParameters,
+ element.typeParameters.map((e) => e.asElement2).toList(),
);
_visitDocumentationComment(node.documentationComment);
node.returnType?.accept(this);
@@ -5012,7 +5021,10 @@
Scope outerScope = nameScope;
try {
GenericFunctionTypeElement element = node.declaredElement!;
- nameScope = TypeParameterScope(nameScope, element.typeParameters);
+ nameScope = TypeParameterScope(
+ nameScope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.nameScope = nameScope;
super.visitGenericFunctionType(node);
} finally {
@@ -5026,7 +5038,10 @@
Scope outerScope = nameScope;
try {
var element = node.declaredElement as TypeAliasElement;
- nameScope = TypeParameterScope(nameScope, element.typeParameters);
+ nameScope = TypeParameterScope(
+ nameScope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.nameScope = nameScope;
node.typeParameters?.accept(this);
node.type.accept(this);
@@ -5034,8 +5049,12 @@
var aliasedElement = element.aliasedElement;
if (aliasedElement is GenericFunctionTypeElement) {
nameScope = FormalParameterScope(
- TypeParameterScope(nameScope, aliasedElement.typeParameters),
- aliasedElement.parameters);
+ TypeParameterScope(
+ nameScope,
+ aliasedElement.typeParameters.map((e) => e.asElement2).toList(),
+ ),
+ aliasedElement.parameters.map((e) => e.asElement2).toList(),
+ );
}
_visitDocumentationComment(node.documentationComment);
} finally {
@@ -5047,7 +5066,7 @@
void visitGuardedPattern(covariant GuardedPatternImpl node) {
var patternVariables = node.variables.values.toList();
for (var variable in patternVariables) {
- _define(variable.asElement!);
+ _define(variable);
}
node.pattern.accept(this);
@@ -5112,7 +5131,7 @@
var element = node.declaredElement!;
nameScope = TypeParameterScope(
nameScope,
- element.typeParameters,
+ element.typeParameters.map((e) => e.asElement2).toList(),
);
node.nameScope = nameScope;
node.returnType?.accept(this);
@@ -5148,13 +5167,16 @@
var element = node.declaredElement!;
node.metadata.accept(this);
- nameScope = TypeParameterScope(nameScope, element.typeParameters);
+ nameScope = TypeParameterScope(
+ nameScope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.nameScope = nameScope;
node.typeParameters?.accept(this);
node.onClause?.accept(this);
node.implementsClause?.accept(this);
- nameScope = InstanceScope(nameScope, element);
+ nameScope = InstanceScope(nameScope, element.asElement2);
_visitDocumentationComment(node.documentationComment);
node.members.accept(this);
} finally {
@@ -5175,7 +5197,7 @@
covariant PatternVariableDeclarationImpl node,
) {
for (var variable in node.elements) {
- _define(variable);
+ _define(variable.asElement2);
}
super.visitPatternVariableDeclaration(node);
@@ -5269,7 +5291,7 @@
var guardedPattern = case_.guardedPattern;
var variables = guardedPattern.variables;
for (var variable in variables.values) {
- _define(variable.asElement!);
+ _define(variable);
}
case_.accept(this);
});
@@ -5307,7 +5329,7 @@
var lastMember = group.members.last;
_withDeclaredLocals(lastMember, lastMember.statements, () {
for (var variable in group.variables.values) {
- _define(variable.asElement!);
+ _define(variable);
}
lastMember.statements.accept(this);
});
@@ -5331,7 +5353,7 @@
super.visitVariableDeclaration(node);
if (node.parent!.parent is ForParts) {
- _define(node.declaredElement!);
+ _define(node.declaredElement!.asElement2!);
}
}
@@ -5361,7 +5383,7 @@
return outerScope;
}
- void _define(Element element) {
+ void _define(Element2 element) {
(nameScope as LocalScope).add(element);
}
@@ -5490,7 +5512,7 @@
var enclosedScope = LocalScope(nameScope);
for (var statement in BlockScope.elementsInStatements(statements)) {
if (!statement.isWildcardFunction) {
- enclosedScope.add(statement);
+ enclosedScope.add(statement.asElement2!);
}
}
diff --git a/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart b/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart
index 54f5c68..0085189 100644
--- a/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/constructor_initializer_resolver.dart
@@ -11,6 +11,7 @@
import 'package:analyzer/src/summary2/library_builder.dart';
import 'package:analyzer/src/summary2/link.dart';
import 'package:analyzer/src/summary2/linking_node_scope.dart';
+import 'package:analyzer/src/utilities/extensions/element.dart';
class ConstructorInitializerResolver {
final Linker _linker;
@@ -51,7 +52,7 @@
var functionScope = LinkingNodeContext.get(node).scope;
var initializerScope = ConstructorInitializerScope(
functionScope,
- element,
+ element.asElement2,
);
var analysisOptions = _libraryBuilder.kind.file.analysisOptions;
diff --git a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
index 1e2bb09..c83c051 100644
--- a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
@@ -7,6 +7,7 @@
import 'dart:collection';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/src/context/context.dart';
import 'package:analyzer/src/dart/analysis/session.dart';
import 'package:analyzer/src/dart/element/element.dart';
@@ -15,6 +16,7 @@
import 'package:analyzer/src/summary2/bundle_reader.dart';
import 'package:analyzer/src/summary2/export.dart';
import 'package:analyzer/src/summary2/reference.dart';
+import 'package:analyzer/src/utilities/extensions/element.dart';
import 'package:analyzer/src/utilities/uri_cache.dart';
import 'package:meta/meta.dart';
@@ -204,6 +206,11 @@
return element;
}
+ // TODO(scheglov): Why would this method return `null`?
+ Element2? elementOfReference2(Reference reference) {
+ return elementOfReference(reference)?.asElement2;
+ }
+
bool hasLibrary(Uri uri) {
// We already have the element, linked or read.
if (rootReference['$uri']?.element is LibraryElementImpl) {
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 5a07301..980aee2 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -20,6 +20,7 @@
import 'package:analyzer/src/summary2/named_type_builder.dart';
import 'package:analyzer/src/summary2/record_type_builder.dart';
import 'package:analyzer/src/summary2/types_builder.dart';
+import 'package:analyzer/src/utilities/extensions/element.dart';
/// Recursive visitor of LinkedNodes that resolves explicit type annotations
/// in outlines. This includes resolving element references in identifiers
@@ -75,7 +76,10 @@
var element = node.declaredElement as ClassElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.metadata.accept(this);
node.typeParameters?.accept(this);
@@ -83,7 +87,7 @@
node.withClause?.accept(this);
node.implementsClause?.accept(this);
- scope = InstanceScope(scope, element);
+ scope = InstanceScope(scope, element.asElement2);
LinkingNodeContext(node, scope);
node.members.accept(this);
@@ -98,7 +102,10 @@
var element = node.declaredElement as ClassElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
LinkingNodeContext(node, scope);
node.metadata.accept(this);
@@ -123,7 +130,10 @@
var element = node.declaredElement as ConstructorElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
LinkingNodeContext(node, scope);
node.metadata.accept(this);
@@ -143,14 +153,17 @@
var element = node.declaredElement as EnumElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.metadata.accept(this);
node.typeParameters?.accept(this);
node.implementsClause?.accept(this);
node.withClause?.accept(this);
- scope = InstanceScope(scope, element);
+ scope = InstanceScope(scope, element.asElement2);
LinkingNodeContext(node, scope);
node.members.accept(this);
@@ -173,13 +186,16 @@
var element = node.declaredElement as ExtensionElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.metadata.accept(this);
node.typeParameters?.accept(this);
node.onClause?.accept(this);
- scope = ExtensionScope(scope, element);
+ scope = ExtensionScope(scope, element.asElement2);
LinkingNodeContext(node, scope);
node.members.accept(this);
@@ -199,14 +215,17 @@
var element = node.declaredElement as ExtensionTypeElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.metadata.accept(this);
node.typeParameters?.accept(this);
node.representation.accept(this);
node.implementsClause?.accept(this);
- scope = InstanceScope(scope, element);
+ scope = InstanceScope(scope, element.asElement2);
LinkingNodeContext(node, scope);
LinkingNodeContext(node.representation, scope);
@@ -228,7 +247,10 @@
var element = node.declaredElement as FieldFormalParameterElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.type?.accept(this);
node.typeParameters?.accept(this);
@@ -249,7 +271,10 @@
var element = node.declaredElement as ExecutableElementImpl;
- scope = TypeParameterScope(outerScope, element.typeParameters);
+ scope = TypeParameterScope(
+ outerScope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
LinkingNodeContext(node, scope);
node.metadata.accept(this);
@@ -272,7 +297,10 @@
var element = node.declaredElement as TypeAliasElementImpl;
- scope = TypeParameterScope(outerScope, element.typeParameters);
+ scope = TypeParameterScope(
+ outerScope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.returnType?.accept(this);
node.typeParameters?.accept(this);
@@ -289,7 +317,10 @@
var element = node.declaredElement as ParameterElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.returnType?.accept(this);
node.typeParameters?.accept(this);
@@ -305,7 +336,10 @@
var outerScope = scope;
var element = node.declaredElement as GenericFunctionTypeElementImpl;
- scope = TypeParameterScope(outerScope, element.typeParameters);
+ scope = TypeParameterScope(
+ outerScope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.returnType?.accept(this);
node.typeParameters?.accept(this);
@@ -326,7 +360,10 @@
var element = node.declaredElement as TypeAliasElementImpl;
- scope = TypeParameterScope(outerScope, element.typeParameters);
+ scope = TypeParameterScope(
+ outerScope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.metadata.accept(this);
node.typeParameters?.accept(this);
@@ -354,7 +391,10 @@
var element = node.declaredElement as ExecutableElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
LinkingNodeContext(node, scope);
node.metadata.accept(this);
@@ -372,14 +412,17 @@
var element = node.declaredElement as MixinElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.metadata.accept(this);
node.typeParameters?.accept(this);
node.onClause?.accept(this);
node.implementsClause?.accept(this);
- scope = InstanceScope(scope, element);
+ scope = InstanceScope(scope, element.asElement2);
LinkingNodeContext(node, scope);
node.members.accept(this);
@@ -490,7 +533,10 @@
var element = node.declaredElement as SuperFormalParameterElementImpl;
- scope = TypeParameterScope(scope, element.typeParameters);
+ scope = TypeParameterScope(
+ scope,
+ element.typeParameters.map((e) => e.asElement2).toList(),
+ );
node.type?.accept(this);
node.typeParameters?.accept(this);
diff --git a/pkg/analyzer/lib/src/utilities/extensions/element.dart b/pkg/analyzer/lib/src/utilities/extensions/element.dart
index 3367048..aa81e91 100644
--- a/pkg/analyzer/lib/src/utilities/extensions/element.dart
+++ b/pkg/analyzer/lib/src/utilities/extensions/element.dart
@@ -14,6 +14,20 @@
import 'package:analyzer/src/dart/element/type.dart';
import 'package:meta/meta.dart';
+extension BindPatternVariableElementImpl2Extension
+ on BindPatternVariableElementImpl2 {
+ BindPatternVariableElementImpl get asElement {
+ return firstFragment;
+ }
+}
+
+extension BindPatternVariableElementImplExtension
+ on BindPatternVariableElementImpl {
+ BindPatternVariableElementImpl2 get asElement2 {
+ return element;
+ }
+}
+
extension ClassElement2Extension on ClassElement2 {
ClassElement get asElement {
return firstFragment as ClassElement;
@@ -146,6 +160,8 @@
switch (self) {
case null:
return null;
+ case BindPatternVariableElementImpl2 element2:
+ return element2.asElement;
case ConstructorElementImpl2 element2:
return element2.asElement;
case DynamicElementImpl2():
@@ -511,6 +527,12 @@
}
}
+extension MixinElementImplExtension on MixinElementImpl {
+ MixinElementImpl2 get asElement2 {
+ return element;
+ }
+}
+
extension ParameterElementExtension on ParameterElement {
FormalParameterElementMixin get asElement2 {
return switch (this) {