| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 analyzer.src.generated.error_verifier; | 5 library analyzer.src.generated.error_verifier; |
| 6 | 6 |
| 7 import 'dart:collection'; | 7 import 'dart:collection'; |
| 8 import "dart:math" as math; | 8 import "dart:math" as math; |
| 9 | 9 |
| 10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 */ | 289 */ |
| 290 List<InterfaceType> _DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT; | 290 List<InterfaceType> _DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT; |
| 291 | 291 |
| 292 /** | 292 /** |
| 293 * If `true`, mixins are allowed to inherit from types other than Object, and | 293 * If `true`, mixins are allowed to inherit from types other than Object, and |
| 294 * are allowed to reference `super`. | 294 * are allowed to reference `super`. |
| 295 */ | 295 */ |
| 296 final bool enableSuperMixins; | 296 final bool enableSuperMixins; |
| 297 | 297 |
| 298 /** | 298 /** |
| 299 * If `true`, asserts are allowed to take a second argument representing the | |
| 300 * assertion failure message (see DEP 37). | |
| 301 */ | |
| 302 final bool enableAssertMessage; | |
| 303 | |
| 304 /** | |
| 305 * Initialize a newly created error verifier. | 299 * Initialize a newly created error verifier. |
| 306 */ | 300 */ |
| 307 ErrorVerifier( | 301 ErrorVerifier(this._errorReporter, this._currentLibrary, this._typeProvider, |
| 308 this._errorReporter, | 302 this._inheritanceManager, this.enableSuperMixins) { |
| 309 this._currentLibrary, | |
| 310 this._typeProvider, | |
| 311 this._inheritanceManager, | |
| 312 this.enableSuperMixins, | |
| 313 this.enableAssertMessage) { | |
| 314 this._isInSystemLibrary = _currentLibrary.source.isInSystemLibrary; | 303 this._isInSystemLibrary = _currentLibrary.source.isInSystemLibrary; |
| 315 this._hasExtUri = _currentLibrary.hasExtUri; | 304 this._hasExtUri = _currentLibrary.hasExtUri; |
| 316 _isEnclosingConstructorConst = false; | 305 _isEnclosingConstructorConst = false; |
| 317 _isInCatchClause = false; | 306 _isInCatchClause = false; |
| 318 _isInStaticVariableDeclaration = false; | 307 _isInStaticVariableDeclaration = false; |
| 319 _isInInstanceVariableDeclaration = false; | 308 _isInInstanceVariableDeclaration = false; |
| 320 _isInInstanceVariableInitializer = false; | 309 _isInInstanceVariableInitializer = false; |
| 321 _isInConstructorInitializer = false; | 310 _isInConstructorInitializer = false; |
| 322 _isInStaticMethod = false; | 311 _isInStaticMethod = false; |
| 323 _boolType = _typeProvider.boolType; | 312 _boolType = _typeProvider.boolType; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 342 | 331 |
| 343 @override | 332 @override |
| 344 Object visitAsExpression(AsExpression node) { | 333 Object visitAsExpression(AsExpression node) { |
| 345 _checkForTypeAnnotationDeferredClass(node.type); | 334 _checkForTypeAnnotationDeferredClass(node.type); |
| 346 return super.visitAsExpression(node); | 335 return super.visitAsExpression(node); |
| 347 } | 336 } |
| 348 | 337 |
| 349 @override | 338 @override |
| 350 Object visitAssertInitializer(AssertInitializer node) { | 339 Object visitAssertInitializer(AssertInitializer node) { |
| 351 _checkForNonBoolExpression(node); | 340 _checkForNonBoolExpression(node); |
| 352 _checkAssertMessage(node); | |
| 353 return super.visitAssertInitializer(node); | 341 return super.visitAssertInitializer(node); |
| 354 } | 342 } |
| 355 | 343 |
| 356 @override | 344 @override |
| 357 Object visitAssertStatement(AssertStatement node) { | 345 Object visitAssertStatement(AssertStatement node) { |
| 358 _checkForNonBoolExpression(node); | 346 _checkForNonBoolExpression(node); |
| 359 _checkAssertMessage(node); | |
| 360 return super.visitAssertStatement(node); | 347 return super.visitAssertStatement(node); |
| 361 } | 348 } |
| 362 | 349 |
| 363 @override | 350 @override |
| 364 Object visitAssignmentExpression(AssignmentExpression node) { | 351 Object visitAssignmentExpression(AssignmentExpression node) { |
| 365 TokenType operatorType = node.operator.type; | 352 TokenType operatorType = node.operator.type; |
| 366 Expression lhs = node.leftHandSide; | 353 Expression lhs = node.leftHandSide; |
| 367 Expression rhs = node.rightHandSide; | 354 Expression rhs = node.rightHandSide; |
| 368 if (operatorType == TokenType.EQ || | 355 if (operatorType == TokenType.EQ || |
| 369 operatorType == TokenType.QUESTION_QUESTION_EQ) { | 356 operatorType == TokenType.QUESTION_QUESTION_EQ) { |
| (...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1295 errorCode = CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR; | 1282 errorCode = CompileTimeErrorCode.YIELD_EACH_IN_NON_GENERATOR; |
| 1296 } else { | 1283 } else { |
| 1297 errorCode = CompileTimeErrorCode.YIELD_IN_NON_GENERATOR; | 1284 errorCode = CompileTimeErrorCode.YIELD_IN_NON_GENERATOR; |
| 1298 } | 1285 } |
| 1299 _errorReporter.reportErrorForNode(errorCode, node); | 1286 _errorReporter.reportErrorForNode(errorCode, node); |
| 1300 } | 1287 } |
| 1301 return super.visitYieldStatement(node); | 1288 return super.visitYieldStatement(node); |
| 1302 } | 1289 } |
| 1303 | 1290 |
| 1304 /** | 1291 /** |
| 1305 * If the given [assertion] specifies a message, verify that support | |
| 1306 * for assertions with messages is enabled. | |
| 1307 */ | |
| 1308 void _checkAssertMessage(Assertion assertion) { | |
| 1309 Expression expression = assertion.message; | |
| 1310 if (expression != null && !enableAssertMessage) { | |
| 1311 _errorReporter.reportErrorForNode( | |
| 1312 CompileTimeErrorCode.EXTRA_ARGUMENT_TO_ASSERT, expression); | |
| 1313 } | |
| 1314 } | |
| 1315 | |
| 1316 /** | |
| 1317 * Given a list of [directives] that have the same prefix, generate an error | 1292 * Given a list of [directives] that have the same prefix, generate an error |
| 1318 * if there is more than one import and any of those imports is deferred. | 1293 * if there is more than one import and any of those imports is deferred. |
| 1319 * | 1294 * |
| 1320 * See [CompileTimeErrorCode.SHARED_DEFERRED_PREFIX]. | 1295 * See [CompileTimeErrorCode.SHARED_DEFERRED_PREFIX]. |
| 1321 */ | 1296 */ |
| 1322 void _checkDeferredPrefixCollision(List<ImportDirective> directives) { | 1297 void _checkDeferredPrefixCollision(List<ImportDirective> directives) { |
| 1323 int count = directives.length; | 1298 int count = directives.length; |
| 1324 if (count > 1) { | 1299 if (count > 1) { |
| 1325 for (int i = 0; i < count; i++) { | 1300 for (int i = 0; i < count; i++) { |
| 1326 Token deferredToken = directives[i].deferredKeyword; | 1301 Token deferredToken = directives[i].deferredKeyword; |
| (...skipping 5645 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6972 class _InvocationCollector extends RecursiveAstVisitor { | 6947 class _InvocationCollector extends RecursiveAstVisitor { |
| 6973 final List<String> superCalls = <String>[]; | 6948 final List<String> superCalls = <String>[]; |
| 6974 | 6949 |
| 6975 @override | 6950 @override |
| 6976 visitMethodInvocation(MethodInvocation node) { | 6951 visitMethodInvocation(MethodInvocation node) { |
| 6977 if (node.target is SuperExpression) { | 6952 if (node.target is SuperExpression) { |
| 6978 superCalls.add(node.methodName.name); | 6953 superCalls.add(node.methodName.name); |
| 6979 } | 6954 } |
| 6980 } | 6955 } |
| 6981 } | 6956 } |
| OLD | NEW |