Elements. Migrate ThisLookup and LexicalLookup.
Change-Id: I29d36ed43907871a0ffed8bd71619ef55a336530
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/404240
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 4efd68c..8d4c8c6 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -1662,6 +1662,11 @@
ElementKind get kind => ElementKind.CONSTRUCTOR;
@override
+ ConstructorElementImpl get lastFragment {
+ return super.lastFragment as ConstructorElementImpl;
+ }
+
+ @override
Element2 get nonSynthetic2 {
if (isSynthetic) {
return enclosingElement2;
@@ -3855,6 +3860,17 @@
return firstFragment.hasModifier(Modifier.INVOKES_SUPER_SELF);
}
+ ExecutableElementImpl get lastFragment {
+ var result = firstFragment as ExecutableElementImpl;
+ while (true) {
+ if (result.nextFragment case ExecutableElementImpl nextFragment) {
+ result = nextFragment;
+ } else {
+ return result;
+ }
+ }
+ }
+
@override
LibraryElement2 get library2 {
var firstFragment = this.firstFragment as ExecutableElementImpl;
@@ -5601,9 +5617,7 @@
@override
List<TypeParameterElementImpl2> get typeParameters2 =>
- firstFragment.typeParameters
- .map((fragment) => fragment.element)
- .toList();
+ firstFragment.typeParameters.map((fragment) => fragment.element).toList();
@override
String displayString2(
@@ -8125,6 +8139,11 @@
ElementKind get kind => ElementKind.METHOD;
@override
+ MethodElementImpl get lastFragment {
+ return super.lastFragment as MethodElementImpl;
+ }
+
+ @override
String? get lookupName {
if (name3 == '-' && formalParameters.isEmpty) {
return 'unary-';
@@ -9763,6 +9782,11 @@
bool get isExternal => firstFragment.isExternal;
@override
+ PropertyAccessorElementImpl get lastFragment {
+ return super.lastFragment as PropertyAccessorElementImpl;
+ }
+
+ @override
String? get name3 => firstFragment.name2;
@override
@@ -10321,6 +10345,11 @@
ElementKind get kind => ElementKind.FUNCTION;
@override
+ FunctionElementImpl get lastFragment {
+ return super.lastFragment as FunctionElementImpl;
+ }
+
+ @override
LibraryElement2 get library2 {
return firstFragment.library2!;
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart b/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart
index 5d64d65..fd8e0a4 100644
--- a/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/lexical_lookup.dart
@@ -2,9 +2,7 @@
// 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:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/dart/element/scope.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/element/extensions.dart';
@@ -21,8 +19,8 @@
/// a getter. If a matching element is found, a [LexicalLookupResult] is
/// returned. Otherwise `null` is returned.
static LexicalLookupResult? resolveGetter(ScopeLookupResult scopeResult) {
- var scopeGetter = scopeResult.getter;
- var scopeSetter = scopeResult.setter;
+ var scopeGetter = scopeResult.getter2;
+ var scopeSetter = scopeResult.setter2;
if (scopeGetter != null || scopeSetter != null) {
if (scopeGetter != null) {
return LexicalLookupResult(requested: scopeGetter);
@@ -39,10 +37,10 @@
/// a setter. If a matching element is found, a [LexicalLookupResult] is
/// returned. Otherwise `null` is returned.
static LexicalLookupResult? resolveSetter(ScopeLookupResult scopeResult) {
- var scopeGetter = scopeResult.getter;
- var scopeSetter = scopeResult.setter;
+ var scopeGetter = scopeResult.getter2;
+ var scopeSetter = scopeResult.setter2;
if (scopeGetter != null || scopeSetter != null) {
- if (scopeGetter is VariableElement) {
+ if (scopeGetter is VariableElement2) {
return LexicalLookupResult(requested: scopeGetter);
}
if (scopeSetter != null) {
@@ -58,8 +56,8 @@
}
class LexicalLookupResult {
- final Element? requested;
- final Element? recovery;
+ final Element2? requested;
+ final Element2? recovery;
/// The type, usually [FunctionType] referenced with `call`.
final DartType? callFunctionType;
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index 5e99d32..f7de908 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -266,7 +266,7 @@
);
}
- readElementRequested = readLookup?.requested;
+ readElementRequested = readLookup?.requested.asElement;
if (readElementRequested is PropertyAccessorElement &&
!readElementRequested.isStatic) {
var unpromotedType = readElementRequested.returnType;
@@ -285,8 +285,8 @@
if (hasWrite) {
var writeLookup = LexicalLookup.resolveSetter(scopeLookupResult) ??
_resolver.thisLookupSetter(node);
- writeElementRequested = writeLookup?.requested;
- writeElementRecovery = writeLookup?.recovery;
+ writeElementRequested = writeLookup?.requested.asElement;
+ writeElementRecovery = writeLookup?.recovery.asElement;
AssignmentVerifier(errorReporter).verify(
node: node,
diff --git a/pkg/analyzer/lib/src/dart/resolver/this_lookup.dart b/pkg/analyzer/lib/src/dart/resolver/this_lookup.dart
index dba10f8..222d811 100644
--- a/pkg/analyzer/lib/src/dart/resolver/this_lookup.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/this_lookup.dart
@@ -2,8 +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.
-// ignore_for_file: analyzer_use_new_elements
-
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/src/dart/resolver/lexical_lookup.dart';
import 'package:analyzer/src/generated/resolver.dart';
@@ -51,11 +49,11 @@
);
}
- var getterElement = propertyResult.getter;
+ var getterElement = propertyResult.getter2;
if (getterElement != null) {
return LexicalLookupResult(requested: getterElement);
} else {
- return LexicalLookupResult(recovery: propertyResult.setter);
+ return LexicalLookupResult(recovery: propertyResult.setter2);
}
}
@@ -80,11 +78,11 @@
nameErrorEntity: node,
);
- var setterElement = propertyResult.setter;
+ var setterElement = propertyResult.setter2;
if (setterElement != null) {
return LexicalLookupResult(requested: setterElement);
} else {
- return LexicalLookupResult(recovery: propertyResult.getter);
+ return LexicalLookupResult(recovery: propertyResult.getter2);
}
}
}
diff --git a/pkg/analyzer/lib/src/utilities/extensions/element.dart b/pkg/analyzer/lib/src/utilities/extensions/element.dart
index a366212..0980624 100644
--- a/pkg/analyzer/lib/src/utilities/extensions/element.dart
+++ b/pkg/analyzer/lib/src/utilities/extensions/element.dart
@@ -51,7 +51,7 @@
if (this case ConstructorMember member) {
return member;
}
- return baseElement.firstFragment as ConstructorElement;
+ return (this as ConstructorElementImpl2).lastFragment;
}
}
@@ -142,46 +142,46 @@
switch (self) {
case null:
return null;
- case ConstructorElementImpl2():
- return self.firstFragment as Element;
+ case ConstructorElementImpl2 element2:
+ return element2.asElement;
case DynamicElementImpl2():
return self.firstFragment;
- case ExecutableMember():
- return self.declaration as Element;
- case ExtensionElementImpl2():
- return self.firstFragment as Element;
- case FieldElementImpl2():
- return self.firstFragment as Element;
+ case ExecutableMember element2:
+ return element2.asElement;
+ case ExtensionElementImpl2 element2:
+ return element2.asElement;
+ case FieldElementImpl2 element2:
+ return element2.asElement;
case FieldMember():
return self.declaration as Element;
case FormalParameterElement element2:
return element2.asElement;
- case GetterElementImpl():
- return self.firstFragment as Element;
+ case GetterElementImpl element2:
+ return element2.asElement;
case LabelElementImpl2 element2:
return element2.asElement;
case LibraryElementImpl():
return self as Element;
case LibraryImportElementImpl():
return self as Element;
- case LocalFunctionElementImpl():
- return self.wrappedElement as Element;
+ case LocalFunctionElementImpl element2:
+ return element2.asElement;
case LocalVariableElementImpl2():
return self.wrappedElement as Element;
- case MethodElementImpl2():
- return self.firstFragment as Element;
+ case MethodElementImpl2 element2:
+ return element2.asElement;
case MultiplyDefinedElementImpl2 element2:
return element2.asElement;
case NeverElementImpl2():
return NeverElementImpl.instance;
case PrefixElement2 element2:
return element2.asElement;
- case SetterElementImpl():
- return self.firstFragment as Element;
- case TopLevelFunctionElementImpl():
- return self.firstFragment as Element;
- case TopLevelVariableElementImpl2():
- return self.firstFragment as Element;
+ case SetterElementImpl element2:
+ return element2.asElement;
+ case TopLevelFunctionElementImpl element2:
+ return element2.asElement;
+ case TopLevelVariableElementImpl2 element2:
+ return element2.asElement;
case TypeDefiningElement2():
return self.firstFragment as Element;
default:
@@ -454,7 +454,7 @@
if (this case MethodMember member) {
return member;
}
- return baseElement.firstFragment as MethodElement;
+ return (this as MethodElementImpl2).lastFragment;
}
}
@@ -511,7 +511,7 @@
if (this case PropertyAccessorMember member) {
return member;
}
- return firstFragment as PropertyAccessorElement;
+ return (this as PropertyAccessorElementImpl2).lastFragment;
}
}
@@ -527,7 +527,7 @@
extension TopLevelFunctionElementExtension on TopLevelFunctionElement {
FunctionElement get asElement {
- return firstFragment as FunctionElement;
+ return (this as TopLevelFunctionElementImpl).lastFragment;
}
}