Skip to content

Commit d87c88a

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate ElementResolver.
Change-Id: I69da244e10f913bebed2e14bf5b0e471da39ec0f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/408923 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent ce600d0 commit d87c88a

File tree

9 files changed

+128
-101
lines changed

9 files changed

+128
-101
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,18 @@ abstract class InterfaceType implements ParameterizedType {
439439
/// </blockquote>
440440
ConstructorElement? lookUpConstructor(String? name, LibraryElement library);
441441

442+
/// Return the element representing the constructor that results from looking
443+
/// up the constructor with the given [name] in this class with respect to the
444+
/// given [library], or `null` if the look up fails. The behavior of this
445+
/// method is defined by the Dart Language Specification in section 12.11.1:
446+
/// <blockquote>
447+
/// If <i>e</i> is of the form <b>new</b> <i>T.id()</i> then let <i>q<i> be
448+
/// the constructor <i>T.id</i>, otherwise let <i>q<i> be the constructor
449+
/// <i>T<i>. Otherwise, if <i>q</i> is not defined or not accessible, a
450+
/// NoSuchMethodException is thrown.
451+
/// </blockquote>
452+
ConstructorElement2? lookUpConstructor2(String? name, LibraryElement2 library);
453+
442454
/// Return the getter with the given [name].
443455
///
444456
/// If [concrete] is `true`, then the concrete implementation is returned,

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -325,13 +325,7 @@ final class AnnotationImpl extends AstNodeImpl implements Annotation {
325325
@experimental
326326
@override
327327
Element2? get element2 {
328-
var element = this.element;
329-
if (element case Fragment fragment) {
330-
return fragment.element;
331-
} else if (element case Element2 element) {
332-
return element;
333-
}
334-
return null;
328+
return element?.asElement2;
335329
}
336330

337331
@override
@@ -15105,6 +15099,10 @@ final class RedirectingConstructorInvocationImpl
1510515099
@override
1510615100
ConstructorElement2? get element => staticElement?.asElement2;
1510715101

15102+
set element(ConstructorElement2? value) {
15103+
staticElement = value?.asElement;
15104+
}
15105+
1510815106
@override
1510915107
Token get endToken => _argumentList.endToken;
1511015108

@@ -16660,6 +16658,10 @@ final class SuperConstructorInvocationImpl extends ConstructorInitializerImpl
1666016658
@override
1666116659
ConstructorElement2? get element => staticElement?.asElement2;
1666216660

16661+
set element(ConstructorElement2? value) {
16662+
staticElement = value?.asElement;
16663+
}
16664+
1666316665
@override
1666416666
Token get endToken => _argumentList.endToken;
1666516667

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

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1696,10 +1696,13 @@ class ConstructorElementImpl2 extends ExecutableElementImpl2
16961696
}
16971697

16981698
@override
1699-
ConstructorElement2? get redirectedConstructor2 =>
1700-
(firstFragment.redirectedConstructor?.declaration
1701-
as ConstructorElementImpl?)
1702-
?.element;
1699+
ConstructorElement2? get redirectedConstructor2 {
1700+
return firstFragment.redirectedConstructor?.asElement2;
1701+
}
1702+
1703+
set redirectedConstructor2(ConstructorElement2? value) {
1704+
firstFragment.redirectedConstructor = value?.asElement;
1705+
}
17031706

17041707
@override
17051708
InterfaceTypeImpl get returnType {
@@ -2322,6 +2325,10 @@ class ElementAnnotationImpl implements ElementAnnotation {
23222325
return element?.asElement2;
23232326
}
23242327

2328+
set element2(Element2? value) {
2329+
element = value?.asElement;
2330+
}
2331+
23252332
@override
23262333
bool get isAlwaysThrows => _isPackageMetaGetter(_alwaysThrowsVariableName);
23272334

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -987,6 +987,12 @@ class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
987987
return ConstructorMember.from(constructorElement, this);
988988
}
989989

990+
@override
991+
ConstructorElement2? lookUpConstructor2(
992+
String? constructorName, LibraryElement2 library) {
993+
return lookUpConstructor(constructorName, library.asElement)?.asElement2;
994+
}
995+
990996
@override
991997
PropertyAccessorElement? lookUpGetter2(
992998
String name,

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import 'package:analyzer/src/dart/element/type_system.dart';
2323
import 'package:analyzer/src/error/codes.dart';
2424
import 'package:analyzer/src/generated/inference_log.dart';
2525
import 'package:analyzer/src/generated/resolver.dart';
26+
import 'package:analyzer/src/utilities/extensions/element.dart';
2627

2728
Set<Object> _computeExplicitlyTypedParameterSet(
2829
FunctionExpression functionExpression) {
@@ -290,7 +291,7 @@ abstract class FullInvocationInferrer<Node extends AstNodeImpl>
290291
argumentList.correspondingStaticParameters =
291292
ResolverVisitor.resolveArgumentsToParameters(
292293
argumentList: argumentList,
293-
parameters: parameters,
294+
formalParameters: parameters.map((e) => e.asElement2).toList(),
294295
errorReporter: resolver.errorReporter,
295296
);
296297
}

0 commit comments

Comments
 (0)