Chromium Code Reviews| 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 test.src.task.dart_test; | 5 library test.src.task.dart_test; |
| 6 | 6 |
| 7 import 'package:analyzer/file_system/file_system.dart'; | 7 import 'package:analyzer/file_system/file_system.dart'; |
| 8 import 'package:analyzer/file_system/memory_file_system.dart'; | 8 import 'package:analyzer/file_system/memory_file_system.dart'; |
| 9 import 'package:analyzer/src/context/cache.dart'; | 9 import 'package:analyzer/src/context/cache.dart'; |
| 10 import 'package:analyzer/src/generated/ast.dart'; | 10 import 'package:analyzer/src/generated/ast.dart'; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 25 import 'package:unittest/unittest.dart'; | 25 import 'package:unittest/unittest.dart'; |
| 26 | 26 |
| 27 import '../../generated/resolver_test.dart'; | 27 import '../../generated/resolver_test.dart'; |
| 28 import '../../generated/test_support.dart'; | 28 import '../../generated/test_support.dart'; |
| 29 import '../../reflective_tests.dart'; | 29 import '../../reflective_tests.dart'; |
| 30 | 30 |
| 31 main() { | 31 main() { |
| 32 groupSep = ' | '; | 32 groupSep = ' | '; |
| 33 runReflectiveTests(BuildCompilationUnitElementTaskTest); | 33 runReflectiveTests(BuildCompilationUnitElementTaskTest); |
| 34 runReflectiveTests(BuildLibraryElementTaskTest); | 34 runReflectiveTests(BuildLibraryElementTaskTest); |
| 35 runReflectiveTests(BuildPublicNamespaceTaskTest); | |
| 35 runReflectiveTests(ParseDartTaskTest); | 36 runReflectiveTests(ParseDartTaskTest); |
| 36 runReflectiveTests(ScanDartTaskTest); | 37 runReflectiveTests(ScanDartTaskTest); |
| 37 } | 38 } |
| 38 | 39 |
| 39 @reflectiveTest | 40 @reflectiveTest |
| 40 class BuildCompilationUnitElementTaskTest extends EngineTestCase { | 41 class BuildCompilationUnitElementTaskTest extends EngineTestCase { |
| 41 test_buildInputs() { | 42 test_buildInputs() { |
| 42 AnalysisTarget target = new TestSource(); | 43 AnalysisTarget target = new TestSource(); |
| 43 Map<String, TaskInput> inputs = | 44 Map<String, TaskInput> inputs = |
| 44 BuildCompilationUnitElementTask.buildInputs(target); | 45 BuildCompilationUnitElementTask.buildInputs(target); |
| 45 expect(inputs, isNotNull); | 46 expect(inputs.keys, unorderedEquals( |
| 46 expect(inputs, hasLength(1)); | 47 [BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME])); |
| 47 expect(inputs[BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME], | |
| 48 isNotNull); | |
| 49 } | 48 } |
| 50 | 49 |
| 51 test_constructor() { | 50 test_constructor() { |
| 52 AnalysisContext context = AnalysisContextFactory.contextWithCore(); | 51 AnalysisContext context = AnalysisContextFactory.contextWithCore(); |
| 53 AnalysisTarget target = new TestSource(); | 52 AnalysisTarget target = new TestSource(); |
| 54 BuildCompilationUnitElementTask task = | 53 BuildCompilationUnitElementTask task = |
| 55 new BuildCompilationUnitElementTask(context, target); | 54 new BuildCompilationUnitElementTask(context, target); |
| 56 expect(task, isNotNull); | 55 expect(task, isNotNull); |
| 57 expect(task.context, context); | 56 expect(task.context, context); |
| 58 expect(task.target, target); | 57 expect(task.target, target); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 118 BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME: | 117 BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME: |
| 119 parseOutputs[PARSED_UNIT] | 118 parseOutputs[PARSED_UNIT] |
| 120 }; | 119 }; |
| 121 buildTask.perform(); | 120 buildTask.perform(); |
| 122 | 121 |
| 123 return buildTask; | 122 return buildTask; |
| 124 } | 123 } |
| 125 } | 124 } |
| 126 | 125 |
| 127 @reflectiveTest | 126 @reflectiveTest |
| 128 class BuildLibraryElementTaskTest extends EngineTestCase { | 127 class BuildLibraryElementTaskTest extends _AbstractDartTaskTest { |
| 129 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); | |
| 130 InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); | |
| 131 | |
| 132 Source librarySource; | 128 Source librarySource; |
| 133 CompilationUnit libraryUnit; | 129 CompilationUnit libraryUnit; |
| 134 CompilationUnitElement libraryUnitElement; | 130 CompilationUnitElement libraryUnitElement; |
| 135 List<CompilationUnit> partUnits; | 131 List<CompilationUnit> partUnits; |
| 136 | 132 |
| 137 BuildLibraryElementTask task; | |
| 138 Map<ResultDescriptor<dynamic>, dynamic> outputs; | |
| 139 LibraryElement libraryElement; | 133 LibraryElement libraryElement; |
| 140 | 134 |
| 141 void setUp() { | |
| 142 DartSdk sdk = context.sourceFactory.dartSdk; | |
| 143 context.sourceFactory = new SourceFactory(<UriResolver>[ | |
| 144 new DartUriResolver(sdk), | |
| 145 new ResourceUriResolver(resourceProvider) | |
| 146 ]); | |
| 147 } | |
| 148 | |
| 149 test_buildInputs() { | 135 test_buildInputs() { |
| 150 ExtendedAnalysisContext context = new _MockContext(); | 136 ExtendedAnalysisContext context = new _MockContext(); |
| 151 // prepare sources | 137 // prepare sources |
| 152 File libraryFile = resourceProvider.newFile('/lib.dart', ''); | 138 File libraryFile = resourceProvider.newFile('/lib.dart', ''); |
| 153 File partFile1 = resourceProvider.newFile('/part1.dart', ''); | 139 File partFile1 = resourceProvider.newFile('/part1.dart', ''); |
| 154 File partFile2 = resourceProvider.newFile('/part2.dart', ''); | 140 File partFile2 = resourceProvider.newFile('/part2.dart', ''); |
| 155 Source librarySource = libraryFile.createSource(); | 141 Source librarySource = libraryFile.createSource(); |
| 156 Source partSource1 = partFile1.createSource(); | 142 Source partSource1 = partFile1.createSource(); |
| 157 Source partSource2 = partFile2.createSource(); | 143 Source partSource2 = partFile2.createSource(); |
| 158 // set INCLUDED_PARTS | 144 // set INCLUDED_PARTS |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 366 expect(unitElement2.topLevelVariables, [variable]); | 352 expect(unitElement2.topLevelVariables, [variable]); |
| 367 } | 353 } |
| 368 | 354 |
| 369 void _assertErrorsWithCodes(List<ErrorCode> expectedErrorCodes) { | 355 void _assertErrorsWithCodes(List<ErrorCode> expectedErrorCodes) { |
| 370 List<AnalysisError> errors = outputs[BUILD_LIBRARY_ERRORS]; | 356 List<AnalysisError> errors = outputs[BUILD_LIBRARY_ERRORS]; |
| 371 GatheringErrorListener errorListener = new GatheringErrorListener(); | 357 GatheringErrorListener errorListener = new GatheringErrorListener(); |
| 372 errorListener.addAll(errors); | 358 errorListener.addAll(errors); |
| 373 errorListener.assertErrorsWithCodes(expectedErrorCodes); | 359 errorListener.assertErrorsWithCodes(expectedErrorCodes); |
| 374 } | 360 } |
| 375 | 361 |
| 376 CompilationUnit _buildCompilationUnit( | |
| 377 InternalAnalysisContext context, String path, String content) { | |
| 378 File file = resourceProvider.newFile(path, content); | |
| 379 Source source = file.createSource(); | |
| 380 | |
| 381 ScanDartTask scanTask = new ScanDartTask(context, source); | |
| 382 scanTask.inputs = {ScanDartTask.CONTENT_INPUT_NAME: content}; | |
| 383 scanTask.perform(); | |
| 384 Map<ResultDescriptor, dynamic> scanOutputs = scanTask.outputs; | |
| 385 | |
| 386 ParseDartTask parseTask = new ParseDartTask(context, source); | |
| 387 parseTask.inputs = { | |
| 388 ParseDartTask.LINE_INFO_INPUT_NAME: scanOutputs[LINE_INFO], | |
| 389 ParseDartTask.TOKEN_STREAM_INPUT_NAME: scanOutputs[TOKEN_STREAM] | |
| 390 }; | |
| 391 parseTask.perform(); | |
| 392 Map<ResultDescriptor, dynamic> parseOutputs = parseTask.outputs; | |
| 393 | |
| 394 BuildCompilationUnitElementTask buildTask = | |
| 395 new BuildCompilationUnitElementTask(context, source); | |
| 396 buildTask.inputs = { | |
| 397 BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME: | |
| 398 parseOutputs[PARSED_UNIT] | |
| 399 }; | |
| 400 buildTask.perform(); | |
| 401 return buildTask.outputs[BUILT_UNIT]; | |
| 402 } | |
| 403 | |
| 404 void _performBuildTask(Map<String, String> sourceMap) { | 362 void _performBuildTask(Map<String, String> sourceMap) { |
| 363 _BuildLibraryElementTaskResult result = _buildLibraryElement(sourceMap); | |
| 405 Map<String, CompilationUnit> unitMap = <String, CompilationUnit>{}; | 364 Map<String, CompilationUnit> unitMap = <String, CompilationUnit>{}; |
| 406 sourceMap.forEach((String path, String content) { | 365 sourceMap.forEach((String path, String content) { |
| 407 CompilationUnit unit = _buildCompilationUnit(context, path, content); | 366 CompilationUnit unit = _buildCompilationUnit(path, content); |
| 408 unitMap[path] = unit; | 367 unitMap[path] = unit; |
| 409 }); | 368 }); |
| 410 | 369 |
| 411 libraryUnit = unitMap.values.first; | 370 libraryUnit = result.libraryUnit; |
| 412 libraryUnitElement = libraryUnit.element; | 371 libraryUnitElement = result.libraryUnitElement; |
| 413 librarySource = libraryUnitElement.source; | 372 librarySource = result.librarySource; |
| 414 partUnits = unitMap.values.skip(1).toList(); | 373 partUnits = result.partUnits; |
| 415 | 374 |
| 416 task = new BuildLibraryElementTask(context, librarySource); | 375 task = result.task; |
| 417 task.inputs = { | 376 outputs = result.outputs; |
| 418 BuildLibraryElementTask.DEFINING_BUILT_UNIT_INPUT_NAME: libraryUnit, | 377 libraryElement = result.libraryElement; |
| 419 BuildLibraryElementTask.PART_BUILT_UNITS_INPUT_NAME: partUnits | |
| 420 }; | |
| 421 task.perform(); | |
| 422 outputs = task.outputs; | |
| 423 libraryElement = outputs[BUILT_LIBRARY_ELEMENT]; | |
| 424 } | 378 } |
| 425 } | 379 } |
| 426 | 380 |
| 381 @reflectiveTest | |
| 382 class BuildPublicNamespaceTaskTest extends _AbstractDartTaskTest { | |
| 383 test_buildInputs() { | |
| 384 AnalysisTarget target = new TestSource(); | |
| 385 Map<String, TaskInput> inputs = | |
| 386 BuildPublicNamespaceTask.buildInputs(target); | |
| 387 expect(inputs.keys, unorderedEquals( | |
| 388 [BuildPublicNamespaceTask.BUILT_LIBRARY_ELEMENT_INPUT_NAME])); | |
| 389 } | |
| 390 | |
| 391 test_constructor() { | |
| 392 AnalysisContext context = AnalysisContextFactory.contextWithCore(); | |
| 393 AnalysisTarget target = new TestSource(); | |
| 394 BuildPublicNamespaceTask task = | |
| 395 new BuildPublicNamespaceTask(context, target); | |
| 396 expect(task, isNotNull); | |
| 397 expect(task.context, context); | |
| 398 expect(task.target, target); | |
| 399 } | |
| 400 | |
| 401 test_createTask() { | |
| 402 AnalysisContext context = AnalysisContextFactory.contextWithCore(); | |
| 403 AnalysisTarget target = new TestSource(); | |
| 404 BuildPublicNamespaceTask task = | |
| 405 BuildPublicNamespaceTask.createTask(context, target); | |
| 406 expect(task, isNotNull); | |
| 407 expect(task.context, context); | |
| 408 expect(task.target, target); | |
| 409 } | |
| 410 | |
| 411 test_description() { | |
| 412 AnalysisTarget target = new TestSource(); | |
| 413 BuildPublicNamespaceTask task = new BuildPublicNamespaceTask(null, target); | |
| 414 expect(task.description, isNotNull); | |
| 415 } | |
| 416 | |
| 417 test_descriptor() { | |
| 418 TaskDescriptor descriptor = BuildPublicNamespaceTask.DESCRIPTOR; | |
| 419 expect(descriptor, isNotNull); | |
| 420 } | |
| 421 | |
| 422 test_perform() { | |
| 423 var buildLibraryElementResult = _buildLibraryElement({ | |
| 424 '/lib.dart': ''' | |
| 425 library lib; | |
| 426 part 'part.dart'; | |
| 427 a() {} | |
| 428 _b() {} | |
| 429 ''', | |
| 430 '/part.dart': ''' | |
| 431 part of lib; | |
| 432 _c() {} | |
| 433 d() {} | |
| 434 ''' | |
| 435 }); | |
| 436 Source librarySource = buildLibraryElementResult.librarySource; | |
| 437 LibraryElement libraryElement = buildLibraryElementResult.libraryElement; | |
| 438 // perform task | |
| 439 BuildPublicNamespaceTask task = | |
| 440 new BuildPublicNamespaceTask(context, librarySource); | |
| 441 task.inputs = { | |
| 442 BuildPublicNamespaceTask.BUILT_LIBRARY_ELEMENT_INPUT_NAME: libraryElement | |
| 443 }; | |
| 444 Map<ResultDescriptor, dynamic> outputs = _performTask(task); | |
| 445 // validate | |
| 446 Namespace namespace = outputs[PUBLIC_NAMESPACE]; | |
| 447 expect(namespace.definedNames.keys, unorderedEquals(['a', 'd'])); | |
| 448 } | |
| 449 } | |
| 450 | |
| 427 @reflectiveTest | 451 @reflectiveTest |
| 428 class ParseDartTaskTest extends EngineTestCase { | 452 class ParseDartTaskTest extends EngineTestCase { |
| 429 test_buildInputs() { | 453 test_buildInputs() { |
| 430 AnalysisTarget target = new TestSource(); | 454 AnalysisTarget target = new TestSource(); |
| 431 Map<String, TaskInput> inputs = ParseDartTask.buildInputs(target); | 455 Map<String, TaskInput> inputs = ParseDartTask.buildInputs(target); |
| 432 expect(inputs, isNotNull); | 456 expect(inputs.keys, unorderedEquals([ |
|
Brian Wilkerson
2015/03/11 20:55:25
I'd rather have the explicit test that 'inputs' is
| |
| 433 expect(inputs, hasLength(2)); | 457 ParseDartTask.LINE_INFO_INPUT_NAME, |
| 434 expect(inputs[ParseDartTask.LINE_INFO_INPUT_NAME], isNotNull); | 458 ParseDartTask.TOKEN_STREAM_INPUT_NAME |
| 435 expect(inputs[ParseDartTask.TOKEN_STREAM_INPUT_NAME], isNotNull); | 459 ])); |
| 436 } | 460 } |
| 437 | 461 |
| 438 test_constructor() { | 462 test_constructor() { |
| 439 AnalysisContext context = AnalysisContextFactory.contextWithCore(); | 463 AnalysisContext context = AnalysisContextFactory.contextWithCore(); |
| 440 AnalysisTarget target = new TestSource(); | 464 AnalysisTarget target = new TestSource(); |
| 441 ParseDartTask task = new ParseDartTask(context, target); | 465 ParseDartTask task = new ParseDartTask(context, target); |
| 442 expect(task, isNotNull); | 466 expect(task, isNotNull); |
| 443 expect(task.context, context); | 467 expect(task.context, context); |
| 444 expect(task.target, target); | 468 expect(task.target, target); |
| 445 } | 469 } |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 536 parseTask.perform(); | 560 parseTask.perform(); |
| 537 return parseTask; | 561 return parseTask; |
| 538 } | 562 } |
| 539 } | 563 } |
| 540 | 564 |
| 541 @reflectiveTest | 565 @reflectiveTest |
| 542 class ScanDartTaskTest extends EngineTestCase { | 566 class ScanDartTaskTest extends EngineTestCase { |
| 543 test_buildInputs() { | 567 test_buildInputs() { |
| 544 AnalysisTarget target = new TestSource(); | 568 AnalysisTarget target = new TestSource(); |
| 545 Map<String, TaskInput> inputs = ScanDartTask.buildInputs(target); | 569 Map<String, TaskInput> inputs = ScanDartTask.buildInputs(target); |
| 546 expect(inputs, isNotNull); | 570 expect(inputs.keys, unorderedEquals([ScanDartTask.CONTENT_INPUT_NAME])); |
| 547 expect(inputs, hasLength(1)); | |
| 548 expect(inputs[ScanDartTask.CONTENT_INPUT_NAME], isNotNull); | |
| 549 } | 571 } |
| 550 | 572 |
| 551 test_constructor() { | 573 test_constructor() { |
| 552 AnalysisContext context = AnalysisContextFactory.contextWithCore(); | 574 AnalysisContext context = AnalysisContextFactory.contextWithCore(); |
| 553 AnalysisTarget target = new TestSource(); | 575 AnalysisTarget target = new TestSource(); |
| 554 ScanDartTask task = new ScanDartTask(context, target); | 576 ScanDartTask task = new ScanDartTask(context, target); |
| 555 expect(task, isNotNull); | 577 expect(task, isNotNull); |
| 556 expect(task.context, context); | 578 expect(task.context, context); |
| 557 expect(task.target, target); | 579 expect(task.target, target); |
| 558 } | 580 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 603 AnalysisContext context = AnalysisContextFactory.contextWithCore(); | 625 AnalysisContext context = AnalysisContextFactory.contextWithCore(); |
| 604 AnalysisTarget target = new TestSource(); | 626 AnalysisTarget target = new TestSource(); |
| 605 | 627 |
| 606 ScanDartTask scanTask = new ScanDartTask(context, target); | 628 ScanDartTask scanTask = new ScanDartTask(context, target); |
| 607 scanTask.inputs = {ScanDartTask.CONTENT_INPUT_NAME: content}; | 629 scanTask.inputs = {ScanDartTask.CONTENT_INPUT_NAME: content}; |
| 608 scanTask.perform(); | 630 scanTask.perform(); |
| 609 return scanTask; | 631 return scanTask; |
| 610 } | 632 } |
| 611 } | 633 } |
| 612 | 634 |
| 635 class _AbstractDartTaskTest extends EngineTestCase { | |
| 636 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); | |
| 637 | |
| 638 InternalAnalysisContext context = AnalysisContextFactory.contextWithCore(); | |
| 639 Map<AnalysisTarget, CacheEntry> entryMap = <AnalysisTarget, CacheEntry>{}; | |
| 640 | |
| 641 AnalysisTask task; | |
| 642 Map<ResultDescriptor<dynamic>, dynamic> outputs; | |
| 643 | |
| 644 CacheEntry getCacheEntry(AnalysisTarget target) { | |
| 645 return entryMap.putIfAbsent(target, () => new CacheEntry()); | |
| 646 } | |
| 647 | |
| 648 void setUp() { | |
| 649 DartSdk sdk = context.sourceFactory.dartSdk; | |
| 650 context.sourceFactory = new SourceFactory(<UriResolver>[ | |
| 651 new DartUriResolver(sdk), | |
| 652 new ResourceUriResolver(resourceProvider) | |
| 653 ]); | |
| 654 } | |
| 655 | |
| 656 CompilationUnit _buildCompilationUnit(String path, String content) { | |
| 657 File file = resourceProvider.newFile(path, content); | |
| 658 Source source = file.createSource(); | |
| 659 // scan | |
| 660 ScanDartTask scanTask = new ScanDartTask(context, source); | |
| 661 scanTask.inputs = {ScanDartTask.CONTENT_INPUT_NAME: content}; | |
| 662 var scanOutputs = _performTask(scanTask); | |
| 663 // parse | |
| 664 ParseDartTask parseTask = new ParseDartTask(context, source); | |
| 665 parseTask.inputs = { | |
| 666 ParseDartTask.LINE_INFO_INPUT_NAME: scanOutputs[LINE_INFO], | |
| 667 ParseDartTask.TOKEN_STREAM_INPUT_NAME: scanOutputs[TOKEN_STREAM] | |
| 668 }; | |
| 669 var parseOutputs = _performTask(parseTask); | |
| 670 // build CompilationUnit | |
| 671 BuildCompilationUnitElementTask buildTask = | |
| 672 new BuildCompilationUnitElementTask(context, source); | |
| 673 buildTask.inputs = { | |
| 674 BuildCompilationUnitElementTask.PARSED_UNIT_INPUT_NAME: | |
| 675 parseOutputs[PARSED_UNIT] | |
| 676 }; | |
| 677 var buildUnitOutputs = _performTask(buildTask); | |
| 678 // done | |
| 679 return buildUnitOutputs[BUILT_UNIT]; | |
| 680 } | |
| 681 | |
| 682 _BuildLibraryElementTaskResult _buildLibraryElement( | |
| 683 Map<String, String> sourceMap) { | |
| 684 Map<String, CompilationUnit> unitMap = <String, CompilationUnit>{}; | |
| 685 sourceMap.forEach((String path, String content) { | |
| 686 CompilationUnit unit = _buildCompilationUnit(path, content); | |
| 687 unitMap[path] = unit; | |
| 688 }); | |
| 689 | |
| 690 CompilationUnit libraryUnit = unitMap.values.first; | |
| 691 CompilationUnitElement libraryUnitElement = libraryUnit.element; | |
| 692 Source librarySource = libraryUnitElement.source; | |
| 693 List<CompilationUnit> partUnits = unitMap.values.skip(1).toList(); | |
| 694 | |
| 695 BuildLibraryElementTask task = | |
| 696 new BuildLibraryElementTask(context, librarySource); | |
| 697 task.inputs = { | |
| 698 BuildLibraryElementTask.DEFINING_BUILT_UNIT_INPUT_NAME: libraryUnit, | |
| 699 BuildLibraryElementTask.PART_BUILT_UNITS_INPUT_NAME: partUnits | |
| 700 }; | |
| 701 Map<ResultDescriptor, dynamic> outputs = _performTask(task); | |
| 702 | |
| 703 LibraryElement libraryElement = outputs[BUILT_LIBRARY_ELEMENT]; | |
| 704 return new _BuildLibraryElementTaskResult(librarySource, libraryUnit, | |
| 705 libraryUnitElement, partUnits, task, outputs, libraryElement); | |
| 706 } | |
| 707 | |
| 708 /** | |
| 709 * Perform the given [task], record and return its outputs. | |
| 710 */ | |
| 711 Map<ResultDescriptor, dynamic> _performTask(AnalysisTask task) { | |
| 712 AnalysisTarget target = task.target; | |
| 713 // perform the task | |
| 714 task.perform(); | |
| 715 Map<ResultDescriptor, dynamic> outputs = task.outputs; | |
| 716 // file the cache entry | |
| 717 CacheEntry cacheEntry = getCacheEntry(target); | |
| 718 outputs.forEach((result, value) { | |
| 719 cacheEntry.setValue(result, value); | |
| 720 }); | |
| 721 return outputs; | |
| 722 } | |
| 723 } | |
| 724 | |
| 725 class _BuildLibraryElementTaskResult { | |
| 726 final Source librarySource; | |
| 727 final CompilationUnit libraryUnit; | |
| 728 final CompilationUnitElement libraryUnitElement; | |
| 729 final List<CompilationUnit> partUnits; | |
| 730 final BuildLibraryElementTask task; | |
| 731 final Map<ResultDescriptor, dynamic> outputs; | |
| 732 final LibraryElement libraryElement; | |
| 733 _BuildLibraryElementTaskResult(this.librarySource, this.libraryUnit, | |
| 734 this.libraryUnitElement, this.partUnits, this.task, this.outputs, | |
| 735 this.libraryElement); | |
| 736 } | |
| 737 | |
| 613 class _MockContext extends TypedMock implements ExtendedAnalysisContext { | 738 class _MockContext extends TypedMock implements ExtendedAnalysisContext { |
| 614 Map<AnalysisTarget, CacheEntry> entryMap = <AnalysisTarget, CacheEntry>{}; | 739 Map<AnalysisTarget, CacheEntry> entryMap = <AnalysisTarget, CacheEntry>{}; |
| 615 | 740 |
| 616 @override | 741 @override |
| 617 CacheEntry getCacheEntry(AnalysisTarget target) { | 742 CacheEntry getCacheEntry(AnalysisTarget target) { |
| 618 return entryMap.putIfAbsent(target, () => new CacheEntry()); | 743 return entryMap.putIfAbsent(target, () => new CacheEntry()); |
| 619 } | 744 } |
| 620 | 745 |
| 621 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 746 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
| 622 } | 747 } |
| OLD | NEW |