From 892ba9c15891dec654a9f9ac71f544d9504cfb3f Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Thu, 2 Oct 2025 12:29:30 -0700 Subject: [PATCH] Elements. Deprecate TypeDefiningElement and TypeDefiningFragment. Change-Id: Ic418980c83146669678d5c6d61db05d84ba86652 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/452903 Reviewed-by: Johnni Winther Reviewed-by: Brian Wilkerson Commit-Queue: Konstantin Shcheglov --- pkg/analysis_server_plugin/pubspec.yaml | 4 +- pkg/analyzer/CHANGELOG.md | 4 ++ pkg/analyzer/api.txt | 4 +- pkg/analyzer/lib/dart/element/element.dart | 42 ++++++++++++------- .../lib/src/dart/element/element.dart | 20 +++++++-- pkg/analyzer/pubspec.yaml | 2 +- pkg/analyzer_plugin/pubspec.yaml | 4 +- pkg/analyzer_testing/pubspec.yaml | 2 +- 8 files changed, 54 insertions(+), 28 deletions(-) diff --git a/pkg/analysis_server_plugin/pubspec.yaml b/pkg/analysis_server_plugin/pubspec.yaml index fcd2d81d73d..ab641429a71 100644 --- a/pkg/analysis_server_plugin/pubspec.yaml +++ b/pkg/analysis_server_plugin/pubspec.yaml @@ -11,8 +11,8 @@ resolution: workspace dependencies: # See the release policy for managing this dependency at # pkg/analyzer/doc/implementation/releasing.md. - analyzer: 8.2.0 - analyzer_plugin: 0.13.8 + analyzer: 8.3.0-dev + analyzer_plugin: 0.13.9-dev meta: ^1.16.0 yaml: ^3.1.0 yaml_edit: ^2.2.0 diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md index ec1c58e796d..8a3385723c8 100644 --- a/pkg/analyzer/CHANGELOG.md +++ b/pkg/analyzer/CHANGELOG.md @@ -1,3 +1,7 @@ +## 8.3.0-dev +* Deprecate `TypeDefiningElement`, check for specific elements. +* Deprecate `TypeDefiningFragment`, check for specific fragments. + ## 8.2.0 * Updated SDK constraint to `^3.9.0`. * Deprecate `Diagnostic.data`. Instead, please use an expando to attach data to diff --git a/pkg/analyzer/api.txt b/pkg/analyzer/api.txt index 484ac261ae1..b11d1cd2e3c 100644 --- a/pkg/analyzer/api.txt +++ b/pkg/analyzer/api.txt @@ -4172,11 +4172,11 @@ package:analyzer/dart/element/element.dart: enclosingFragment (getter: LibraryFragment?) nextFragment (getter: Null) previousFragment (getter: Null) - TypeDefiningElement (class extends Object implements Element, Annotatable): + TypeDefiningElement (class extends Object implements Element, Annotatable, deprecated): new (constructor: TypeDefiningElement Function()) firstFragment (getter: TypeDefiningFragment) fragments (getter: List) - TypeDefiningFragment (class extends Object implements Fragment, Annotatable): + TypeDefiningFragment (class extends Object implements Fragment, Annotatable, deprecated): new (constructor: TypeDefiningFragment Function()) element (getter: TypeDefiningElement) nextFragment (getter: TypeDefiningFragment?) diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart index a480495724f..aec2b50b296 100644 --- a/pkg/analyzer/lib/dart/element/element.dart +++ b/pkg/analyzer/lib/dart/element/element.dart @@ -2055,7 +2055,9 @@ abstract class HideElementCombinator implements NamespaceCombinator { /// /// Clients may not extend, implement or mix-in this class. abstract class InstanceElement - implements TypeDefiningElement, TypeParameterizedElement { + implements + TypeDefiningElement, // ignore:deprecated_member_use_from_same_package + TypeParameterizedElement { @override InstanceElement get baseElement; @@ -2205,7 +2207,9 @@ abstract class InstanceElement /// /// Clients may not extend, implement or mix-in this class. abstract class InstanceFragment - implements TypeDefiningFragment, TypeParameterizedFragment { + implements + TypeDefiningFragment, // ignore:deprecated_member_use_from_same_package + TypeParameterizedFragment { @override InstanceElement get element; @@ -3890,7 +3894,10 @@ abstract class TopLevelVariableFragment implements PropertyInducingFragment { /// /// Clients may not extend, implement or mix-in this class. abstract class TypeAliasElement - implements TypeParameterizedElement, TypeDefiningElement { + implements + TypeParameterizedElement, + TypeDefiningElement // ignore:deprecated_member_use_from_same_package + { /// If the aliased type has structure, return the corresponding element. /// For example, it could be [GenericFunctionTypeElement]. /// @@ -3944,7 +3951,10 @@ abstract class TypeAliasElement /// /// Clients may not extend, implement or mix-in this class. abstract class TypeAliasFragment - implements TypeParameterizedFragment, TypeDefiningFragment { + implements + TypeParameterizedFragment, + TypeDefiningFragment // ignore:deprecated_member_use_from_same_package + { @override TypeAliasElement get element; @@ -3961,11 +3971,8 @@ abstract class TypeAliasFragment /// An element that defines a type. /// /// Clients may not extend, implement or mix-in this class. -abstract class TypeDefiningElement - implements - Element, - Annotatable // ignore:deprecated_member_use_from_same_package - { +@Deprecated('Check for specific elements instead') +abstract class TypeDefiningElement implements Element, Annotatable { // TODO(brianwilkerson): Evaluate to see whether this type is actually needed // after converting clients to the new API. @@ -3979,11 +3986,8 @@ abstract class TypeDefiningElement /// The portion of a [TypeDefiningElement] contributed by a single declaration. /// /// Clients may not extend, implement or mix-in this class. -abstract class TypeDefiningFragment - implements - Fragment, - Annotatable // ignore:deprecated_member_use_from_same_package - { +@Deprecated('Check for specific fragments instead') +abstract class TypeDefiningFragment implements Fragment, Annotatable { @override TypeDefiningElement get element; @@ -4004,7 +4008,10 @@ abstract class TypeDefiningFragment /// A type parameter. /// /// Clients may not extend, implement or mix-in this class. -abstract class TypeParameterElement implements TypeDefiningElement { +abstract class TypeParameterElement + implements + TypeDefiningElement // ignore:deprecated_member_use_from_same_package + { @override TypeParameterElement get baseElement; @@ -4030,7 +4037,10 @@ abstract class TypeParameterElement implements TypeDefiningElement { /// declaration. /// /// Clients may not extend, implement or mix-in this class. -abstract class TypeParameterFragment implements TypeDefiningFragment { +abstract class TypeParameterFragment + implements + TypeDefiningFragment // ignore:deprecated_member_use_from_same_package + { @override TypeParameterElement get element; diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart index a69e8229efc..eac00878e1d 100644 --- a/pkg/analyzer/lib/src/dart/element/element.dart +++ b/pkg/analyzer/lib/src/dart/element/element.dart @@ -1133,7 +1133,10 @@ class DirectiveUriWithUnitImpl extends DirectiveUriWithRelativeUriImpl } /// The synthetic element representing the declaration of the type `dynamic`. -class DynamicElementImpl extends ElementImpl implements TypeDefiningElement { +class DynamicElementImpl extends ElementImpl + implements + TypeDefiningElement // ignore:deprecated_member_use_from_same_package + { /// The unique instance of this class. static final DynamicElementImpl instance = DynamicElementImpl._(); @@ -1210,7 +1213,10 @@ class DynamicElementImpl extends ElementImpl implements TypeDefiningElement { } /// The synthetic element representing the declaration of the type `dynamic`. -class DynamicFragmentImpl extends FragmentImpl implements TypeDefiningFragment { +class DynamicFragmentImpl extends FragmentImpl + implements + TypeDefiningFragment // ignore:deprecated_member_use_from_same_package + { /// The unique instance of this class. static final DynamicFragmentImpl instance = DynamicFragmentImpl._(); @@ -8943,7 +8949,10 @@ class MultiplyDefinedFragmentImpl extends FragmentImpl } /// The synthetic element representing the declaration of the type `Never`. -class NeverElementImpl extends ElementImpl implements TypeDefiningElement { +class NeverElementImpl extends ElementImpl + implements + TypeDefiningElement // ignore:deprecated_member_use_from_same_package + { /// The unique instance of this class. static final instance = NeverElementImpl._(); @@ -9027,7 +9036,10 @@ class NeverElementImpl extends ElementImpl implements TypeDefiningElement { } /// The synthetic element representing the declaration of the type `Never`. -class NeverFragmentImpl extends FragmentImpl implements TypeDefiningFragment { +class NeverFragmentImpl extends FragmentImpl + implements + TypeDefiningFragment // ignore:deprecated_member_use_from_same_package + { /// The unique instance of this class. static final instance = NeverFragmentImpl._(); diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml index 453dfa9b0f7..11d069d4428 100644 --- a/pkg/analyzer/pubspec.yaml +++ b/pkg/analyzer/pubspec.yaml @@ -1,5 +1,5 @@ name: analyzer -version: 8.2.0 +version: 8.3.0-dev description: >- This package provides a library that performs static analysis of Dart code. repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer diff --git a/pkg/analyzer_plugin/pubspec.yaml b/pkg/analyzer_plugin/pubspec.yaml index 104ce7cc1b5..c37ac7fb428 100644 --- a/pkg/analyzer_plugin/pubspec.yaml +++ b/pkg/analyzer_plugin/pubspec.yaml @@ -1,6 +1,6 @@ name: analyzer_plugin description: A framework and support code for building plugins for the analysis server. -version: 0.13.8 +version: 0.13.9-dev repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer_plugin environment: @@ -11,7 +11,7 @@ resolution: workspace dependencies: # See the release policy for managing this dependency at # pkg/analyzer/doc/implementation/releasing.md. - analyzer: 8.2.0 + analyzer: 8.3.0-dev collection: ^1.15.0 dart_style: ^3.0.0 pub_semver: ^2.1.0 diff --git a/pkg/analyzer_testing/pubspec.yaml b/pkg/analyzer_testing/pubspec.yaml index f7212d59ca8..62a410ceecc 100644 --- a/pkg/analyzer_testing/pubspec.yaml +++ b/pkg/analyzer_testing/pubspec.yaml @@ -11,7 +11,7 @@ resolution: workspace dependencies: # See the release policy for managing this dependency at # pkg/analyzer/doc/implementation/releasing.md. - analyzer: 8.2.0 + analyzer: 8.3.0-dev meta: ^1.10.0 path: ^1.9.0 test: ^1.25.0