| 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 analyzer.src.context.context; | 5 library analyzer.src.context.context; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 | 9 |
| 10 import 'package:analyzer/instrumentation/instrumentation.dart'; | 10 import 'package:analyzer/instrumentation/instrumentation.dart'; |
| 11 import 'package:analyzer/plugin/task.dart'; | 11 import 'package:analyzer/plugin/task.dart'; |
| 12 import 'package:analyzer/source/embedder.dart'; | 12 import 'package:analyzer/source/embedder.dart'; |
| 13 import 'package:analyzer/src/cancelable_future.dart'; | 13 import 'package:analyzer/src/cancelable_future.dart'; |
| 14 import 'package:analyzer/src/context/cache.dart'; | 14 import 'package:analyzer/src/context/cache.dart'; |
| 15 import 'package:analyzer/src/generated/ast.dart'; | 15 import 'package:analyzer/src/generated/ast.dart'; |
| 16 import 'package:analyzer/src/generated/constant.dart'; | 16 import 'package:analyzer/src/generated/constant.dart'; |
| 17 import 'package:analyzer/src/generated/element.dart'; | 17 import 'package:analyzer/src/generated/element.dart'; |
| 18 import 'package:analyzer/src/generated/engine.dart'; | 18 import 'package:analyzer/src/generated/engine.dart'; |
| 19 import 'package:analyzer/src/generated/error.dart'; | 19 import 'package:analyzer/src/generated/error.dart'; |
| 20 import 'package:analyzer/src/generated/html.dart' as ht show HtmlUnit; | |
| 21 import 'package:analyzer/src/generated/incremental_resolver.dart'; | 20 import 'package:analyzer/src/generated/incremental_resolver.dart'; |
| 22 import 'package:analyzer/src/generated/java_core.dart'; | 21 import 'package:analyzer/src/generated/java_core.dart'; |
| 23 import 'package:analyzer/src/generated/java_engine.dart'; | 22 import 'package:analyzer/src/generated/java_engine.dart'; |
| 24 import 'package:analyzer/src/generated/resolver.dart'; | 23 import 'package:analyzer/src/generated/resolver.dart'; |
| 25 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; | 24 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; |
| 26 import 'package:analyzer/src/generated/source.dart'; | 25 import 'package:analyzer/src/generated/source.dart'; |
| 27 import 'package:analyzer/src/generated/utilities_collection.dart'; | 26 import 'package:analyzer/src/generated/utilities_collection.dart'; |
| 28 import 'package:analyzer/src/task/dart.dart'; | 27 import 'package:analyzer/src/task/dart.dart'; |
| 29 import 'package:analyzer/src/task/dart_work_manager.dart'; | 28 import 'package:analyzer/src/task/dart_work_manager.dart'; |
| 30 import 'package:analyzer/src/task/driver.dart'; | 29 import 'package:analyzer/src/task/driver.dart'; |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 */ | 197 */ |
| 199 Source incrementalResolutionValidation_lastLibrarySource; | 198 Source incrementalResolutionValidation_lastLibrarySource; |
| 200 | 199 |
| 201 /** | 200 /** |
| 202 * The result of incremental resolution result of | 201 * The result of incremental resolution result of |
| 203 * [incrementalResolutionValidation_lastSource]. | 202 * [incrementalResolutionValidation_lastSource]. |
| 204 */ | 203 */ |
| 205 CompilationUnit incrementalResolutionValidation_lastUnit; | 204 CompilationUnit incrementalResolutionValidation_lastUnit; |
| 206 | 205 |
| 207 /** | 206 /** |
| 208 * A factory to override how the [ResolverVisitor] is created. | |
| 209 */ | |
| 210 ResolverVisitorFactory resolverVisitorFactory; | |
| 211 | |
| 212 /** | |
| 213 * A factory to override how the [TypeResolverVisitor] is created. | |
| 214 */ | |
| 215 TypeResolverVisitorFactory typeResolverVisitorFactory; | |
| 216 | |
| 217 /** | |
| 218 * Initialize a newly created analysis context. | 207 * Initialize a newly created analysis context. |
| 219 */ | 208 */ |
| 220 AnalysisContextImpl() { | 209 AnalysisContextImpl() { |
| 221 _privatePartition = new UniversalCachePartition(this); | 210 _privatePartition = new UniversalCachePartition(this); |
| 222 _cache = createCacheFromSourceFactory(null); | 211 _cache = createCacheFromSourceFactory(null); |
| 223 _taskManager = AnalysisEngine.instance.taskManager; | 212 _taskManager = AnalysisEngine.instance.taskManager; |
| 224 for (WorkManagerFactory factory | 213 for (WorkManagerFactory factory |
| 225 in AnalysisEngine.instance.enginePlugin.workManagerFactories) { | 214 in AnalysisEngine.instance.enginePlugin.workManagerFactories) { |
| 226 WorkManager workManager = factory(this); | 215 WorkManager workManager = factory(this); |
| 227 if (workManager != null) { | 216 if (workManager != null) { |
| (...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 587 return computeResult(source, HTML_ERRORS); | 576 return computeResult(source, HTML_ERRORS); |
| 588 } | 577 } |
| 589 return computeResult(source, DART_ERRORS); | 578 return computeResult(source, DART_ERRORS); |
| 590 } | 579 } |
| 591 | 580 |
| 592 @override | 581 @override |
| 593 List<Source> computeExportedLibraries(Source source) => | 582 List<Source> computeExportedLibraries(Source source) => |
| 594 computeResult(source, EXPORTED_LIBRARIES); | 583 computeResult(source, EXPORTED_LIBRARIES); |
| 595 | 584 |
| 596 @override | 585 @override |
| 597 @deprecated | |
| 598 HtmlElement computeHtmlElement(Source source) { | |
| 599 // TODO(brianwilkerson) Remove this method after switching to the new task | |
| 600 // model. | |
| 601 throw new UnimplementedError('Not supported in the new task model'); | |
| 602 } | |
| 603 | |
| 604 @override | |
| 605 List<Source> computeImportedLibraries(Source source) => | 586 List<Source> computeImportedLibraries(Source source) => |
| 606 computeResult(source, EXPLICITLY_IMPORTED_LIBRARIES); | 587 computeResult(source, EXPLICITLY_IMPORTED_LIBRARIES); |
| 607 | 588 |
| 608 @override | 589 @override |
| 609 SourceKind computeKindOf(Source source) { | 590 SourceKind computeKindOf(Source source) { |
| 610 String name = source.shortName; | 591 String name = source.shortName; |
| 611 if (AnalysisEngine.isDartFileName(name)) { | 592 if (AnalysisEngine.isDartFileName(name)) { |
| 612 return computeResult(source, SOURCE_KIND); | 593 return computeResult(source, SOURCE_KIND); |
| 613 } else if (AnalysisEngine.isHtmlFileName(name)) { | 594 } else if (AnalysisEngine.isHtmlFileName(name)) { |
| 614 return SourceKind.HTML; | 595 return SourceKind.HTML; |
| 615 } | 596 } |
| 616 return SourceKind.UNKNOWN; | 597 return SourceKind.UNKNOWN; |
| 617 } | 598 } |
| 618 | 599 |
| 619 @override | 600 @override |
| 620 LibraryElement computeLibraryElement(Source source) { | 601 LibraryElement computeLibraryElement(Source source) { |
| 621 //_computeResult(source, HtmlEntry.ELEMENT); | 602 //_computeResult(source, HtmlEntry.ELEMENT); |
| 622 return computeResult(source, LIBRARY_ELEMENT); | 603 return computeResult(source, LIBRARY_ELEMENT); |
| 623 } | 604 } |
| 624 | 605 |
| 625 @override | 606 @override |
| 626 LineInfo computeLineInfo(Source source) => computeResult(source, LINE_INFO); | 607 LineInfo computeLineInfo(Source source) => computeResult(source, LINE_INFO); |
| 627 | 608 |
| 628 @override | 609 @override |
| 629 @deprecated | |
| 630 CompilationUnit computeResolvableCompilationUnit(Source source) { | |
| 631 return null; | |
| 632 } | |
| 633 | |
| 634 @override | |
| 635 CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync( | 610 CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync( |
| 636 Source unitSource, Source librarySource) { | 611 Source unitSource, Source librarySource) { |
| 637 if (!AnalysisEngine.isDartFileName(unitSource.shortName) || | 612 if (!AnalysisEngine.isDartFileName(unitSource.shortName) || |
| 638 !AnalysisEngine.isDartFileName(librarySource.shortName)) { | 613 !AnalysisEngine.isDartFileName(librarySource.shortName)) { |
| 639 return new CancelableFuture.error(new AnalysisNotScheduledError()); | 614 return new CancelableFuture.error(new AnalysisNotScheduledError()); |
| 640 } | 615 } |
| 641 return new AnalysisFutureHelper<CompilationUnit>( | 616 return new AnalysisFutureHelper<CompilationUnit>( |
| 642 this, | 617 this, |
| 643 new LibrarySpecificUnit(librarySource, unitSource), | 618 new LibrarySpecificUnit(librarySource, unitSource), |
| 644 RESOLVED_UNIT).computeAsync(); | 619 RESOLVED_UNIT).computeAsync(); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 808 List<AnalysisError> allErrors = <AnalysisError>[]; | 783 List<AnalysisError> allErrors = <AnalysisError>[]; |
| 809 for (WorkManager workManager in workManagers) { | 784 for (WorkManager workManager in workManagers) { |
| 810 List<AnalysisError> errors = workManager.getErrors(source); | 785 List<AnalysisError> errors = workManager.getErrors(source); |
| 811 allErrors.addAll(errors); | 786 allErrors.addAll(errors); |
| 812 } | 787 } |
| 813 LineInfo lineInfo = getLineInfo(source); | 788 LineInfo lineInfo = getLineInfo(source); |
| 814 return new AnalysisErrorInfoImpl(allErrors, lineInfo); | 789 return new AnalysisErrorInfoImpl(allErrors, lineInfo); |
| 815 } | 790 } |
| 816 | 791 |
| 817 @override | 792 @override |
| 818 @deprecated | |
| 819 HtmlElement getHtmlElement(Source source) { | |
| 820 // TODO(brianwilkerson) Remove this method after switching to the new task | |
| 821 // model. | |
| 822 throw new UnimplementedError('Not supported in the new task model'); | |
| 823 } | |
| 824 | |
| 825 @override | |
| 826 List<Source> getHtmlFilesReferencing(Source source) { | 793 List<Source> getHtmlFilesReferencing(Source source) { |
| 827 if (!AnalysisEngine.isDartFileName(source.shortName)) { | 794 if (!AnalysisEngine.isDartFileName(source.shortName)) { |
| 828 return Source.EMPTY_LIST; | 795 return Source.EMPTY_LIST; |
| 829 } | 796 } |
| 830 List<Source> htmlSources = <Source>[]; | 797 List<Source> htmlSources = <Source>[]; |
| 831 List<Source> librarySources = getLibrariesContaining(source); | 798 List<Source> librarySources = getLibrariesContaining(source); |
| 832 for (Source source in _cache.sources) { | 799 for (Source source in _cache.sources) { |
| 833 if (AnalysisEngine.isHtmlFileName(source.shortName)) { | 800 if (AnalysisEngine.isHtmlFileName(source.shortName)) { |
| 834 List<Source> referencedLibraries = | 801 List<Source> referencedLibraries = |
| 835 getResult(source, REFERENCED_LIBRARIES); | 802 getResult(source, REFERENCED_LIBRARIES); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 947 Source unitSource, Source librarySource) { | 914 Source unitSource, Source librarySource) { |
| 948 if (!AnalysisEngine.isDartFileName(unitSource.shortName) || | 915 if (!AnalysisEngine.isDartFileName(unitSource.shortName) || |
| 949 !AnalysisEngine.isDartFileName(librarySource.shortName)) { | 916 !AnalysisEngine.isDartFileName(librarySource.shortName)) { |
| 950 return null; | 917 return null; |
| 951 } | 918 } |
| 952 return getResult( | 919 return getResult( |
| 953 new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT); | 920 new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT); |
| 954 } | 921 } |
| 955 | 922 |
| 956 @override | 923 @override |
| 957 @deprecated | |
| 958 ht.HtmlUnit getResolvedHtmlUnit(Source htmlSource) { | |
| 959 // TODO(brianwilkerson) Remove this method after switching to the new task | |
| 960 // model. | |
| 961 throw new UnimplementedError('Not supported in the new task model'); | |
| 962 } | |
| 963 | |
| 964 @override | |
| 965 Object getResult(AnalysisTarget target, ResultDescriptor result) { | 924 Object getResult(AnalysisTarget target, ResultDescriptor result) { |
| 966 return _cache.getValue(target, result); | 925 return _cache.getValue(target, result); |
| 967 } | 926 } |
| 968 | 927 |
| 969 @override | 928 @override |
| 970 List<Source> getSourcesWithFullName(String path) { | 929 List<Source> getSourcesWithFullName(String path) { |
| 971 return analysisCache.getSourcesWithFullName(path); | 930 return analysisCache.getSourcesWithFullName(path); |
| 972 } | 931 } |
| 973 | 932 |
| 974 @override | 933 @override |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1076 | 1035 |
| 1077 @override | 1036 @override |
| 1078 Document parseHtmlDocument(Source source) { | 1037 Document parseHtmlDocument(Source source) { |
| 1079 if (!AnalysisEngine.isHtmlFileName(source.shortName)) { | 1038 if (!AnalysisEngine.isHtmlFileName(source.shortName)) { |
| 1080 return null; | 1039 return null; |
| 1081 } | 1040 } |
| 1082 return computeResult(source, HTML_DOCUMENT); | 1041 return computeResult(source, HTML_DOCUMENT); |
| 1083 } | 1042 } |
| 1084 | 1043 |
| 1085 @override | 1044 @override |
| 1086 @deprecated // use parseHtmlDocument(source) | |
| 1087 ht.HtmlUnit parseHtmlUnit(Source source) { | |
| 1088 // TODO(brianwilkerson) Remove this method after switching to the new task | |
| 1089 // model. | |
| 1090 throw new UnimplementedError('Not supported in the new task model'); | |
| 1091 } | |
| 1092 | |
| 1093 @override | |
| 1094 AnalysisResult performAnalysisTask() { | 1045 AnalysisResult performAnalysisTask() { |
| 1095 return PerformanceStatistics.performAnaysis.makeCurrentWhile(() { | 1046 return PerformanceStatistics.performAnaysis.makeCurrentWhile(() { |
| 1096 _evaluatePendingFutures(); | 1047 _evaluatePendingFutures(); |
| 1097 bool done = !driver.performAnalysisTask(); | 1048 bool done = !driver.performAnalysisTask(); |
| 1098 List<ChangeNotice> notices = _getChangeNotices(done); | 1049 List<ChangeNotice> notices = _getChangeNotices(done); |
| 1099 if (notices != null) { | 1050 if (notices != null) { |
| 1100 int noticeCount = notices.length; | 1051 int noticeCount = notices.length; |
| 1101 for (int i = 0; i < noticeCount; i++) { | 1052 for (int i = 0; i < noticeCount; i++) { |
| 1102 ChangeNotice notice = notices[i]; | 1053 ChangeNotice notice = notices[i]; |
| 1103 _notifyErrors(notice.source, notice.errors, notice.lineInfo); | 1054 _notifyErrors(notice.source, notice.errors, notice.lineInfo); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1193 } | 1144 } |
| 1194 | 1145 |
| 1195 @override | 1146 @override |
| 1196 CompilationUnit resolveCompilationUnit2( | 1147 CompilationUnit resolveCompilationUnit2( |
| 1197 Source unitSource, Source librarySource) { | 1148 Source unitSource, Source librarySource) { |
| 1198 return computeResult( | 1149 return computeResult( |
| 1199 new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT); | 1150 new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT); |
| 1200 } | 1151 } |
| 1201 | 1152 |
| 1202 @override | 1153 @override |
| 1203 @deprecated | |
| 1204 ht.HtmlUnit resolveHtmlUnit(Source htmlSource) { | |
| 1205 // TODO(brianwilkerson) Remove this method after switching to the new task | |
| 1206 // model. | |
| 1207 throw new UnimplementedError('Not supported in the new task model'); | |
| 1208 } | |
| 1209 | |
| 1210 @override | |
| 1211 void setChangedContents(Source source, String contents, int offset, | 1154 void setChangedContents(Source source, String contents, int offset, |
| 1212 int oldLength, int newLength) { | 1155 int oldLength, int newLength) { |
| 1213 if (_contentRangeChanged(source, contents, offset, oldLength, newLength)) { | 1156 if (_contentRangeChanged(source, contents, offset, oldLength, newLength)) { |
| 1214 _onSourcesChangedController.add(new SourcesChangedEvent.changedRange( | 1157 _onSourcesChangedController.add(new SourcesChangedEvent.changedRange( |
| 1215 source, contents, offset, oldLength, newLength)); | 1158 source, contents, offset, oldLength, newLength)); |
| 1216 } | 1159 } |
| 1217 } | 1160 } |
| 1218 | 1161 |
| 1219 @override | 1162 @override |
| 1220 void setConfigurationData(ResultDescriptor key, Object data) { | 1163 void setConfigurationData(ResultDescriptor key, Object data) { |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1300 buffer.writeln(" removed"); | 1243 buffer.writeln(" removed"); |
| 1301 for (Source source in missingSources) { | 1244 for (Source source in missingSources) { |
| 1302 buffer.write(" "); | 1245 buffer.write(" "); |
| 1303 buffer.writeln(source.fullName); | 1246 buffer.writeln(source.fullName); |
| 1304 } | 1247 } |
| 1305 _logInformation(buffer.toString()); | 1248 _logInformation(buffer.toString()); |
| 1306 } | 1249 } |
| 1307 return changedSources.length > 0; | 1250 return changedSources.length > 0; |
| 1308 } | 1251 } |
| 1309 | 1252 |
| 1310 @deprecated | |
| 1311 @override | |
| 1312 void visitCacheItems(void callback( | |
| 1313 Source source, dynamic dartEntry, dynamic rowDesc, CacheState state)) {} | |
| 1314 | |
| 1315 @override | 1253 @override |
| 1316 void visitContentCache(ContentCacheVisitor visitor) { | 1254 void visitContentCache(ContentCacheVisitor visitor) { |
| 1317 _contentCache.accept(visitor); | 1255 _contentCache.accept(visitor); |
| 1318 } | 1256 } |
| 1319 | 1257 |
| 1320 /** | 1258 /** |
| 1321 * Add all of the sources contained in the given source [container] to the | 1259 * Add all of the sources contained in the given source [container] to the |
| 1322 * given list of [sources]. | 1260 * given list of [sources]. |
| 1323 */ | 1261 */ |
| 1324 void _addSourcesInContainer(List<Source> sources, SourceContainer container) { | 1262 void _addSourcesInContainer(List<Source> sources, SourceContainer container) { |
| (...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2074 } | 2012 } |
| 2075 DartSdk sdk = factory.dartSdk; | 2013 DartSdk sdk = factory.dartSdk; |
| 2076 if (sdk == null) { | 2014 if (sdk == null) { |
| 2077 throw new IllegalArgumentException( | 2015 throw new IllegalArgumentException( |
| 2078 "The source factory for an SDK analysis context must have a DartUriRes
olver"); | 2016 "The source factory for an SDK analysis context must have a DartUriRes
olver"); |
| 2079 } | 2017 } |
| 2080 return new AnalysisCache( | 2018 return new AnalysisCache( |
| 2081 <CachePartition>[AnalysisEngine.instance.partitionManager.forSdk(sdk)]); | 2019 <CachePartition>[AnalysisEngine.instance.partitionManager.forSdk(sdk)]); |
| 2082 } | 2020 } |
| 2083 } | 2021 } |
| OLD | NEW |