Skip to content

Commit 499a34a

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate analyzer/lib/src/lint/constants.dart
Change-Id: If401d755abd43b5a9efe7575fe553f8cc37f57e3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/402903 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent d284a8d commit 499a34a

File tree

3 files changed

+28
-16
lines changed

3 files changed

+28
-16
lines changed

pkg/analyzer/analyzer_use_new_elements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ lib/src/generated/resolver.dart
104104
lib/src/generated/testing/element_factory.dart
105105
lib/src/generated/testing/test_type_provider.dart
106106
lib/src/hint/sdk_constraint_verifier.dart
107-
lib/src/lint/constants.dart
108107
lib/src/lint/linter.dart
109108
lib/src/services/top_level_declarations.dart
110109
lib/src/summary2/ast_binary_reader.dart

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1689,6 +1689,12 @@ class ConstructorElementImpl2 extends ExecutableElementImpl2
16891689
return visitor.visitConstructorElement(this);
16901690
}
16911691

1692+
/// Ensures that dependencies of this constructor, such as default values
1693+
/// of formal parameters, are evaluated.
1694+
void computeConstantDependencies() {
1695+
firstFragment.computeConstantDependencies();
1696+
}
1697+
16921698
@override
16931699
void visitChildren2<T>(ElementVisitor2<T> visitor) {
16941700
for (var child in children2) {

pkg/analyzer/lib/src/lint/constants.dart

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -88,27 +88,30 @@ extension on AstNode {
8888
/// Whether [ConstantVerifier] reports an error when computing the value of
8989
/// `this` as a constant.
9090
bool get hasConstantVerifierError {
91-
var unitElement = thisOrAncestorOfType<CompilationUnit>()?.declaredElement;
92-
if (unitElement == null) return false;
93-
var libraryElement = unitElement.library as LibraryElementImpl;
91+
var unitNode = thisOrAncestorOfType<CompilationUnit>();
92+
var unitFragment = unitNode?.declaredFragment;
93+
if (unitFragment == null) return false;
94+
95+
var libraryElement = unitFragment.element as LibraryElementImpl;
96+
var declaredVariables = libraryElement.session.declaredVariables;
9497

9598
var dependenciesFinder = ConstantExpressionsDependenciesFinder();
9699
accept(dependenciesFinder);
97100
computeConstants(
98-
declaredVariables: unitElement.session.declaredVariables,
101+
declaredVariables: declaredVariables,
99102
constants: dependenciesFinder.dependencies.toList(),
100103
featureSet: libraryElement.featureSet,
101104
configuration: ConstantEvaluationConfiguration(),
102105
);
103106

104107
var listener = _ConstantAnalysisErrorListener();
105-
var errorReporter = ErrorReporter(listener, unitElement.source);
108+
var errorReporter = ErrorReporter(listener, unitFragment.source);
106109

107110
accept(
108111
ConstantVerifier(
109112
errorReporter,
110113
libraryElement,
111-
unitElement.session.declaredVariables,
114+
declaredVariables,
112115
),
113116
);
114117
return listener.hasConstError;
@@ -156,31 +159,35 @@ extension ExpressionExtension on Expression {
156159
/// Returns a [LinterConstantEvaluationResult], containing both the computed
157160
/// constant value, and a list of errors that occurred during the computation.
158161
LinterConstantEvaluationResult computeConstantValue() {
159-
var unitElement = thisOrAncestorOfType<CompilationUnit>()?.declaredElement;
160-
if (unitElement == null) return LinterConstantEvaluationResult._(null, []);
161-
var libraryElement = unitElement.library as LibraryElementImpl;
162+
var unitNode = thisOrAncestorOfType<CompilationUnit>();
163+
var unitFragment = unitNode?.declaredFragment;
164+
if (unitFragment == null) {
165+
return LinterConstantEvaluationResult._(null, []);
166+
}
162167

163-
var errorListener = RecordingErrorListener();
168+
var libraryElement = unitFragment.element as LibraryElementImpl;
169+
var declaredVariables = libraryElement.session.declaredVariables;
164170

165171
var evaluationEngine = ConstantEvaluationEngine(
166-
declaredVariables: unitElement.session.declaredVariables,
172+
declaredVariables: declaredVariables,
167173
configuration: ConstantEvaluationConfiguration(),
168174
);
169175

170176
var dependencies = <ConstantEvaluationTarget>[];
171177
accept(ReferenceFinder(dependencies.add));
172178

173179
computeConstants(
174-
declaredVariables: unitElement.session.declaredVariables,
180+
declaredVariables: declaredVariables,
175181
constants: dependencies,
176182
featureSet: libraryElement.featureSet,
177183
configuration: ConstantEvaluationConfiguration(),
178184
);
179185

186+
var errorListener = RecordingErrorListener();
180187
var visitor = ConstantVisitor(
181188
evaluationEngine,
182189
libraryElement,
183-
ErrorReporter(errorListener, unitElement.source),
190+
ErrorReporter(errorListener, unitFragment.source),
184191
);
185192

186193
var constant = visitor.evaluateAndReportInvalidConstant(this);
@@ -189,11 +196,11 @@ extension ExpressionExtension on Expression {
189196
}
190197

191198
bool _canBeConstInstanceCreation(InstanceCreationExpressionImpl node) {
192-
var element = node.constructorName.staticElement;
199+
var element = node.constructorName.element;
193200
if (element == null || !element.isConst) return false;
194201

195202
// Ensure that dependencies (e.g. default parameter values) are computed.
196-
var implElement = element.declaration as ConstructorElementImpl;
203+
var implElement = element.baseElement as ConstructorElementImpl2;
197204
implElement.computeConstantDependencies();
198205

199206
// Verify that the evaluation of the constructor would not produce an

0 commit comments

Comments
 (0)