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.test.src.context.context_test; | 5 library analyzer.test.src.context.context_test; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:collection'; | 8 import 'dart:collection'; |
9 | 9 |
10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
148 CacheEntry entry = context.getCacheEntry(source); | 148 CacheEntry entry = context.getCacheEntry(source); |
149 expect(entry.explicitlyAdded, isFalse); | 149 expect(entry.explicitlyAdded, isFalse); |
150 // add the source | 150 // add the source |
151 ChangeSet changeSet = new ChangeSet(); | 151 ChangeSet changeSet = new ChangeSet(); |
152 changeSet.addedSource(source); | 152 changeSet.addedSource(source); |
153 context.applyChanges(changeSet); | 153 context.applyChanges(changeSet); |
154 // now the entry is explicit | 154 // now the entry is explicit |
155 expect(entry.explicitlyAdded, isTrue); | 155 expect(entry.explicitlyAdded, isTrue); |
156 } | 156 } |
157 | 157 |
| 158 void test_applyChanges_addNewImport_invalidateLibraryCycle() { |
| 159 context.analysisOptions = |
| 160 new AnalysisOptionsImpl.from(context.analysisOptions) |
| 161 ..strongMode = true; |
| 162 Source embedder = addSource( |
| 163 '/a.dart', |
| 164 r''' |
| 165 library a; |
| 166 import 'b.dart'; |
| 167 //import 'c.dart'; |
| 168 '''); |
| 169 addSource( |
| 170 '/b.dart', |
| 171 r''' |
| 172 library b; |
| 173 import 'a.dart'; |
| 174 '''); |
| 175 addSource( |
| 176 '/c.dart', |
| 177 r''' |
| 178 library c; |
| 179 import 'b.dart'; |
| 180 '''); |
| 181 _performPendingAnalysisTasks(); |
| 182 // Add a new import into a.dart, this should invalidate its library cycle. |
| 183 // If it doesn't, we will get a task cycle exception. |
| 184 context.setContents( |
| 185 embedder, |
| 186 r''' |
| 187 library a; |
| 188 import 'b.dart'; |
| 189 import 'c.dart'; |
| 190 '''); |
| 191 _performPendingAnalysisTasks(); |
| 192 expect(context.getCacheEntry(embedder).exception, isNull); |
| 193 } |
| 194 |
158 Future test_applyChanges_change() { | 195 Future test_applyChanges_change() { |
159 SourcesChangedListener listener = new SourcesChangedListener(); | 196 SourcesChangedListener listener = new SourcesChangedListener(); |
160 context.onSourcesChanged.listen(listener.onData); | 197 context.onSourcesChanged.listen(listener.onData); |
161 expect(context.sourcesNeedingProcessing, isEmpty); | 198 expect(context.sourcesNeedingProcessing, isEmpty); |
162 Source source = newSource('/test.dart'); | 199 Source source = newSource('/test.dart'); |
163 ChangeSet changeSet1 = new ChangeSet(); | 200 ChangeSet changeSet1 = new ChangeSet(); |
164 changeSet1.addedSource(source); | 201 changeSet1.addedSource(source); |
165 context.applyChanges(changeSet1); | 202 context.applyChanges(changeSet1); |
166 expect(context.sourcesNeedingProcessing, contains(source)); | 203 expect(context.sourcesNeedingProcessing, contains(source)); |
167 Source source2 = newSource('/test2.dart'); | 204 Source source2 = newSource('/test2.dart'); |
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 // The reason is that a.dart adds dependencies on (not existing) b.dart | 517 // The reason is that a.dart adds dependencies on (not existing) b.dart |
481 // results in cache. | 518 // results in cache. |
482 // Now a.dart does not have errors. | 519 // Now a.dart does not have errors. |
483 addSource('/b.dart', codeB); | 520 addSource('/b.dart', codeB); |
484 expect(getErrorsState(a), CacheState.INVALID); | 521 expect(getErrorsState(a), CacheState.INVALID); |
485 _performPendingAnalysisTasks(); | 522 _performPendingAnalysisTasks(); |
486 expect(getErrorsState(a), CacheState.VALID); | 523 expect(getErrorsState(a), CacheState.VALID); |
487 expect(context.getErrors(a).errors, hasLength(0)); | 524 expect(context.getErrors(a).errors, hasLength(0)); |
488 } | 525 } |
489 | 526 |
490 void test_applyChanges_addNewImport_invalidateLibraryCycle() { | |
491 context.analysisOptions = | |
492 new AnalysisOptionsImpl.from(context.analysisOptions) | |
493 ..strongMode = true; | |
494 Source embedder = addSource( | |
495 '/a.dart', | |
496 r''' | |
497 library a; | |
498 import 'b.dart'; | |
499 //import 'c.dart'; | |
500 '''); | |
501 addSource( | |
502 '/b.dart', | |
503 r''' | |
504 library b; | |
505 import 'a.dart'; | |
506 '''); | |
507 addSource( | |
508 '/c.dart', | |
509 r''' | |
510 library c; | |
511 import 'b.dart'; | |
512 '''); | |
513 _performPendingAnalysisTasks(); | |
514 // Add a new import into a.dart, this should invalidate its library cycle. | |
515 // If it doesn't, we will get a task cycle exception. | |
516 context.setContents( | |
517 embedder, | |
518 r''' | |
519 library a; | |
520 import 'b.dart'; | |
521 import 'c.dart'; | |
522 '''); | |
523 _performPendingAnalysisTasks(); | |
524 expect(context.getCacheEntry(embedder).exception, isNull); | |
525 } | |
526 | |
527 void test_cacheConsistencyValidator_computed_deleted() { | 527 void test_cacheConsistencyValidator_computed_deleted() { |
528 CacheConsistencyValidator validator = context.cacheConsistencyValidator; | 528 CacheConsistencyValidator validator = context.cacheConsistencyValidator; |
529 var stat = PerformanceStatistics.cacheConsistencyValidationStatistics; | 529 var stat = PerformanceStatistics.cacheConsistencyValidationStatistics; |
530 stat.reset(); | 530 stat.reset(); |
531 // Add sources. | 531 // Add sources. |
532 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); | 532 MemoryResourceProvider resourceProvider = new MemoryResourceProvider(); |
533 String path1 = '/test1.dart'; | 533 String path1 = '/test1.dart'; |
534 String path2 = '/test2.dart'; | 534 String path2 = '/test2.dart'; |
535 Source source1 = resourceProvider.newFile(path1, '// 1-1').createSource(); | 535 Source source1 = resourceProvider.newFile(path1, '// 1-1').createSource(); |
536 Source source2 = resourceProvider.newFile(path2, '// 2-1').createSource(); | 536 Source source2 = resourceProvider.newFile(path2, '// 2-1').createSource(); |
(...skipping 1755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2292 Set<String> libraryElementUris = new Set<String>(); | 2292 Set<String> libraryElementUris = new Set<String>(); |
2293 Set<String> parsedUnitUris = new Set<String>(); | 2293 Set<String> parsedUnitUris = new Set<String>(); |
2294 Set<String> resolvedUnitUris = new Set<String>(); | 2294 Set<String> resolvedUnitUris = new Set<String>(); |
2295 // listen | 2295 // listen |
2296 context.onResultChanged(LIBRARY_ELEMENT).listen((event) { | 2296 context.onResultChanged(LIBRARY_ELEMENT).listen((event) { |
2297 expect(event.wasComputed, isTrue); | 2297 expect(event.wasComputed, isTrue); |
2298 expect(event.wasInvalidated, isFalse); | 2298 expect(event.wasInvalidated, isFalse); |
2299 Source librarySource = event.target; | 2299 Source librarySource = event.target; |
2300 libraryElementUris.add(librarySource.uri.toString()); | 2300 libraryElementUris.add(librarySource.uri.toString()); |
2301 }); | 2301 }); |
2302 context.onResultChanged(PARSED_UNIT).listen((event) { | 2302 context.onResultChanged(PARSED_UNIT1).listen((event) { |
2303 expect(event.wasComputed, isTrue); | 2303 expect(event.wasComputed, isTrue); |
2304 expect(event.wasInvalidated, isFalse); | 2304 expect(event.wasInvalidated, isFalse); |
2305 Source source = event.target; | 2305 Source source = event.target; |
2306 parsedUnitUris.add(source.uri.toString()); | 2306 parsedUnitUris.add(source.uri.toString()); |
2307 }); | 2307 }); |
2308 context.onResultChanged(RESOLVED_UNIT).listen((event) { | 2308 context.onResultChanged(RESOLVED_UNIT).listen((event) { |
2309 expect(event.wasComputed, isTrue); | 2309 expect(event.wasComputed, isTrue); |
2310 expect(event.wasInvalidated, isFalse); | 2310 expect(event.wasInvalidated, isFalse); |
2311 LibrarySpecificUnit target = event.target; | 2311 LibrarySpecificUnit target = event.target; |
2312 Source librarySource = target.library; | 2312 Source librarySource = target.library; |
(...skipping 1430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3743 '''); | 3743 '''); |
3744 _performPendingAnalysisTasks(); | 3744 _performPendingAnalysisTasks(); |
3745 Expression find42() { | 3745 Expression find42() { |
3746 CompilationUnit unit = | 3746 CompilationUnit unit = |
3747 context.getResult(new LibrarySpecificUnit(a, a), RESOLVED_UNIT); | 3747 context.getResult(new LibrarySpecificUnit(a, a), RESOLVED_UNIT); |
3748 ExpressionStatement statement = | 3748 ExpressionStatement statement = |
3749 AstFinder.getStatementsInTopLevelFunction(unit, 'main').single; | 3749 AstFinder.getStatementsInTopLevelFunction(unit, 'main').single; |
3750 MethodInvocation invocation = statement.expression; | 3750 MethodInvocation invocation = statement.expression; |
3751 return invocation.argumentList.arguments[0]; | 3751 return invocation.argumentList.arguments[0]; |
3752 } | 3752 } |
| 3753 |
3753 { | 3754 { |
3754 Expression argument = find42(); | 3755 Expression argument = find42(); |
3755 expect(argument.staticParameterElement, isNull); | 3756 expect(argument.staticParameterElement, isNull); |
3756 expect(argument.propagatedParameterElement, isNotNull); | 3757 expect(argument.propagatedParameterElement, isNotNull); |
3757 } | 3758 } |
3758 // Update a.dart: add type annotation for 'a'. | 3759 // Update a.dart: add type annotation for 'a'. |
3759 // '42' has 'staticParameterElement', but not 'propagatedParameterElement'. | 3760 // '42' has 'staticParameterElement', but not 'propagatedParameterElement'. |
3760 context.setContents( | 3761 context.setContents( |
3761 a, | 3762 a, |
3762 r''' | 3763 r''' |
(...skipping 1213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4976 _assertValidUnits(unit, null); | 4977 _assertValidUnits(unit, null); |
4977 _assertUnitValidTaskResults(unit, ResolveUnitTypeNamesTask.DESCRIPTOR); | 4978 _assertUnitValidTaskResults(unit, ResolveUnitTypeNamesTask.DESCRIPTOR); |
4978 _assertUnitValidTaskResults(unit, ResolveUnitTask.DESCRIPTOR); | 4979 _assertUnitValidTaskResults(unit, ResolveUnitTask.DESCRIPTOR); |
4979 _assertValidTaskResults(unit, ResolveLibraryReferencesTask.DESCRIPTOR); | 4980 _assertValidTaskResults(unit, ResolveLibraryReferencesTask.DESCRIPTOR); |
4980 _assertValidTaskResults(unit, ResolveLibraryTask.DESCRIPTOR); | 4981 _assertValidTaskResults(unit, ResolveLibraryTask.DESCRIPTOR); |
4981 } | 4982 } |
4982 | 4983 |
4983 void _assertValidForAnyLibrary(Source source) { | 4984 void _assertValidForAnyLibrary(Source source) { |
4984 // Source results. | 4985 // Source results. |
4985 _assertValidTaskResults(source, ScanDartTask.DESCRIPTOR); | 4986 _assertValidTaskResults(source, ScanDartTask.DESCRIPTOR); |
| 4987 _assertValidTaskResults(source, ParseDartTask.DESCRIPTOR); |
| 4988 _assertValidTaskResults(source, ResolveDirectivesTask.DESCRIPTOR); |
4986 // Library results. | 4989 // Library results. |
4987 _assertValidTaskResults(source, BuildLibraryElementTask.DESCRIPTOR); | 4990 _assertValidTaskResults(source, BuildLibraryElementTask.DESCRIPTOR); |
4988 _assertValidTaskResults(source, BuildDirectiveElementsTask.DESCRIPTOR); | 4991 _assertValidTaskResults(source, BuildDirectiveElementsTask.DESCRIPTOR); |
4989 _assertValidTaskResults(source, BuildSourceExportClosureTask.DESCRIPTOR); | 4992 _assertValidTaskResults(source, BuildSourceExportClosureTask.DESCRIPTOR); |
4990 _assertValidTaskResults(source, ReadyLibraryElement2Task.DESCRIPTOR); | 4993 _assertValidTaskResults(source, ReadyLibraryElement2Task.DESCRIPTOR); |
4991 _assertValidTaskResults(source, ComputeLibraryCycleTask.DESCRIPTOR); | 4994 _assertValidTaskResults(source, ComputeLibraryCycleTask.DESCRIPTOR); |
4992 // Unit results. | 4995 // Unit results. |
4993 _assertUnitValidTaskResults( | 4996 _assertUnitValidTaskResults( |
4994 source, BuildCompilationUnitElementTask.DESCRIPTOR); | 4997 source, BuildCompilationUnitElementTask.DESCRIPTOR); |
4995 _assertUnitValidTaskResults( | 4998 _assertUnitValidTaskResults( |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5181 * Initialize the visitor. | 5184 * Initialize the visitor. |
5182 */ | 5185 */ |
5183 _ElementGatherer(); | 5186 _ElementGatherer(); |
5184 | 5187 |
5185 @override | 5188 @override |
5186 void visitElement(Element element) { | 5189 void visitElement(Element element) { |
5187 elements[element] = element; | 5190 elements[element] = element; |
5188 super.visitElement(element); | 5191 super.visitElement(element); |
5189 } | 5192 } |
5190 } | 5193 } |
OLD | NEW |