Skip to content

Commit f287cd2

Browse files
committed
Elements. Migrate VariableDeclarationResolver.
Change-Id: I4b28ec4a03bb6e0591c12d0c262fec9bedf0ecd9 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/406688 Reviewed-by: Phil Quitslund <[email protected]>
1 parent c7fc65a commit f287cd2

File tree

4 files changed

+26
-19
lines changed

4 files changed

+26
-19
lines changed

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18389,11 +18389,8 @@ final class VariableDeclarationImpl extends DeclarationImpl
1838918389

1839018390
@experimental
1839118391
@override
18392-
VariableFragment? get declaredFragment {
18393-
if (declaredElement case VariableFragment fragment) {
18394-
return fragment;
18395-
}
18396-
return null;
18392+
VariableElementImpl? get declaredFragment {
18393+
return declaredElement;
1839718394
}
1839818395

1839918396
/// This overridden implementation of [documentationComment] looks in the

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7831,7 +7831,7 @@ class LocalVariableElementImpl extends NonParameterVariableElementImpl
78317831
List<Fragment> get children3 => const [];
78327832

78337833
@override
7834-
LocalVariableElement2 get element => _element2;
7834+
LocalVariableElementImpl2 get element => _element2;
78357835

78367836
@override
78377837
Fragment get enclosingFragment => enclosingElement3 as Fragment;
@@ -9605,6 +9605,9 @@ class ParameterElementImpl_ofImplicitSetter extends ParameterElementImpl {
96059605
/// [ParameterElement].
96069606
mixin ParameterElementMixin
96079607
implements ParameterElement, VariableElementOrMember {
9608+
@override
9609+
FormalParameterElementImpl get element;
9610+
96089611
@override
96099612
bool get isNamed => parameterKind.isNamed;
96109613

@@ -10556,6 +10559,11 @@ abstract class PropertyInducingElementImpl2 extends VariableElementImpl2
1055610559
}
1055710560
}
1055810561

10562+
bool get shouldUseTypeForInitializerInference {
10563+
return (firstFragment as PropertyInducingElementImpl)
10564+
.shouldUseTypeForInitializerInference;
10565+
}
10566+
1055910567
List<PropertyInducingElementImpl> get _fragments;
1056010568
}
1056110569

@@ -11706,7 +11714,7 @@ abstract class VariableElement2OrMember implements VariableElement2 {
1170611714

1170711715
/// A concrete implementation of a [VariableElement].
1170811716
abstract class VariableElementImpl extends ElementImpl
11709-
implements VariableElementOrMember {
11717+
implements VariableElementOrMember, VariableFragment {
1171011718
/// The type of this variable.
1171111719
TypeImpl? _type;
1171211720

@@ -11729,6 +11737,9 @@ abstract class VariableElementImpl extends ElementImpl
1172911737
@override
1173011738
String get displayName => name;
1173111739

11740+
@override
11741+
VariableElementImpl2 get element;
11742+
1173211743
/// Return the result of evaluating this variable's initializer as a
1173311744
/// compile-time constant expression, or `null` if this variable is not a
1173411745
/// 'const' variable, if it does not have an initializer, or if the

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,14 +1212,14 @@ class ParameterMember extends VariableMember
12121212
children.map((fragment) => fragment.asElement2).nonNulls.toList();
12131213

12141214
@override
1215-
ParameterElement get declaration => super.declaration as ParameterElement;
1215+
ParameterElementImpl get declaration =>
1216+
super.declaration as ParameterElementImpl;
12161217

12171218
@override
12181219
String? get defaultValueCode => declaration.defaultValueCode;
12191220

12201221
@override
1221-
// TODO(scheglov): we lose types
1222-
FormalParameterElement get element => declaration.element;
1222+
FormalParameterElementImpl get element => declaration.element;
12231223

12241224
@override
12251225
Element2? get enclosingElement2 => _element2.enclosingElement2;

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

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
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:_fe_analyzer_shared/src/types/shared_type.dart';
8-
import 'package:analyzer/dart/element/element.dart';
6+
import 'package:analyzer/dart/element/element2.dart';
97
import 'package:analyzer/src/dart/ast/ast.dart';
108
import 'package:analyzer/src/dart/ast/extensions.dart';
119
import 'package:analyzer/src/dart/element/element.dart';
@@ -40,17 +38,17 @@ class VariableDeclarationResolver {
4038
return;
4139
}
4240

43-
var element = node.declaredElement!;
41+
var element = node.declaredFragment!.element;
4442
var isTopLevel =
45-
element is FieldElement || element is TopLevelVariableElement;
43+
element is FieldElement2 || element is TopLevelVariableElement2;
4644

4745
if (isTopLevel) {
4846
_resolver.flowAnalysis.bodyOrInitializer_enter(node, null);
4947
} else if (element.isLate) {
5048
_resolver.flowAnalysis.flow?.lateInitializer_begin(node);
5149
}
5250

53-
var contextType = element is! PropertyInducingElementImpl ||
51+
var contextType = element is! PropertyInducingElementImpl2 ||
5452
element.shouldUseTypeForInitializerInference
5553
? element.type
5654
: UnknownInferredType.instance;
@@ -60,7 +58,7 @@ class VariableDeclarationResolver {
6058
_resolver.flowAnalysis.flow?.whyNotPromoted(initializer);
6159

6260
var initializerType = initializer.typeOrThrow;
63-
if (parent.type == null && element is LocalVariableElementImpl) {
61+
if (parent.type == null && element is LocalVariableElementImpl2) {
6462
element.type = _resolver
6563
.variableTypeFromInitializerType(SharedTypeView(initializerType))
6664
.unwrapTypeView();
@@ -75,8 +73,9 @@ class VariableDeclarationResolver {
7573

7674
// Initializers of top-level variables and fields are already included
7775
// into elements during linking.
78-
if (element is ConstLocalVariableElementImpl) {
79-
element.constantInitializer = initializer;
76+
if (element is LocalVariableElementImpl2 && element.isConst) {
77+
var fragment = element.firstFragment as ConstLocalVariableElementImpl;
78+
fragment.constantInitializer = initializer;
8079
}
8180

8281
_resolver.checkForAssignableExpressionAtType(

0 commit comments

Comments
 (0)