Skip to content

Commit 1da4e8d

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate SuperConstructorResolver.
Change-Id: Ifd6d712f10b0d97a20e92a0be2d411111aca2852 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/410562 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Phil Quitslund <[email protected]>
1 parent 7d45894 commit 1da4e8d

File tree

3 files changed

+33
-26
lines changed

3 files changed

+33
-26
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1718,6 +1718,10 @@ class ConstructorElementImpl2 extends ExecutableElementImpl2
17181718
(firstFragment.superConstructor?.declaration as ConstructorElementImpl?)
17191719
?.element;
17201720

1721+
set superConstructor2(ConstructorElement2? value) {
1722+
firstFragment.superConstructor = value?.asElement;
1723+
}
1724+
17211725
@override
17221726
T? accept2<T>(ElementVisitor2<T> visitor) {
17231727
return visitor.visitConstructorElement(this);

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import 'package:analyzer/dart/element/element.dart';
1212
import 'package:analyzer/dart/element/element2.dart';
1313
import 'package:analyzer/src/context/context.dart';
1414
import 'package:analyzer/src/dart/analysis/file_state.dart';
15-
import 'package:analyzer/src/dart/element/element.dart';
1615
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
1716
import 'package:analyzer/src/dart/element/name_union.dart';
1817
import 'package:analyzer/src/summary2/bundle_writer.dart';
@@ -52,7 +51,7 @@ class Linker {
5251
/// Libraries that are being linked.
5352
final Map<Uri, LibraryBuilder> builders = {};
5453

55-
final Map<ElementImpl, ast.AstNode> elementNodes = Map.identity();
54+
final Map<Object, ast.AstNode> elementNodes = Map.identity();
5655

5756
late InheritanceManager3 inheritance; // TODO(scheglov): cache it
5857

@@ -87,6 +86,12 @@ class Linker {
8786
return elementNodes[element.asElement];
8887
}
8988

89+
/// If the [fragment] is part of a library being linked, return the node
90+
/// from which it was created.
91+
ast.AstNode? getLinkingNode3(Fragment fragment) {
92+
return elementNodes[fragment];
93+
}
94+
9095
void link({
9196
required OperationPerformanceImpl performance,
9297
required List<LibraryFileKind> inputLibraries,

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

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
// ignore_for_file: analyzer_use_new_elements
6-
75
import 'package:analyzer/dart/ast/ast.dart';
8-
import 'package:analyzer/dart/element/element.dart';
96
import 'package:analyzer/src/dart/element/element.dart';
107
import 'package:analyzer/src/summary2/link.dart';
118

@@ -18,19 +15,18 @@ class SuperConstructorResolver {
1815

1916
void perform() {
2017
for (var builder in _linker.builders.values) {
21-
for (var unitElement in builder.element.units) {
22-
for (var classElement in unitElement.classes) {
23-
for (var constructorElement in classElement.constructors) {
24-
_constructor(classElement, constructorElement);
25-
}
18+
for (var classElement in builder.element.classes) {
19+
for (var constructorElement in classElement.constructors2) {
20+
_constructor(classElement, constructorElement);
2621
}
2722
}
2823
}
2924
}
3025

31-
void _constructor(ClassElement classElement, ConstructorElement element) {
32-
element as ConstructorElementImpl;
33-
26+
void _constructor(
27+
ClassElementImpl2 classElement,
28+
ConstructorElementImpl2 element,
29+
) {
3430
// Constructors of mixin applications are already configured.
3531
if (classElement.isMixinApplication) {
3632
return;
@@ -42,24 +38,26 @@ class SuperConstructorResolver {
4238
}
4339

4440
var invokesDefaultSuperConstructor = true;
45-
var node = _linker.getLinkingNode(element);
46-
if (node is ConstructorDeclaration) {
47-
for (var initializer in node.initializers) {
48-
if (initializer is RedirectingConstructorInvocation) {
49-
invokesDefaultSuperConstructor = false;
50-
} else if (initializer is SuperConstructorInvocation) {
51-
invokesDefaultSuperConstructor = false;
52-
var name = initializer.constructorName?.name ?? '';
53-
element.superConstructor = classElement.supertype?.constructors
54-
.where((element) => element.name == name)
55-
.firstOrNull;
41+
for (var fragment in element.fragments) {
42+
var node = _linker.getLinkingNode3(fragment);
43+
if (node is ConstructorDeclaration) {
44+
for (var initializer in node.initializers) {
45+
if (initializer is RedirectingConstructorInvocation) {
46+
invokesDefaultSuperConstructor = false;
47+
} else if (initializer is SuperConstructorInvocation) {
48+
invokesDefaultSuperConstructor = false;
49+
var name = initializer.constructorName?.name ?? 'new';
50+
element.superConstructor2 = classElement.supertype?.constructors2
51+
.where((element) => element.name3 == name)
52+
.firstOrNull;
53+
}
5654
}
5755
}
5856
}
5957

6058
if (invokesDefaultSuperConstructor) {
61-
element.superConstructor = classElement.supertype?.constructors
62-
.where((element) => element.name.isEmpty)
59+
element.superConstructor2 = classElement.supertype?.constructors2
60+
.where((element) => element.name3 == 'new')
6361
.firstOrNull;
6462
}
6563
}

0 commit comments

Comments
 (0)