Elements. Deprecate FunctionElement.
Change-Id: I668284d0b8346728bc529635ef898794fbab2c79
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/418830
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 efc65b3..7437147 100644
--- a/pkg/analyzer/api.txt
+++ b/pkg/analyzer/api.txt
@@ -3308,7 +3308,7 @@
FieldFormalParameterElement (class extends Object implements ParameterElement):
new (constructor: FieldFormalParameterElement Function())
field (getter: FieldElement?)
- FunctionElement (class extends Object implements ExecutableElement, LocalElement):
+ FunctionElement (class extends Object implements ExecutableElement, LocalElement, deprecated):
CALL_METHOD_NAME (static getter: String)
LOAD_LIBRARY_NAME (static getter: String)
MAIN_FUNCTION_NAME (static getter: String)
@@ -3373,7 +3373,7 @@
new (constructor: LibraryElement Function())
definingCompilationUnit (getter: CompilationUnitElement, deprecated)
enclosingElement3 (getter: Null)
- entryPoint (getter: FunctionElement?)
+ entryPoint (getter: FunctionElement?, deprecated)
exportNamespace (getter: Namespace)
exportedLibraries (getter: List<LibraryElement>)
featureSet (getter: FeatureSet)
@@ -3384,7 +3384,7 @@
isInSdk (getter: bool)
languageVersion (getter: LibraryLanguageVersion)
library (getter: LibraryElement)
- loadLibraryFunction (getter: FunctionElement)
+ loadLibraryFunction (getter: FunctionElement, deprecated)
name (getter: String)
publicNamespace (getter: Namespace)
session (getter: AnalysisSession)
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 31144f5..07483e9 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -1253,6 +1253,7 @@
/// variable.
///
/// Clients may not extend, implement or mix-in this class.
+@Deprecated('Use TopLevelFunctionElement or LocalFunctionElement')
abstract class FunctionElement implements ExecutableElement, LocalElement {
/// The name of the method that can be implemented by a class to allow its
/// instances to be invoked as if they were a function.
@@ -1654,6 +1655,7 @@
///
/// The entry point is defined to be a zero argument top-level function
/// whose name is `main`.
+ @Deprecated(elementModelDeprecationMsg)
FunctionElement? get entryPoint;
/// The libraries that are exported from this library.
@@ -1697,6 +1699,7 @@
/// The element representing the synthetic function `loadLibrary` that is
/// implicitly defined for this library if the library is imported using a
/// deferred import.
+ @Deprecated(elementModelDeprecationMsg)
FunctionElement get loadLibraryFunction;
/// The name of this library, possibly the empty string if this library does
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index ddab2d8..2efe23b 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -5117,9 +5117,9 @@
}
}
-/// A concrete implementation of a [FunctionElement].
sealed class FunctionElementImpl extends ExecutableElementImpl
implements
+ // ignore:deprecated_member_use_from_same_package
FunctionElement,
FunctionTypedElementImpl,
ExecutableElementOrMember {
@@ -6950,7 +6950,7 @@
/// The entry point for this library, or `null` if this library does not have
/// an entry point.
- TopLevelFunctionElement? _entryPoint;
+ TopLevelFunctionElementImpl? _entryPoint;
/// The provider for the synthetic function `loadLibrary` that is defined
/// for this library.
@@ -7059,16 +7059,16 @@
@Deprecated('Use entryPoint2 instead')
@override
FunctionElement? get entryPoint {
- return entryPoint2?.asElement;
+ return entryPoint2?.lastFragment;
}
@override
- TopLevelFunctionElement? get entryPoint2 {
+ TopLevelFunctionElementImpl? get entryPoint2 {
linkedData?.read(this);
return _entryPoint;
}
- set entryPoint2(TopLevelFunctionElement? value) {
+ set entryPoint2(TopLevelFunctionElementImpl? value) {
_entryPoint = value;
}
@@ -7652,7 +7652,7 @@
}
TopLevelFunctionElementImpl _create(LibraryElementImpl library) {
- var name = FunctionElement.LOAD_LIBRARY_NAME;
+ var name = TopLevelFunctionElement.LOAD_LIBRARY_NAME;
var fragment = TopLevelFunctionFragmentImpl(name, -1);
fragment.name2 = name;
@@ -10840,7 +10840,7 @@
@override
bool get isEntryPoint {
- return displayName == FunctionElement.MAIN_FUNCTION_NAME;
+ return displayName == TopLevelFunctionElement.MAIN_FUNCTION_NAME;
}
}
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 6ff45e2..a485068 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -545,7 +545,7 @@
unitElement: unitElement,
);
- element.entryPoint2 = reader.readElement2() as TopLevelFunctionElement?;
+ element.entryPoint2 = reader.readElement2() as TopLevelFunctionElementImpl?;
element.fieldNameNonPromotabilityInfo =
_readFieldNameNonPromotabilityInfo(reader);
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index 3118234..7c037a0 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -375,7 +375,7 @@
element.exportNamespace = namespace;
var entryPoint = namespace.get2(TopLevelFunctionElement.MAIN_FUNCTION_NAME);
- if (entryPoint is TopLevelFunctionElement) {
+ if (entryPoint is TopLevelFunctionElementImpl) {
element.entryPoint2 = entryPoint;
}
}
diff --git a/pkg/analyzer/lib/src/utilities/extensions/element.dart b/pkg/analyzer/lib/src/utilities/extensions/element.dart
index 71d5c79..6edf8ed 100644
--- a/pkg/analyzer/lib/src/utilities/extensions/element.dart
+++ b/pkg/analyzer/lib/src/utilities/extensions/element.dart
@@ -689,12 +689,6 @@
}
}
-extension TopLevelFunctionElementExtension on TopLevelFunctionElement {
- FunctionElement get asElement {
- return (this as TopLevelFunctionElementImpl).lastFragment;
- }
-}
-
extension TopLevelFunctionElementImplExtension on TopLevelFunctionElementImpl {
FunctionElementImpl get asElement {
return lastFragment;