| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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.test.constant_test; | 5 library analyzer.test.constant_test; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analyzer/context/declared_variables.dart'; | 9 import 'package:analyzer/context/declared_variables.dart'; |
| 10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 _validate(true, (members[0] as TopLevelVariableDeclaration).variables); | 309 _validate(true, (members[0] as TopLevelVariableDeclaration).variables); |
| 310 _validate(true, (members[1] as TopLevelVariableDeclaration).variables); | 310 _validate(true, (members[1] as TopLevelVariableDeclaration).variables); |
| 311 } | 311 } |
| 312 | 312 |
| 313 test_computeValues_empty() async { | 313 test_computeValues_empty() async { |
| 314 ConstantValueComputer computer = _makeConstantValueComputer(); | 314 ConstantValueComputer computer = _makeConstantValueComputer(); |
| 315 computer.computeValues(); | 315 computer.computeValues(); |
| 316 } | 316 } |
| 317 | 317 |
| 318 test_computeValues_multipleSources() async { | 318 test_computeValues_multipleSources() async { |
| 319 Source librarySource = addNamedSource( | 319 Source librarySource = addNamedSource("/lib.dart", r''' |
| 320 "/lib.dart", | |
| 321 r''' | |
| 322 library lib; | 320 library lib; |
| 323 part 'part.dart'; | 321 part 'part.dart'; |
| 324 const int c = b; | 322 const int c = b; |
| 325 const int a = 0;'''); | 323 const int a = 0;'''); |
| 326 Source partSource = addNamedSource( | 324 Source partSource = addNamedSource("/part.dart", r''' |
| 327 "/part.dart", | |
| 328 r''' | |
| 329 part of lib; | 325 part of lib; |
| 330 const int b = a; | 326 const int b = a; |
| 331 const int d = c;'''); | 327 const int d = c;'''); |
| 332 LibraryElement libraryElement = resolve2(librarySource); | 328 LibraryElement libraryElement = resolve2(librarySource); |
| 333 CompilationUnit libraryUnit = | 329 CompilationUnit libraryUnit = |
| 334 analysisContext.resolveCompilationUnit(librarySource, libraryElement); | 330 analysisContext.resolveCompilationUnit(librarySource, libraryElement); |
| 335 expect(libraryUnit, isNotNull); | 331 expect(libraryUnit, isNotNull); |
| 336 CompilationUnit partUnit = | 332 CompilationUnit partUnit = |
| 337 analysisContext.resolveCompilationUnit(partSource, libraryElement); | 333 analysisContext.resolveCompilationUnit(partSource, libraryElement); |
| 338 expect(partUnit, isNotNull); | 334 expect(partUnit, isNotNull); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 class A { | 394 class A { |
| 399 const A(this.next); | 395 const A(this.next); |
| 400 final A next; | 396 final A next; |
| 401 } | 397 } |
| 402 const A x = const A(null); | 398 const A x = const A(null); |
| 403 const A y = const A(x);'''); | 399 const A y = const A(x);'''); |
| 404 } | 400 } |
| 405 | 401 |
| 406 test_dependencyOnConstructorArgument_unresolvedConstructor() async { | 402 test_dependencyOnConstructorArgument_unresolvedConstructor() async { |
| 407 // "const A.a(x)" depends on x even if the constructor A.a can't be found. | 403 // "const A.a(x)" depends on x even if the constructor A.a can't be found. |
| 408 await _assertProperDependencies( | 404 await _assertProperDependencies(r''' |
| 409 r''' | |
| 410 class A { | 405 class A { |
| 411 } | 406 } |
| 412 const int x = 1; | 407 const int x = 1; |
| 413 const A y = const A.a(x);''', | 408 const A y = const A.a(x);''', |
| 414 [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR]); | 409 [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR]); |
| 415 } | 410 } |
| 416 | 411 |
| 417 test_dependencyOnConstructorInitializer() async { | 412 test_dependencyOnConstructorInitializer() async { |
| 418 // "const A()" depends on x | 413 // "const A()" depends on x |
| 419 await _assertProperDependencies(r''' | 414 await _assertProperDependencies(r''' |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 final int x = 1; | 491 final int x = 1; |
| 497 } | 492 } |
| 498 const A a = const A(); | 493 const A a = const A(); |
| 499 '''); | 494 '''); |
| 500 } | 495 } |
| 501 | 496 |
| 502 test_dependencyOnInitializedNonStaticConst() async { | 497 test_dependencyOnInitializedNonStaticConst() async { |
| 503 // Even though non-static consts are not allowed by the language, we need | 498 // Even though non-static consts are not allowed by the language, we need |
| 504 // to handle them for error recovery purposes. | 499 // to handle them for error recovery purposes. |
| 505 // a depends on A() depends on A.x | 500 // a depends on A() depends on A.x |
| 506 await _assertProperDependencies( | 501 await _assertProperDependencies(''' |
| 507 ''' | |
| 508 class A { | 502 class A { |
| 509 const A(); | 503 const A(); |
| 510 const int x = 1; | 504 const int x = 1; |
| 511 } | 505 } |
| 512 const A a = const A(); | 506 const A a = const A(); |
| 513 ''', | 507 ''', [CompileTimeErrorCode.CONST_INSTANCE_FIELD]); |
| 514 [CompileTimeErrorCode.CONST_INSTANCE_FIELD]); | |
| 515 } | 508 } |
| 516 | 509 |
| 517 test_dependencyOnNonFactoryRedirect() async { | 510 test_dependencyOnNonFactoryRedirect() async { |
| 518 // a depends on A.foo() depends on A.bar() | 511 // a depends on A.foo() depends on A.bar() |
| 519 await _assertProperDependencies(r''' | 512 await _assertProperDependencies(r''' |
| 520 const A a = const A.foo(); | 513 const A a = const A.foo(); |
| 521 class A { | 514 class A { |
| 522 const A.foo() : this.bar(); | 515 const A.foo() : this.bar(); |
| 523 const A.bar(); | 516 const A.bar(); |
| 524 }'''); | 517 }'''); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 544 class A { | 537 class A { |
| 545 const A.foo() : this.bar(); | 538 const A.foo() : this.bar(); |
| 546 const A.bar([x = b]) : y = x; | 539 const A.bar([x = b]) : y = x; |
| 547 final int y; | 540 final int y; |
| 548 }'''); | 541 }'''); |
| 549 } | 542 } |
| 550 | 543 |
| 551 test_dependencyOnNonFactoryRedirect_toMissing() async { | 544 test_dependencyOnNonFactoryRedirect_toMissing() async { |
| 552 // a depends on A.foo() which depends on nothing, since A.bar() is | 545 // a depends on A.foo() which depends on nothing, since A.bar() is |
| 553 // missing. | 546 // missing. |
| 554 await _assertProperDependencies( | 547 await _assertProperDependencies(r''' |
| 555 r''' | |
| 556 const A a = const A.foo(); | 548 const A a = const A.foo(); |
| 557 class A { | 549 class A { |
| 558 const A.foo() : this.bar(); | 550 const A.foo() : this.bar(); |
| 559 }''', | 551 }''', [CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR]); |
| 560 [CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR]); | |
| 561 } | 552 } |
| 562 | 553 |
| 563 test_dependencyOnNonFactoryRedirect_toNonConst() async { | 554 test_dependencyOnNonFactoryRedirect_toNonConst() async { |
| 564 // a depends on A.foo() which depends on nothing, since A.bar() is | 555 // a depends on A.foo() which depends on nothing, since A.bar() is |
| 565 // non-const. | 556 // non-const. |
| 566 await _assertProperDependencies(r''' | 557 await _assertProperDependencies(r''' |
| 567 const A a = const A.foo(); | 558 const A a = const A.foo(); |
| 568 class A { | 559 class A { |
| 569 const A.foo() : this.bar(); | 560 const A.foo() : this.bar(); |
| 570 A.bar(); | 561 A.bar(); |
| (...skipping 1131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1702 } | 1693 } |
| 1703 } | 1694 } |
| 1704 | 1695 |
| 1705 @reflectiveTest | 1696 @reflectiveTest |
| 1706 class StrongConstantValueComputerTest extends ConstantValueComputerTest { | 1697 class StrongConstantValueComputerTest extends ConstantValueComputerTest { |
| 1707 void setUp() { | 1698 void setUp() { |
| 1708 super.setUp(); | 1699 super.setUp(); |
| 1709 resetWith(options: new AnalysisOptionsImpl()..strongMode = true); | 1700 resetWith(options: new AnalysisOptionsImpl()..strongMode = true); |
| 1710 } | 1701 } |
| 1711 } | 1702 } |
| OLD | NEW |