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/src/cancelable_future.dart'; | 10 import 'package:analyzer/src/cancelable_future.dart'; |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 * Return a list of the sources that would be processed by | 362 * Return a list of the sources that would be processed by |
363 * [performAnalysisTask]. This method duplicates, and must therefore be kept | 363 * [performAnalysisTask]. This method duplicates, and must therefore be kept |
364 * in sync with, [getNextAnalysisTask]. This method is intended to be used for | 364 * in sync with, [getNextAnalysisTask]. This method is intended to be used for |
365 * testing purposes only. | 365 * testing purposes only. |
366 */ | 366 */ |
367 List<Source> get sourcesNeedingProcessing { | 367 List<Source> get sourcesNeedingProcessing { |
368 HashSet<Source> sources = new HashSet<Source>(); | 368 HashSet<Source> sources = new HashSet<Source>(); |
369 bool hintsEnabled = _options.hint; | 369 bool hintsEnabled = _options.hint; |
370 bool lintsEnabled = _options.lint; | 370 bool lintsEnabled = _options.lint; |
371 | 371 |
372 MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator(); | 372 MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _privatePartition.i
terator(); |
373 while (iterator.moveNext()) { | 373 while (iterator.moveNext()) { |
374 AnalysisTarget target = iterator.key; | 374 AnalysisTarget target = iterator.key; |
375 if (target is Source) { | 375 if (target is Source) { |
376 _getSourcesNeedingProcessing( | 376 _getSourcesNeedingProcessing( |
377 target, iterator.value, false, hintsEnabled, lintsEnabled, sources); | 377 target, iterator.value, false, hintsEnabled, lintsEnabled, sources); |
378 } | 378 } |
379 } | 379 } |
380 return new List<Source>.from(sources); | 380 return new List<Source>.from(sources); |
381 } | 381 } |
382 | 382 |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 | 550 |
551 @override | 551 @override |
552 // TODO(brianwilkerson) Implement this. | 552 // TODO(brianwilkerson) Implement this. |
553 HtmlElement computeHtmlElement(Source source) => null; | 553 HtmlElement computeHtmlElement(Source source) => null; |
554 | 554 |
555 @override | 555 @override |
556 List<Source> computeImportedLibraries(Source source) => | 556 List<Source> computeImportedLibraries(Source source) => |
557 _computeResult(source, IMPORTED_LIBRARIES); | 557 _computeResult(source, IMPORTED_LIBRARIES); |
558 | 558 |
559 @override | 559 @override |
560 SourceKind computeKindOf(Source source) => | 560 SourceKind computeKindOf(Source source) { |
561 _computeResult(source, SOURCE_KIND); | 561 String name = source.shortName; |
| 562 if (AnalysisEngine.isDartFileName(name)) { |
| 563 return _computeResult(source, SOURCE_KIND); |
| 564 } else if (AnalysisEngine.isHtmlFileName(name)) { |
| 565 return SourceKind.HTML; |
| 566 } |
| 567 return SourceKind.UNKNOWN; |
| 568 } |
562 | 569 |
563 @override | 570 @override |
564 LibraryElement computeLibraryElement(Source source) => _computeResult( | 571 LibraryElement computeLibraryElement(Source source) => _computeResult( |
565 source, LIBRARY_ELEMENT); //_computeResult(source, HtmlEntry.ELEMENT); | 572 source, LIBRARY_ELEMENT); //_computeResult(source, HtmlEntry.ELEMENT); |
566 | 573 |
567 @override | 574 @override |
568 LineInfo computeLineInfo(Source source) => _computeResult(source, LINE_INFO); | 575 LineInfo computeLineInfo(Source source) => _computeResult(source, LINE_INFO); |
569 | 576 |
570 @override | 577 @override |
571 @deprecated | 578 @deprecated |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
810 } | 817 } |
811 break; | 818 break; |
812 } | 819 } |
813 if (htmlSources.isEmpty) { | 820 if (htmlSources.isEmpty) { |
814 return Source.EMPTY_LIST; | 821 return Source.EMPTY_LIST; |
815 } | 822 } |
816 return htmlSources; | 823 return htmlSources; |
817 } | 824 } |
818 | 825 |
819 @override | 826 @override |
820 SourceKind getKindOf(Source source) => _getResult(source, SOURCE_KIND); | 827 SourceKind getKindOf(Source source) { |
| 828 String name = source.shortName; |
| 829 if (AnalysisEngine.isDartFileName(name)) { |
| 830 return _getResult(source, SOURCE_KIND); |
| 831 } else if (AnalysisEngine.isHtmlFileName(name)) { |
| 832 return SourceKind.HTML; |
| 833 } |
| 834 return SourceKind.UNKNOWN; |
| 835 } |
821 | 836 |
822 @override | 837 @override |
823 List<Source> getLibrariesContaining(Source source) { | 838 List<Source> getLibrariesContaining(Source source) { |
824 // TODO(brianwilkerson) Implement this. | 839 SourceKind kind = getKindOf(source); |
825 // cache.CacheEntry sourceEntry = _cache.get(source); | 840 if (kind == SourceKind.LIBRARY) { |
826 // if (sourceEntry is DartEntry) { | 841 return <Source>[source]; |
827 // return sourceEntry.containingLibraries; | 842 } else if (kind == SourceKind.PART) { |
828 // } | 843 List<Source> libraries = <Source>[]; |
829 return Source.EMPTY_LIST; | 844 MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator()
; |
| 845 while (iterator.moveNext()) { |
| 846 AnalysisTarget target = iterator.key; |
| 847 if (target is Source && getKindOf(target) == SourceKind.LIBRARY) { |
| 848 List<Source> parts = _getResult(target, INCLUDED_PARTS); |
| 849 if (parts.contains(source)) { |
| 850 libraries.add(target); |
| 851 } |
| 852 } |
| 853 } |
| 854 if (libraries.isNotEmpty) { |
| 855 return libraries; |
| 856 } |
| 857 } |
| 858 return Source.EMPTY_ARRAY; |
830 } | 859 } |
831 | 860 |
832 @override | 861 @override |
833 List<Source> getLibrariesDependingOn(Source librarySource) { | 862 List<Source> getLibrariesDependingOn(Source librarySource) { |
834 List<Source> dependentLibraries = new List<Source>(); | 863 List<Source> dependentLibraries = new List<Source>(); |
835 MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator(); | 864 MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator(); |
836 while (iterator.moveNext()) { | 865 while (iterator.moveNext()) { |
837 cache.CacheEntry entry = iterator.value; | 866 cache.CacheEntry entry = iterator.value; |
838 if (entry.getValue(SOURCE_KIND) == SourceKind.LIBRARY) { | 867 if (entry.getValue(SOURCE_KIND) == SourceKind.LIBRARY) { |
839 if (_contains(entry.getValue(EXPORTED_LIBRARIES), librarySource)) { | 868 if (_contains(entry.getValue(EXPORTED_LIBRARIES), librarySource)) { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
884 // TODO(brianwilkerson) The public namespace used to be cached, but no | 913 // TODO(brianwilkerson) The public namespace used to be cached, but no |
885 // longer is. Konstantin adds: | 914 // longer is. Konstantin adds: |
886 // The only client of this method is NamespaceBuilder._createExportMapping()
, | 915 // The only client of this method is NamespaceBuilder._createExportMapping()
, |
887 // and it is not used with tasks - instead we compute export namespace once | 916 // and it is not used with tasks - instead we compute export namespace once |
888 // using BuildExportNamespaceTask and reuse in scopes. | 917 // using BuildExportNamespaceTask and reuse in scopes. |
889 NamespaceBuilder builder = new NamespaceBuilder(); | 918 NamespaceBuilder builder = new NamespaceBuilder(); |
890 return builder.createPublicNamespaceForLibrary(library); | 919 return builder.createPublicNamespaceForLibrary(library); |
891 } | 920 } |
892 | 921 |
893 /** | 922 /** |
894 * Return the cache entry associated with the given [source], or `null` if | 923 * Return the cache entry associated with the given [target], or `null` if |
895 * there is no entry associated with the source. | 924 * there is no entry associated with the target. |
896 */ | 925 */ |
897 cache.CacheEntry getReadableSourceEntryOrNull(Source source) => | 926 cache.CacheEntry getReadableSourceEntryOrNull(AnalysisTarget target) => |
898 _cache.get(source); | 927 _cache.get(target); |
899 | 928 |
900 @override | 929 @override |
901 CompilationUnit getResolvedCompilationUnit( | 930 CompilationUnit getResolvedCompilationUnit( |
902 Source unitSource, LibraryElement library) { | 931 Source unitSource, LibraryElement library) { |
903 if (library == null || | 932 if (library == null || |
904 !AnalysisEngine.isDartFileName(unitSource.shortName)) { | 933 !AnalysisEngine.isDartFileName(unitSource.shortName)) { |
905 return null; | 934 return null; |
906 } | 935 } |
907 return getResolvedCompilationUnit2(unitSource, library.source); | 936 return getResolvedCompilationUnit2(unitSource, library.source); |
908 } | 937 } |
(...skipping 1232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2141 PendingFuture pendingFuture = | 2170 PendingFuture pendingFuture = |
2142 new PendingFuture<T>(_context, target, computeValue); | 2171 new PendingFuture<T>(_context, target, computeValue); |
2143 if (!pendingFuture.evaluate(entry)) { | 2172 if (!pendingFuture.evaluate(entry)) { |
2144 _context._pendingFutureTargets | 2173 _context._pendingFutureTargets |
2145 .putIfAbsent(target, () => <PendingFuture>[]) | 2174 .putIfAbsent(target, () => <PendingFuture>[]) |
2146 .add(pendingFuture); | 2175 .add(pendingFuture); |
2147 } | 2176 } |
2148 return pendingFuture.future; | 2177 return pendingFuture.future; |
2149 } | 2178 } |
2150 } | 2179 } |
OLD | NEW |