Skip to content

Commit c4fcd14

Browse files
scheglovCommit Queue
authored andcommitted
DeCo. Deprecate Element.isSynthetic, migrate analyzer/ to more specific flags.
Change-Id: I4975083e7ad64b4ec790f49da70e2060e86722ea Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/465984 Reviewed-by: Samuel Rawlins <[email protected]> Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent ff5706e commit c4fcd14

File tree

15 files changed

+48
-54
lines changed

15 files changed

+48
-54
lines changed

pkg/analyzer/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
Use `isOriginDeclaration`, `isOriginGetterSetter`, `isOriginDeclaringFormalParameter`, `isOriginEnumValues` instead.
3030
* Deprecate `PropertyAccessorElement.isSynthetic`.
3131
Use `isOriginDeclaration`, `isOriginInterface`, `isOriginVariable` instead.
32+
* Deprecate `Element.isSynthetic`, use `isOriginXyz` properties instead.
3233

3334
## 9.0.0
3435
* Remove deprecated field `Diagnostic.data`.

pkg/analyzer/api.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3453,7 +3453,7 @@ package:analyzer/dart/element/element.dart:
34533453
id (getter: int)
34543454
isPrivate (getter: bool)
34553455
isPublic (getter: bool)
3456-
isSynthetic (getter: bool)
3456+
isSynthetic (getter: bool, deprecated)
34573457
kind (getter: ElementKind)
34583458
library (getter: LibraryElement?)
34593459
lookupName (getter: String?)
@@ -3611,7 +3611,7 @@ package:analyzer/dart/element/element.dart:
36113611
isAugmentation (getter: bool)
36123612
isGenerator (getter: bool)
36133613
isSynchronous (getter: bool)
3614-
isSynthetic (getter: bool)
3614+
isSynthetic (getter: bool, deprecated)
36153615
libraryFragment (getter: LibraryFragment)
36163616
nextFragment (getter: ExecutableFragment?)
36173617
previousFragment (getter: ExecutableFragment?)

pkg/analyzer/lib/dart/element/element.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,7 @@ abstract class Element {
507507
/// A synthetic element is an element that is not represented in the source
508508
/// code explicitly, but is implied by the source code, such as the default
509509
/// constructor for a class that does not explicitly define any constructors.
510+
@Deprecated('Use isOriginX instead')
510511
bool get isSynthetic;
511512

512513
/// The kind of this element.
@@ -1155,6 +1156,7 @@ abstract class ExecutableFragment implements FunctionTypedFragment {
11551156
/// A synthetic fragment is a fragment that is not represented in the source
11561157
/// code explicitly, but is implied by the source code, such as the default
11571158
/// constructor for a class that does not explicitly define any constructors.
1159+
@Deprecated('Use isOriginX instead')
11581160
bool get isSynthetic;
11591161

11601162
@override

pkg/analyzer/lib/src/dart/analysis/search.dart

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -342,15 +342,15 @@ class Search {
342342
var elements = <Element>[];
343343

344344
void addElement(Element element) {
345-
if (!element.isSynthetic && element.displayName == name) {
345+
if (element.displayName == name) {
346346
elements.add(element);
347347
}
348348
}
349349

350350
void addElements(InterfaceElement element) {
351-
element.getters.forEach(addElement);
352-
element.setters.forEach(addElement);
353-
element.fields.forEach(addElement);
351+
element.getters.where((e) => e.isOriginDeclaration).forEach(addElement);
352+
element.setters.where((e) => e.isOriginDeclaration).forEach(addElement);
353+
element.fields.where((e) => e.isOriginDeclaration).forEach(addElement);
354354
element.methods.forEach(addElement);
355355
}
356356

@@ -552,7 +552,7 @@ class Search {
552552
var elements = <Element>[];
553553

554554
void addElement(Element element) {
555-
if (!element.isSynthetic && regExp.hasMatch(element.displayName)) {
555+
if (regExp.hasMatch(element.displayName)) {
556556
elements.add(element);
557557
}
558558
}
@@ -562,15 +562,17 @@ class Search {
562562
var libraryResult = await _driver.getLibraryByUri(file.uriStr);
563563
if (libraryResult is LibraryElementResult) {
564564
var element = libraryResult.element;
565-
element.getters.forEach(addElement);
565+
element.getters.where((e) => e.isOriginDeclaration).forEach(addElement);
566566
element.classes.forEach(addElement);
567567
element.enums.forEach(addElement);
568568
element.extensions.forEach(addElement);
569569
element.extensionTypes.forEach(addElement);
570570
element.topLevelFunctions.forEach(addElement);
571571
element.mixins.forEach(addElement);
572-
element.setters.forEach(addElement);
573-
element.topLevelVariables.forEach(addElement);
572+
element.setters.where((e) => e.isOriginDeclaration).forEach(addElement);
573+
element.topLevelVariables
574+
.where((e) => e.isOriginDeclaration)
575+
.forEach(addElement);
574576
element.typeAliases.forEach(addElement);
575577
}
576578
}

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8828,6 +8828,11 @@ sealed class PropertyAccessorFragmentImpl extends ExecutableFragmentImpl
88288828
@override
88298829
PropertyAccessorElementImpl get element;
88308830

8831+
@Deprecated('Use isOriginX instead.')
8832+
@override
8833+
@trackedIncludedInId
8834+
bool get isSynthetic => super.isSynthetic;
8835+
88318836
@override
88328837
MetadataImpl get metadata {
88338838
_ensureReadResolution();
@@ -8839,11 +8844,8 @@ sealed class PropertyAccessorFragmentImpl extends ExecutableFragmentImpl
88398844
if (nameOffset case var nameOffset?) {
88408845
return nameOffset;
88418846
}
8842-
if (isSynthetic) {
8847+
if (isOriginVariable) {
88438848
var variable = element.variable;
8844-
if (variable.isSynthetic) {
8845-
return enclosingFragment.offset;
8846-
}
88478849
return variable._firstFragment.offset;
88488850
}
88498851
return firstTokenOffset!;
@@ -8916,16 +8918,20 @@ abstract class PropertyInducingElementImpl extends VariableElementImpl
89168918
@override
89178919
@trackedIndirectly
89188920
Element get nonSynthetic {
8919-
if (isSynthetic) {
8921+
if (isOriginDeclaration) {
8922+
return this;
8923+
} else if (this case FieldElementImpl(
8924+
isOriginDeclaringFormalParameter: true,
8925+
)) {
8926+
return this;
8927+
} else {
89208928
if (enclosingElement case EnumElementImpl enclosingElement) {
89218929
// TODO(scheglov): remove 'index'?
89228930
if (name == 'index' || name == 'values') {
89238931
return enclosingElement;
89248932
}
89258933
}
89268934
return (getter ?? setter)!;
8927-
} else {
8928-
return this;
89298935
}
89308936
}
89318937

pkg/analyzer/lib/src/dart/element/member.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ abstract class SubstitutedElementImpl implements Element {
179179
@override
180180
bool get isPublic => baseElement.isPublic;
181181

182+
@Deprecated('Use isOriginX instead')
182183
@override
183184
bool get isSynthetic => baseElement.isSynthetic;
184185

@@ -788,7 +789,7 @@ class SubstitutedGetterElementImpl
788789

789790
@override
790791
Element get nonSynthetic {
791-
if (isSynthetic) {
792+
if (isOriginVariable) {
792793
return variable.nonSynthetic;
793794
} else {
794795
return this;
@@ -992,7 +993,7 @@ class SubstitutedSetterElementImpl
992993

993994
@override
994995
Element get nonSynthetic {
995-
if (isSynthetic) {
996+
if (isOriginVariable) {
996997
return variable.nonSynthetic;
997998
} else {
998999
return this;

pkg/analyzer/lib/src/error/element_usage_detector.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class ElementUsageDetector<TagInfo extends Object> {
5353
return;
5454
}
5555
// Implicit getters/setters.
56-
if (element.isSynthetic && element is PropertyAccessorElement) {
56+
if (element is PropertyAccessorElement && element.isOriginVariable) {
5757
element = element.variable;
5858
}
5959
var tagInfo = elementUsageSet.getTagInfo(element);

pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -846,9 +846,6 @@ class UnusedLocalElementsVerifier extends RecursiveAstVisitor<void> {
846846
return true;
847847
}
848848
}
849-
if (element.isSynthetic) {
850-
return true;
851-
}
852849
if (element is FieldElement) {
853850
var getter = element.getter;
854851
if (getter == null) {
@@ -868,9 +865,6 @@ class UnusedLocalElementsVerifier extends RecursiveAstVisitor<void> {
868865
}
869866

870867
bool _isUsedElement(Element element) {
871-
if (element.isSynthetic) {
872-
return true;
873-
}
874868
if (element is LocalVariableElement ||
875869
element is LocalFunctionElement && !element.isStatic) {
876870
// local variable or function
@@ -941,9 +935,6 @@ class UnusedLocalElementsVerifier extends RecursiveAstVisitor<void> {
941935
if (_isPubliclyAccessible(element)) {
942936
return true;
943937
}
944-
if (element.isSynthetic) {
945-
return true;
946-
}
947938
if (_hasPragmaVmEntryPoint(element)) {
948939
return true;
949940
}

pkg/analyzer/lib/src/error/use_result_verifier.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class UseResultVerifier {
175175

176176
static ElementAnnotation? _getUseResultMetadata(Element element) {
177177
// Implicit getters/setters.
178-
if (element.isSynthetic && element is PropertyAccessorElement) {
178+
if (element is PropertyAccessorElement && element.isOriginVariable) {
179179
element = element.variable;
180180
}
181181

pkg/analyzer/lib/src/fine/manifest_item.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1077,7 +1077,9 @@ sealed class ManifestItem<E extends ElementImpl> {
10771077

10781078
@mustCallSuper
10791079
bool match(MatchContext context, E element) {
1080-
return flags.isSynthetic == element.isSynthetic &&
1080+
return
1081+
// ignore: deprecated_member_use_from_same_package
1082+
flags.isSynthetic == element.isSynthetic &&
10811083
metadata.match(context, element.effectiveMetadata);
10821084
}
10831085

@@ -2140,6 +2142,7 @@ extension type _ManifestItemFlags._(int _bits) {
21402142

21412143
factory _ManifestItemFlags.encode(ElementImpl element) {
21422144
var bits = 0;
2145+
// ignore: deprecated_member_use_from_same_package
21432146
if (element.isSynthetic) {
21442147
bits |= _maskFor(_ManifestItemFlag.isSynthetic);
21452148
}

0 commit comments

Comments
 (0)