OLD | NEW |
---|---|
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 library dev_compiler.src.checker.checker; | 5 library dev_compiler.src.checker.checker; |
6 | 6 |
7 import 'package:analyzer/analyzer.dart'; | 7 import 'package:analyzer/analyzer.dart'; |
8 import 'package:analyzer/src/generated/ast.dart'; | 8 import 'package:analyzer/src/generated/ast.dart'; |
9 import 'package:analyzer/src/generated/element.dart'; | 9 import 'package:analyzer/src/generated/element.dart'; |
10 import 'package:analyzer/src/generated/scanner.dart' show Token, TokenType; | 10 import 'package:analyzer/src/generated/scanner.dart' show Token, TokenType; |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
220 /// | 220 /// |
221 /// The [errorLocation] node indicates where errors are reported, see | 221 /// The [errorLocation] node indicates where errors are reported, see |
222 /// [_checkSingleOverride] for more details. | 222 /// [_checkSingleOverride] for more details. |
223 _checkIndividualOverridesFromClass( | 223 _checkIndividualOverridesFromClass( |
224 ClassDeclaration node, InterfaceType baseType, Set<String> seen) { | 224 ClassDeclaration node, InterfaceType baseType, Set<String> seen) { |
225 for (var member in node.members) { | 225 for (var member in node.members) { |
226 if (member is ConstructorDeclaration) continue; | 226 if (member is ConstructorDeclaration) continue; |
227 if (member is FieldDeclaration) { | 227 if (member is FieldDeclaration) { |
228 if (member.isStatic) continue; | 228 if (member.isStatic) continue; |
229 for (var variable in member.fields.variables) { | 229 for (var variable in member.fields.variables) { |
230 var name = variable.element.name; | 230 var element = variable.element as PropertyInducingElement; |
Jennifer Messerly
2015/06/01 21:52:10
random Q, do we always prefer this pattern over:
vsm
2015/06/01 22:44:19
I lean toward the rhs version - it makes it explic
Jennifer Messerly
2015/06/01 23:10:56
err, wouldn't we generate a cast in JS for both ca
| |
231 var name = element.name; | |
231 if (seen.contains(name)) continue; | 232 if (seen.contains(name)) continue; |
232 var getter = variable.element.getter; | 233 var getter = element.getter; |
233 var setter = variable.element.setter; | 234 var setter = element.setter; |
234 bool found = _checkSingleOverride(getter, baseType, variable, member); | 235 bool found = _checkSingleOverride(getter, baseType, variable, member); |
235 if (!variable.isFinal && | 236 if (!variable.isFinal && |
236 _checkSingleOverride(setter, baseType, variable, member)) { | 237 _checkSingleOverride(setter, baseType, variable, member)) { |
237 found = true; | 238 found = true; |
238 } | 239 } |
239 if (found) seen.add(name); | 240 if (found) seen.add(name); |
240 } | 241 } |
241 } else { | 242 } else if (member is MethodDeclaration) { |
242 assert(member is MethodDeclaration); | |
243 if (member.isStatic) continue; | 243 if (member.isStatic) continue; |
244 var method = member.element; | 244 var method = member.element; |
Jennifer Messerly
2015/06/01 21:52:10
instead of changing the if structure, maybe
var
vsm
2015/06/01 22:44:19
It's actually on isStatic, but done there.
| |
245 if (seen.contains(method.name)) continue; | 245 if (seen.contains(method.name)) continue; |
246 if (_checkSingleOverride(method, baseType, member, member)) { | 246 if (_checkSingleOverride(method, baseType, member, member)) { |
247 seen.add(method.name); | 247 seen.add(method.name); |
248 } | 248 } |
249 } else { | |
250 assert(false); | |
249 } | 251 } |
250 } | 252 } |
251 } | 253 } |
252 | 254 |
253 /// Checks that [element] correctly overrides its corresponding member in | 255 /// Checks that [element] correctly overrides its corresponding member in |
254 /// [type]. Returns `true` if an override was found, that is, if [element] has | 256 /// [type]. Returns `true` if an override was found, that is, if [element] has |
255 /// a corresponding member in [type] that it overrides. | 257 /// a corresponding member in [type] that it overrides. |
256 /// | 258 /// |
257 /// The [errorLocation] is a node where the error is reported. For example, a | 259 /// The [errorLocation] is a node where the error is reported. For example, a |
258 /// bad override of a method in a class with respect to its superclass is | 260 /// bad override of a method in a class with respect to its superclass is |
(...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
840 void _recordDynamicInvoke(AstNode node) { | 842 void _recordDynamicInvoke(AstNode node) { |
841 _reporter.log(new DynamicInvoke(_rules, node)); | 843 _reporter.log(new DynamicInvoke(_rules, node)); |
842 } | 844 } |
843 | 845 |
844 void _recordMessage(StaticInfo info) { | 846 void _recordMessage(StaticInfo info) { |
845 if (info == null) return; | 847 if (info == null) return; |
846 if (info.level >= logger.Level.SEVERE) _failure = true; | 848 if (info.level >= logger.Level.SEVERE) _failure = true; |
847 _reporter.log(info); | 849 _reporter.log(info); |
848 } | 850 } |
849 } | 851 } |
OLD | NEW |