From fdc469778c05cb869a8ea9c19db30ba1eeebcefb Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Mon, 31 Mar 2025 17:29:16 -0700 Subject: [PATCH] Elements. Deprecate ExecutableElement. Change-Id: Ic66c9df46bfcfe93d2e6bd93315e298eee694533 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/418831 Reviewed-by: Paul Berry Commit-Queue: Konstantin Shcheglov --- pkg/analyzer/api.txt | 4 +-- pkg/analyzer/lib/dart/element/element.dart | 3 ++ .../lib/src/dart/element/element.dart | 10 +++--- .../dart/element/inheritance_manager3.dart | 2 +- .../lib/src/utilities/extensions/element.dart | 31 ++----------------- 5 files changed, 15 insertions(+), 35 deletions(-) diff --git a/pkg/analyzer/api.txt b/pkg/analyzer/api.txt index 7437147832d..5beabbcd933 100644 --- a/pkg/analyzer/api.txt +++ b/pkg/analyzer/api.txt @@ -3268,7 +3268,7 @@ package:analyzer/dart/element/element.dart: 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 @@ package:analyzer/dart/element/element.dart: variables (getter: List) 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 07483e99c22..7dff1ec6809 100644 --- a/pkg/analyzer/lib/dart/element/element.dart +++ b/pkg/analyzer/lib/dart/element/element.dart @@ -1096,6 +1096,7 @@ abstract class EnumElement implements InterfaceElement {} /// 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 @@ abstract class JoinPatternVariableElement implements PatternVariableElement { /// /// 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 @@ class LibraryLanguageVersion { } /// 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 2efe23bac8f..792fbac1c8c 100644 --- a/pkg/analyzer/lib/src/dart/element/element.dart +++ b/pkg/analyzer/lib/src/dart/element/element.dart @@ -3610,7 +3610,6 @@ abstract class ExecutableElement2OrMember implements ExecutableElement2 { 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 @@ abstract class ExecutableElementImpl2 extends FunctionTypedElementImpl2 /// 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 get parameters; @@ -7771,7 +7773,7 @@ class LocalFunctionFragmentImpl extends FunctionElementImpl @override bool get _includeNameOffsetInIdentifier { return super._includeNameOffsetInIdentifier || - enclosingElement3 is ExecutableElement || + enclosingElement3 is ExecutableFragment || enclosingElement3 is VariableElement; } } @@ -8668,7 +8670,7 @@ enum Modifier { 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 099a9e4cda8..60ab76145d2 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 @@ class InheritanceManager3 { @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 6edf8ed78cf..6d0d4fa7eeb 100644 --- a/pkg/analyzer/lib/src/utilities/extensions/element.dart +++ b/pkg/analyzer/lib/src/utilities/extensions/element.dart @@ -323,28 +323,6 @@ extension ExecutableElement2Extension on ExecutableElement2 { } } -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 @@ extension ExecutableElementOrMemberExtension on ExecutableElementOrMember { }; } - 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 {