Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(642)

Unified Diff: pkg/analyzer/lib/src/generated/resolver.dart

Issue 1460213005: Propagate types of final/const top-level variables and fields. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: tweaks Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/lib/src/generated/resolver.dart
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index ad1cd606e01da266f2beca48b84da5c9a984955c..12108087d2fa817137f9ae9bf02f784788283375 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -9725,18 +9725,18 @@ class OverrideVerifier extends RecursiveAstVisitor<Object> {
*/
class PartialResolverVisitor extends ResolverVisitor {
/**
- * A flag indicating whether the resolver is being run in strong mode.
- */
- final bool strongMode;
-
- /**
* The static variables and fields that have an initializer. These are the
* variables that need to be re-resolved after static variables have their
* types inferred. A subset of these variables are those whose types should
- * be inferred. The list will be empty unless the resolver is being run in
- * strong mode.
+ * be inferred.
*/
- final List<VariableElement> variablesAndFields = <VariableElement>[];
+ final List<VariableElement> staticVariables = <VariableElement>[];
+
+ /**
+ * The static and instance variables and fields that have an initializer.
+ * These are the variables whose types might be propagated.
+ */
+ final List<VariableElement> propagableVariables = <VariableElement>[];
/**
* Initialize a newly created visitor to resolve the nodes in an AST node.
@@ -9760,8 +9760,7 @@ class PartialResolverVisitor extends ResolverVisitor {
{Scope nameScope,
InheritanceManager inheritanceManager,
StaticTypeAnalyzerFactory typeAnalyzerFactory})
- : strongMode = definingLibrary.context.analysisOptions.strongMode,
- super(definingLibrary, source, typeProvider, errorListener);
+ : super(definingLibrary, source, typeProvider, errorListener);
@override
Object visitBlockFunctionBody(BlockFunctionBody node) {
@@ -9781,8 +9780,9 @@ class PartialResolverVisitor extends ResolverVisitor {
@override
Object visitFieldDeclaration(FieldDeclaration node) {
- if (strongMode && node.isStatic) {
- _addVariables(node.fields.variables);
+ _addPropagableVariables(node.fields.variables);
+ if (node.isStatic) {
+ _addStaticVariables(node.fields.variables);
}
return super.visitFieldDeclaration(node);
}
@@ -9794,23 +9794,36 @@ class PartialResolverVisitor extends ResolverVisitor {
@override
Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
- if (strongMode) {
- _addVariables(node.variables.variables);
- }
+ _addPropagableVariables(node.variables.variables);
+ _addStaticVariables(node.variables.variables);
return super.visitTopLevelVariableDeclaration(node);
}
/**
+ * Add all of the [variables] with initializers to [propagableVariables].
+ */
+ void _addPropagableVariables(List<VariableDeclaration> variables) {
+ for (VariableDeclaration variable in variables) {
+ if (variable.initializer != null) {
+ VariableElement element = variable.element;
+ if (element.isConst || element.isFinal) {
+ propagableVariables.add(element);
+ }
+ }
+ }
+ }
+
+ /**
* Add all of the [variables] with initializers to the list of variables whose
* type can be inferred. Technically, we only infer the types of variables
* that do not have a static type, but all variables with initializers
* potentially need to be re-resolved after inference because they might
* refer to a field whose type was inferred.
*/
- void _addVariables(NodeList<VariableDeclaration> variables) {
+ void _addStaticVariables(List<VariableDeclaration> variables) {
for (VariableDeclaration variable in variables) {
if (variable.initializer != null) {
- variablesAndFields.add(variable.element);
+ staticVariables.add(variable.element);
}
}
}
« no previous file with comments | « pkg/analyzer/lib/src/generated/incremental_resolver.dart ('k') | pkg/analyzer/lib/src/plugin/engine_plugin.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698