Elements. Deprecate ExecutableElement.
Change-Id: Ic66c9df46bfcfe93d2e6bd93315e298eee694533
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/418831
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/api.txt b/pkg/analyzer/api.txt
index 7437147..5beabbc 100644
--- a/pkg/analyzer/api.txt
+++ b/pkg/analyzer/api.txt
@@ -3268,7 +3268,7 @@
visitTypeParameterElement (method: R? Function(TypeParameterElement))
EnumElement (class extends Object implements InterfaceElement, deprecated):
new (constructor: EnumElement Function())
- ExecutableElement (class extends Object implements FunctionTypedElement):
+ ExecutableElement (class extends Object implements FunctionTypedElement, deprecated):
new (constructor: ExecutableElement Function())
declaration (getter: ExecutableElement)
displayName (getter: String)
@@ -3367,7 +3367,7 @@
variables (getter: List<PatternVariableElement>)
LabelElement (class extends Object implements Element):
new (constructor: LabelElement Function())
- enclosingElement3 (getter: ExecutableElement)
+ enclosingElement3 (getter: ExecutableElement, deprecated)
name (getter: String)
LibraryElement (class extends Object implements _ExistingElement):
new (constructor: LibraryElement Function())
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 07483e9..7dff1ec 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -1096,6 +1096,7 @@
/// constructors, getters, and setters.
///
/// Clients may not extend, implement or mix-in this class.
+@Deprecated('Use ExecutableElement2 instead')
abstract class ExecutableElement implements FunctionTypedElement {
@override
ExecutableElement get declaration;
@@ -1631,6 +1632,7 @@
///
/// Clients may not extend, implement or mix-in this class.
abstract class LabelElement implements Element {
+ @Deprecated(elementModelDeprecationMsg)
@override
ExecutableElement get enclosingElement3;
@@ -1807,6 +1809,7 @@
}
/// An element that can be (but is not required to be) defined within a method
+// ignore:deprecated_member_use_from_same_package
/// or function (an [ExecutableElement]).
///
/// Clients may not extend, implement or mix-in this class.
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 2efe23b..792fbac 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3610,7 +3610,6 @@
FunctionTypeImpl get type;
}
-/// A base class for concrete implementations of an [ExecutableElement].
abstract class ExecutableElementImpl extends _ExistingElementImpl
with AugmentableFragment, TypeParameterizedElementMixin
implements ExecutableElementOrMember, ExecutableFragment {
@@ -3849,7 +3848,10 @@
/// Common base class for all analyzer-internal classes that implement
/// `ExecutableElement`.
abstract class ExecutableElementOrMember
- implements ExecutableElement, ElementOrMember {
+ implements
+ // ignore:deprecated_member_use_from_same_package
+ ExecutableElement,
+ ElementOrMember {
@override
List<ParameterElementMixin> get parameters;
@@ -7771,7 +7773,7 @@
@override
bool get _includeNameOffsetInIdentifier {
return super._includeNameOffsetInIdentifier ||
- enclosingElement3 is ExecutableElement ||
+ enclosingElement3 is ExecutableFragment ||
enclosingElement3 is VariableElement;
}
}
@@ -8668,7 +8670,7 @@
HAS_SINCE_SDK_VERSION_VALUE,
/// Indicates that the associated element did not have an explicit type
- /// associated with it. If the element is an [ExecutableElement], then the
+ /// associated with it. If the element is an [ExecutableElement2], then the
/// type being referred to is the return type.
IMPLICIT_TYPE,
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 099a9e4..60ab761 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -170,7 +170,7 @@
@experimental
ExecutableElement2? getInherited3(InterfaceType type, Name name) {
var element = getInherited(type, name);
- return element.asElement2;
+ return element?.asElement2;
}
/// Returns the most specific signature of the member with the given [name]
diff --git a/pkg/analyzer/lib/src/utilities/extensions/element.dart b/pkg/analyzer/lib/src/utilities/extensions/element.dart
index 6edf8ed..6d0d4fa 100644
--- a/pkg/analyzer/lib/src/utilities/extensions/element.dart
+++ b/pkg/analyzer/lib/src/utilities/extensions/element.dart
@@ -323,28 +323,6 @@
}
}
-extension ExecutableElement2OrNullExtension on ExecutableElement2? {
- ExecutableElement? get asElement {
- return this?.asElement;
- }
-}
-
-extension ExecutableElementExtension on ExecutableElement {
- ExecutableElement2OrMember get asElement2 {
- return switch (this) {
- ExecutableFragment(:var element) => element,
- ExecutableMember member => member,
- _ => throw UnsupportedError('Unsupported type: $runtimeType'),
- }
- // TODO(paulberry): eliminate this cast by using impl types in the
- // switch patterns above.
- as ExecutableElement2OrMember;
- }
-
- ExecutableElementImpl get declarationImpl =>
- declaration as ExecutableElementImpl;
-}
-
extension ExecutableElementImpl2Extension on ExecutableElementImpl2 {
ExecutableElementImpl get asElement {
return lastFragment;
@@ -366,13 +344,10 @@
};
}
- ElementImpl get enclosingElementImpl => enclosingElement3 as ElementImpl;
-}
+ ExecutableElementImpl get declarationImpl =>
+ declaration as ExecutableElementImpl;
-extension ExecutableElementOrNullExtension on ExecutableElement? {
- ExecutableElement2? get asElement2 {
- return this?.asElement2;
- }
+ ElementImpl get enclosingElementImpl => enclosingElement3 as ElementImpl;
}
extension ExtensionElementImpl2Extension on ExtensionElementImpl2 {