Skip to content

Commit 62d40cc

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Elements. Separate getters and setters in implementation.
Change-Id: I3bc236c85bf8bd86bb9995253871523791d89b4a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/429221 Commit-Queue: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Paul Berry <paulberry@google.com>
1 parent e35e665 commit 62d40cc

File tree

8 files changed

+329
-253
lines changed

8 files changed

+329
-253
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ testFineAfterLibraryAnalyzerHook;
110110
// TODO(scheglov): Clean up the list of implicitly analyzed files.
111111
class AnalysisDriver {
112112
/// The version of data format, should be incremented on every format change.
113-
static const int DATA_VERSION = 458;
113+
static const int DATA_VERSION = 459;
114114

115115
/// The number of exception contexts allowed to write. Once this field is
116116
/// zero, we stop writing any new exception contexts in this process.

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

+80-77
Original file line numberDiff line numberDiff line change
@@ -415,12 +415,6 @@ class ClassFragmentImpl extends ClassOrMixinFragmentImpl
415415
/// given [offset] in the file that contains the declaration of this element.
416416
ClassFragmentImpl(super.name, super.offset);
417417

418-
@override
419-
set accessors(List<PropertyAccessorFragmentImpl> accessors) {
420-
assert(!isMixinApplication);
421-
super.accessors = accessors;
422-
}
423-
424418
@override
425419
set constructors(List<ConstructorFragmentImpl> constructors) {
426420
assert(!isMixinApplication);
@@ -439,6 +433,12 @@ class ClassFragmentImpl extends ClassOrMixinFragmentImpl
439433
super.fields = fields;
440434
}
441435

436+
@override
437+
set getters(List<GetterFragmentImpl> getters) {
438+
assert(!isMixinApplication);
439+
super.getters = getters;
440+
}
441+
442442
bool get hasExtendsClause {
443443
return hasModifier(Modifier.HAS_EXTENDS_CLAUSE);
444444
}
@@ -553,6 +553,12 @@ class ClassFragmentImpl extends ClassOrMixinFragmentImpl
553553
return super.previousFragment as ClassFragmentImpl?;
554554
}
555555

556+
@override
557+
set setters(List<SetterFragmentImpl> setters) {
558+
assert(!isMixinApplication);
559+
super.setters = setters;
560+
}
561+
556562
@override
557563
void appendTo(ElementDisplayStringBuilder builder) {
558564
builder.writeClassElement(this);
@@ -2753,9 +2759,10 @@ class ExtensionFragmentImpl extends InstanceFragmentImpl
27532759

27542760
@override
27552761
List<Fragment> get children3 => [
2756-
...accessors,
27572762
...fields,
2763+
...getters,
27582764
...methods,
2765+
...setters,
27592766
...typeParameters,
27602767
];
27612768

@@ -4513,11 +4520,7 @@ abstract class InstanceElementImpl2 extends ElementImpl2
45134520
@override
45144521
List<GetterElementImpl> get getters {
45154522
_readMembers();
4516-
return firstFragment.accessors
4517-
.where((e) => e.isGetter)
4518-
.map((e) => e.asElement2 as GetterElementImpl)
4519-
.nonNulls
4520-
.toList();
4523+
return firstFragment.getters.map((e) => e.element).toList();
45214524
}
45224525

45234526
@Deprecated('Use getters instead')
@@ -4569,11 +4572,7 @@ abstract class InstanceElementImpl2 extends ElementImpl2
45694572
@override
45704573
List<SetterElementImpl> get setters {
45714574
_readMembers();
4572-
return firstFragment.accessors
4573-
.where((e) => e.isSetter)
4574-
.map((e) => e.asElement2 as SetterElementImpl?)
4575-
.nonNulls
4576-
.toList();
4575+
return firstFragment.setters.map((e) => e.element).toList();
45774576
}
45784577

45794578
@Deprecated('Use setters instead')
@@ -4847,29 +4846,14 @@ abstract class InstanceFragmentImpl extends _ExistingElementImpl
48474846
InstanceFragmentImpl? nextFragment;
48484847

48494848
List<FieldFragmentImpl> _fields = _Sentinel.fieldElement;
4850-
4851-
List<PropertyAccessorFragmentImpl> _accessors =
4852-
_Sentinel.propertyAccessorElement;
4853-
4849+
List<GetterFragmentImpl> _getters = _Sentinel.getterElement;
4850+
List<SetterFragmentImpl> _setters = _Sentinel.setterElement;
48544851
List<MethodFragmentImpl> _methods = _Sentinel.methodElement;
48554852

48564853
InstanceFragmentImpl(super.name, super.nameOffset);
48574854

4858-
/// The declared accessors (getters and setters).
48594855
List<PropertyAccessorFragmentImpl> get accessors {
4860-
if (!identical(_accessors, _Sentinel.propertyAccessorElement)) {
4861-
return _accessors;
4862-
}
4863-
4864-
linkedData?.readMembers(this);
4865-
return _accessors;
4866-
}
4867-
4868-
set accessors(List<PropertyAccessorFragmentImpl> accessors) {
4869-
for (var accessor in accessors) {
4870-
accessor.enclosingElement3 = this;
4871-
}
4872-
_accessors = accessors;
4856+
return [...getters, ...setters];
48734857
}
48744858

48754859
@override
@@ -4905,8 +4889,21 @@ abstract class InstanceFragmentImpl extends _ExistingElementImpl
49054889
List<FieldFragment> get fields2 => fields.cast<FieldFragment>();
49064890

49074891
@override
4908-
List<GetterFragmentImpl> get getters =>
4909-
accessors.whereType<GetterFragmentImpl>().toList();
4892+
List<GetterFragmentImpl> get getters {
4893+
if (!identical(_getters, _Sentinel.getterElement)) {
4894+
return _getters;
4895+
}
4896+
4897+
linkedData?.readMembers(this);
4898+
return _getters;
4899+
}
4900+
4901+
set getters(List<GetterFragmentImpl> getters) {
4902+
for (var getter in getters) {
4903+
getter.enclosingElement3 = this;
4904+
}
4905+
_getters = getters;
4906+
}
49104907

49114908
@override
49124909
List<ElementAnnotationImpl> get metadata {
@@ -4939,8 +4936,21 @@ abstract class InstanceFragmentImpl extends _ExistingElementImpl
49394936
int get offset => _nameOffset;
49404937

49414938
@override
4942-
List<SetterFragmentImpl> get setters =>
4943-
accessors.whereType<SetterFragmentImpl>().toList();
4939+
List<SetterFragmentImpl> get setters {
4940+
if (!identical(_setters, _Sentinel.setterElement)) {
4941+
return _setters;
4942+
}
4943+
4944+
linkedData?.readMembers(this);
4945+
return _setters;
4946+
}
4947+
4948+
set setters(List<SetterFragmentImpl> setters) {
4949+
for (var setter in setters) {
4950+
setter.enclosingElement3 = this;
4951+
}
4952+
_setters = setters;
4953+
}
49444954

49454955
void setLinkedData(Reference reference, ElementLinkedData linkedData) {
49464956
this.reference = reference;
@@ -5301,10 +5311,11 @@ abstract class InterfaceFragmentImpl extends InstanceFragmentImpl
53015311

53025312
@override
53035313
List<Fragment> get children3 => [
5304-
...accessors,
5305-
...fields,
53065314
...constructors,
5315+
...fields,
5316+
...getters,
53075317
...methods,
5318+
...setters,
53085319
...typeParameters,
53095320
];
53105321

@@ -5903,11 +5914,7 @@ class LibraryElementImpl extends ElementImpl2 implements LibraryElement {
59035914
List<GetterElementImpl> get getters {
59045915
var declarations = <GetterElementImpl>{};
59055916
for (var unit in units) {
5906-
declarations.addAll(
5907-
unit._accessors
5908-
.where((accessor) => accessor.isGetter)
5909-
.map((accessor) => accessor.element as GetterElementImpl),
5910-
);
5917+
declarations.addAll(unit.getters.map((fragment) => fragment.element));
59115918
}
59125919
return declarations.toList();
59135920
}
@@ -5990,11 +5997,7 @@ class LibraryElementImpl extends ElementImpl2 implements LibraryElement {
59905997
List<SetterElementImpl> get setters {
59915998
var declarations = <SetterElementImpl>{};
59925999
for (var unit in units) {
5993-
declarations.addAll(
5994-
unit._accessors
5995-
.where((accessor) => accessor.isSetter)
5996-
.map((accessor) => accessor.element as SetterElementImpl),
5997-
);
6000+
declarations.addAll(unit.setters.map((fragment) => fragment.element));
59986001
}
59996002
return declarations.toList();
60006003
}
@@ -6231,9 +6234,11 @@ class LibraryFragmentImpl extends _ExistingElementImpl
62316234
/// The parts included by this unit.
62326235
List<PartIncludeImpl> _parts = const <PartIncludeImpl>[];
62336236

6234-
/// A list containing all of the top-level accessors (getters and setters)
6235-
/// contained in this compilation unit.
6236-
List<PropertyAccessorFragmentImpl> _accessors = const [];
6237+
/// All top-level getters in this compilation unit.
6238+
List<GetterFragmentImpl> _getters = _Sentinel.getterElement;
6239+
6240+
/// All top-level setters in this compilation unit.
6241+
List<SetterFragmentImpl> _setters = _Sentinel.setterElement;
62376242

62386243
List<ClassFragmentImpl> _classes = const [];
62396244

@@ -6278,28 +6283,20 @@ class LibraryFragmentImpl extends _ExistingElementImpl
62786283
}
62796284

62806285
List<PropertyAccessorFragmentImpl> get accessors {
6281-
return _accessors;
6282-
}
6283-
6284-
/// Set the top-level accessors (getters and setters) contained in this
6285-
/// compilation unit to the given [accessors].
6286-
set accessors(List<PropertyAccessorFragmentImpl> accessors) {
6287-
for (var accessor in accessors) {
6288-
accessor.enclosingElement3 = this;
6289-
}
6290-
_accessors = accessors;
6286+
return [...getters, ...setters];
62916287
}
62926288

62936289
@override
62946290
List<Fragment> get children3 {
62956291
return [
6296-
...accessors,
62976292
...classes,
62986293
...enums,
62996294
...extensions,
63006295
...extensionTypes,
63016296
...functions,
6297+
...getters,
63026298
...mixins,
6299+
...setters,
63036300
...typeAliases,
63046301
...topLevelVariables,
63056302
];
@@ -6403,11 +6400,14 @@ class LibraryFragmentImpl extends _ExistingElementImpl
64036400
functions.cast<TopLevelFunctionFragment>();
64046401

64056402
@override
6406-
List<GetterFragment> get getters =>
6407-
accessors
6408-
.where((element) => element.isGetter)
6409-
.cast<GetterFragment>()
6410-
.toList();
6403+
List<GetterFragmentImpl> get getters => _getters;
6404+
6405+
set getters(List<GetterFragmentImpl> getters) {
6406+
for (var getter in getters) {
6407+
getter.enclosingElement3 = this;
6408+
}
6409+
_getters = getters;
6410+
}
64116411

64126412
@override
64136413
int get hashCode => source.hashCode;
@@ -6562,11 +6562,14 @@ class LibraryFragmentImpl extends _ExistingElementImpl
65626562
AnalysisSession get session => library.session;
65636563

65646564
@override
6565-
List<SetterFragment> get setters =>
6566-
accessors
6567-
.where((element) => element.isSetter)
6568-
.cast<SetterFragment>()
6569-
.toList();
6565+
List<SetterFragmentImpl> get setters => _setters;
6566+
6567+
set setters(List<SetterFragmentImpl> setters) {
6568+
for (var setter in setters) {
6569+
setter.enclosingElement3 = this;
6570+
}
6571+
_setters = setters;
6572+
}
65706573

65716574
List<TopLevelVariableFragmentImpl> get topLevelVariables {
65726575
return _variables;
@@ -10667,11 +10670,11 @@ class _Sentinel {
1066710670
static final List<ConstructorFragmentImpl> constructorElement =
1066810671
List.unmodifiable([]);
1066910672
static final List<FieldFragmentImpl> fieldElement = List.unmodifiable([]);
10673+
static final List<GetterFragmentImpl> getterElement = List.unmodifiable([]);
1067010674
static final List<LibraryExportImpl> libraryExport = List.unmodifiable([]);
1067110675
static final List<LibraryImportImpl> libraryImport = List.unmodifiable([]);
1067210676
static final List<MethodFragmentImpl> methodElement = List.unmodifiable([]);
10673-
static final List<PropertyAccessorFragmentImpl> propertyAccessorElement =
10674-
List.unmodifiable([]);
10677+
static final List<SetterFragmentImpl> setterElement = List.unmodifiable([]);
1067510678
}
1067610679

1067710680
extension on Fragment {

pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart

+15-8
Original file line numberDiff line numberDiff line change
@@ -705,10 +705,13 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
705705

706706
ExecutableFragmentImpl fragment;
707707
if (_elementWalker != null) {
708-
fragment =
709-
node.isGetter || node.isSetter
710-
? _elementWalker!.getAccessor()
711-
: _elementWalker!.getFunction();
708+
if (node.isGetter) {
709+
fragment = _elementWalker!.getGetter();
710+
} else if (node.isSetter) {
711+
fragment = _elementWalker!.getSetter();
712+
} else {
713+
fragment = _elementWalker!.getFunction();
714+
}
712715
node.declaredFragment = fragment;
713716
expression.declaredFragment = fragment;
714717
} else {
@@ -1045,10 +1048,14 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
10451048

10461049
@override
10471050
void visitMethodDeclaration(covariant MethodDeclarationImpl node) {
1048-
var fragment =
1049-
node.isGetter || node.isSetter
1050-
? _elementWalker!.getAccessor()
1051-
: _elementWalker!.getFunction();
1051+
ExecutableFragmentImpl fragment;
1052+
if (node.isGetter) {
1053+
fragment = _elementWalker!.getGetter();
1054+
} else if (node.isSetter) {
1055+
fragment = _elementWalker!.getSetter();
1056+
} else {
1057+
fragment = _elementWalker!.getFunction();
1058+
}
10521059
node.declaredFragment = fragment;
10531060

10541061
_setOrCreateMetadataElements(fragment, node.metadata);

0 commit comments

Comments
 (0)