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 {