Skip to content

Commit 9773f56

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Move 'redirectedConstructor' property into 'ConstructorElementImpl'.
Change-Id: I9e39d5ae78c14d184bbdb22fe979b5c419d78c62 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/436660 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent 42d796f commit 9773f56

File tree

6 files changed

+17
-64
lines changed

6 files changed

+17
-64
lines changed

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

Lines changed: 1 addition & 1 deletion
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 = 480;
113+
static const int DATA_VERSION = 481;
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/constant/evaluation.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -489,7 +489,7 @@ class ConstantEvaluationEngine {
489489
// let [evaluateInstanceCreationExpression] handle it specially.
490490
return null;
491491
}
492-
var redirectedConstructor = constructor.redirectedConstructor;
492+
var redirectedConstructor = constructor.asElement2.redirectedConstructor2;
493493
if (redirectedConstructor == null) {
494494
// This can happen if constructor is an external factory constructor.
495495
return null;
@@ -500,7 +500,7 @@ class ConstantEvaluationEngine {
500500
// [ErrorVerifier.checkForRedirectToNonConstConstructor()]).
501501
return null;
502502
}
503-
return redirectedConstructor;
503+
return redirectedConstructor.asElement as ConstructorElementMixin;
504504
}
505505

506506
static _EnumConstant? _enumConstant(VariableFragmentImpl element) {

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

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -757,6 +757,9 @@ class ConstructorElementImpl extends ExecutableElementImpl
757757
@override
758758
final ConstructorFragmentImpl firstFragment;
759759

760+
/// The constructor to which this constructor is redirecting.
761+
ConstructorElementMixin2? _redirectedConstructor;
762+
760763
/// The super-constructor which this constructor is invoking, or `null` if
761764
/// this constructor is not generative, or is redirecting, or the
762765
/// super-constructor is not resolved, or the enclosing class is `Object`.
@@ -852,11 +855,12 @@ class ConstructorElementImpl extends ExecutableElementImpl
852855

853856
@override
854857
ConstructorElementMixin2? get redirectedConstructor2 {
855-
return firstFragment.redirectedConstructor?.asElement2;
858+
_ensureReadResolution();
859+
return _redirectedConstructor;
856860
}
857861

858862
set redirectedConstructor2(ConstructorElementMixin2? value) {
859-
firstFragment.redirectedConstructor = value?.asElement;
863+
_redirectedConstructor = value;
860864
}
861865

862866
@override
@@ -914,8 +918,6 @@ mixin ConstructorElementMixin
914918
@override
915919
LibraryElementImpl get library2;
916920

917-
ConstructorElementMixin? get redirectedConstructor;
918-
919921
@override
920922
InterfaceTypeImpl get returnType;
921923
}
@@ -939,9 +941,6 @@ class ConstructorFragmentImpl extends ExecutableFragmentImpl
939941
implements ConstructorFragment {
940942
late final ConstructorElementImpl element;
941943

942-
/// The constructor to which this constructor is redirecting.
943-
ConstructorElementMixin? _redirectedConstructor;
944-
945944
/// The initializers for this constructor (used for evaluating constant
946945
/// instance creation expressions).
947946
List<ConstructorInitializer> _constantInitializers = const [];
@@ -1074,16 +1073,6 @@ class ConstructorFragmentImpl extends ExecutableFragmentImpl
10741073
@override
10751074
int get offset => isSynthetic ? enclosingElement3.offset : _nameOffset;
10761075

1077-
@override
1078-
ConstructorElementMixin? get redirectedConstructor {
1079-
_ensureReadResolution();
1080-
return _redirectedConstructor;
1081-
}
1082-
1083-
set redirectedConstructor(ConstructorElementMixin? redirectedConstructor) {
1084-
_redirectedConstructor = redirectedConstructor;
1085-
}
1086-
10871076
@override
10881077
InterfaceTypeImpl get returnType {
10891078
var result = _returnType;

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

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,10 @@ class ConstructorMember extends ExecutableMember
8787
@override
8888
String? get name3 => _element2.name3;
8989

90-
@override
91-
ConstructorElementMixin? get redirectedConstructor {
92-
var element = declaration.redirectedConstructor;
93-
return _redirect(element);
94-
}
95-
9690
@override
9791
ConstructorElementMixin2? get redirectedConstructor2 {
98-
return redirectedConstructor?.asElement2;
92+
var element = baseElement.redirectedConstructor2;
93+
return _redirect(element);
9994
}
10095

10196
@override
@@ -107,14 +102,9 @@ class ConstructorMember extends ExecutableMember
107102
@override
108103
Source get source => _declaration.source!;
109104

110-
ConstructorElementMixin? get superConstructor {
111-
var element = declaration.element.superConstructor2;
112-
return _redirect(element?.firstFragment as ConstructorElementMixin?);
113-
}
114-
115105
@override
116106
ConstructorElementMixin2? get superConstructor2 {
117-
return _redirect2(declaration.element.superConstructor2);
107+
return _redirect(declaration.element.superConstructor2);
118108
}
119109

120110
@override
@@ -130,28 +120,7 @@ class ConstructorMember extends ExecutableMember
130120
builder.writeConstructorElement(this);
131121
}
132122

133-
ConstructorElementMixin? _redirect(ConstructorElementMixin? element) {
134-
switch (element) {
135-
case null:
136-
return null;
137-
case ConstructorFragmentImpl():
138-
return element;
139-
case ConstructorMember():
140-
var memberMap = element.substitution.map;
141-
var map = <TypeParameterElement, DartType>{
142-
for (var MapEntry(:key, :value) in memberMap.entries)
143-
key: substitution.substituteType(value),
144-
};
145-
return ConstructorMember(
146-
declaration: element.declaration,
147-
substitution: Substitution.fromMap2(map),
148-
);
149-
default:
150-
throw UnimplementedError('(${element.runtimeType}) $element');
151-
}
152-
}
153-
154-
ConstructorElementMixin2? _redirect2(ConstructorElementMixin2? element) {
123+
ConstructorElementMixin2? _redirect(ConstructorElementMixin2? element) {
155124
switch (element) {
156125
case null:
157126
return null;

pkg/analyzer/lib/src/summary2/bundle_reader.dart

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,8 @@ class LibraryReader {
368368
var enclosingElement =
369369
element.enclosingElement as InstanceElementImpl;
370370
reader._addTypeParameters2(enclosingElement.typeParameters2);
371-
element.superConstructor2 = reader.readConstructorElementMixin2();
371+
element.superConstructor2 = reader.readConstructorElementMixin();
372+
element.redirectedConstructor2 = reader.readConstructorElementMixin();
372373
}),
373374
);
374375

@@ -411,7 +412,6 @@ class LibraryReader {
411412
);
412413
_readFragmentMetadata(fragment, reader);
413414
fragment.returnType = reader.readRequiredType();
414-
fragment.redirectedConstructor = reader.readConstructorElementMixin();
415415
fragment.constantInitializers = reader.readNodeList();
416416
});
417417

@@ -1568,12 +1568,7 @@ class ResolutionReader {
15681568
return _reader.readByte();
15691569
}
15701570

1571-
ConstructorElementMixin? readConstructorElementMixin() {
1572-
var element2 = readElement() as ConstructorElement?;
1573-
return element2?.asElement as ConstructorElementMixin?;
1574-
}
1575-
1576-
ConstructorElementMixin2? readConstructorElementMixin2() {
1571+
ConstructorElementMixin2? readConstructorElementMixin() {
15771572
return readElement() as ConstructorElementMixin2?;
15781573
}
15791574

pkg/analyzer/lib/src/summary2/bundle_writer.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ class BundleWriter {
202202
// TODO(scheglov): avoid cast
203203
_resolutionSink.withTypeParameters(element.typeParameters2.cast(), () {
204204
_resolutionSink.writeElement(element.superConstructor2);
205+
_resolutionSink.writeElement(element.redirectedConstructor2);
205206
// TODO(scheglov): formal parameters
206207
});
207208
});
@@ -218,7 +219,6 @@ class BundleWriter {
218219
_sink.writeList(fragment.formalParameters, _writeParameterElement);
219220
_resolutionSink._writeMetadata(fragment.metadata);
220221
_resolutionSink.writeType(fragment.returnType);
221-
_resolutionSink.writeElement(fragment.redirectedConstructor?.asElement2);
222222
_resolutionSink._writeNodeList(fragment.constantInitializers);
223223
});
224224
}

0 commit comments

Comments
 (0)