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

Side by Side Diff: lib/src/checker/resolver.dart

Issue 1398873002: remove "infer from overrides" option which is now obsolete (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 2 months 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 unified diff | Download patch
« no previous file with comments | « lib/src/checker/checker.dart ('k') | lib/src/compiler.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /// Encapsulates how to invoke the analyzer resolver and overrides how it 5 /// Encapsulates how to invoke the analyzer resolver and overrides how it
6 /// computes types on expressions to use our restricted set of types. 6 /// computes types on expressions to use our restricted set of types.
7 library dev_compiler.src.checker.resolver; 7 library dev_compiler.src.checker.resolver;
8 8
9 import 'package:analyzer/analyzer.dart'; 9 import 'package:analyzer/analyzer.dart';
10 import 'package:analyzer/src/generated/ast.dart'; 10 import 'package:analyzer/src/generated/ast.dart';
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 visit(ClassDeclaration cls) { 153 visit(ClassDeclaration cls) {
154 var element = cls.element; 154 var element = cls.element;
155 var type = element.type; 155 var type = element.type;
156 if (seen.contains(type)) return; 156 if (seen.contains(type)) return;
157 seen.add(type); 157 seen.add(type);
158 for (var supertype in element.allSupertypes) { 158 for (var supertype in element.allSupertypes) {
159 var supertypeClass = typeToDeclaration[supertype]; 159 var supertypeClass = typeToDeclaration[supertype];
160 if (supertypeClass != null) visit(supertypeClass); 160 if (supertypeClass != null) visit(supertypeClass);
161 } 161 }
162 162
163 if (_options.inferFromOverrides) { 163 // Infer field types from overrides first, otherwise from initializers.
164 // Infer field types from overrides first, otherwise from initializers. 164 var pending = new Set<VariableDeclaration>();
165 var pending = new Set<VariableDeclaration>(); 165 cls.members
166 cls.members 166 .where(_isInstanceField)
167 .where(_isInstanceField) 167 .forEach((f) => _inferFieldTypeFromOverride(f, pending));
168 .forEach((f) => _inferFieldTypeFromOverride(f, pending)); 168 if (pending.isNotEmpty) _inferVariableFromInitializer(pending);
169 if (pending.isNotEmpty) _inferVariableFromInitializer(pending);
170 169
171 // Infer return-types and param-types from overrides 170 // Infer return-types and param-types from overrides
172 cls.members 171 cls.members
173 .where((m) => m is MethodDeclaration && !m.isStatic) 172 .where((m) => m is MethodDeclaration && !m.isStatic)
174 .forEach(_inferMethodTypesFromOverride); 173 .forEach(_inferMethodTypesFromOverride);
175 } else {
176 _inferVariableFromInitializer(cls.members
177 .where(_isInstanceField)
178 .expand((f) => f.fields.variables));
179 }
180 } 174 }
181 classes.forEach(visit); 175 classes.forEach(visit);
182 } 176 }
183 177
184 void _reanalyzeVar(Map<Source, RestrictedResolverVisitor> visitors, 178 void _reanalyzeVar(Map<Source, RestrictedResolverVisitor> visitors,
185 VariableDeclaration variable) { 179 VariableDeclaration variable) {
186 if (variable.initializer == null) return; 180 if (variable.initializer == null) return;
187 var visitor = visitors[(variable.root as CompilationUnit).element.source]; 181 var visitor = visitors[(variable.root as CompilationUnit).element.source];
188 visitor.reanalyzeInitializer(variable); 182 visitor.reanalyzeInitializer(variable);
189 } 183 }
(...skipping 609 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 } 793 }
800 } 794 }
801 795
802 // Review note: no longer need to override visitFunctionExpression, this is 796 // Review note: no longer need to override visitFunctionExpression, this is
803 // handled by the analyzer internally. 797 // handled by the analyzer internally.
804 // TODO(vsm): in visitbinaryExpression: check computeStaticReturnType result? 798 // TODO(vsm): in visitbinaryExpression: check computeStaticReturnType result?
805 // TODO(vsm): in visitFunctionDeclaration: Should we ever use the expression 799 // TODO(vsm): in visitFunctionDeclaration: Should we ever use the expression
806 // type in a (...) => expr or just the written type? 800 // type in a (...) => expr or just the written type?
807 801
808 } 802 }
OLDNEW
« no previous file with comments | « lib/src/checker/checker.dart ('k') | lib/src/compiler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698