Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: pkg/analyzer/lib/src/context/context.dart

Issue 1139643004: Add AnalysisCache.getState() and getValue(). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 206
207 @override 207 @override
208 void set analysisOptions(AnalysisOptions options) { 208 void set analysisOptions(AnalysisOptions options) {
209 bool needsRecompute = this._options.analyzeFunctionBodiesPredicate != 209 bool needsRecompute = this._options.analyzeFunctionBodiesPredicate !=
210 options.analyzeFunctionBodiesPredicate || 210 options.analyzeFunctionBodiesPredicate ||
211 this._options.generateImplicitErrors != 211 this._options.generateImplicitErrors !=
212 options.generateImplicitErrors || 212 options.generateImplicitErrors ||
213 this._options.generateSdkErrors != options.generateSdkErrors || 213 this._options.generateSdkErrors != options.generateSdkErrors ||
214 this._options.dart2jsHint != options.dart2jsHint || 214 this._options.dart2jsHint != options.dart2jsHint ||
215 (this._options.hint && !options.hint) || 215 (this._options.hint && !options.hint) ||
216 (this._options.lint && !options.lint) || 216 (this._options.lint && !options.lint) ||
217 this._options.preserveComments != options.preserveComments || 217 this._options.preserveComments != options.preserveComments ||
218 this._options.enableNullAwareOperators != 218 this._options.enableNullAwareOperators !=
219 options.enableNullAwareOperators || 219 options.enableNullAwareOperators ||
220 this._options.enableStrictCallChecks != options.enableStrictCallChecks; 220 this._options.enableStrictCallChecks != options.enableStrictCallChecks;
221 int cacheSize = options.cacheSize; 221 int cacheSize = options.cacheSize;
222 if (this._options.cacheSize != cacheSize) { 222 if (this._options.cacheSize != cacheSize) {
223 this._options.cacheSize = cacheSize; 223 this._options.cacheSize = cacheSize;
224 } 224 }
225 this._options.analyzeFunctionBodiesPredicate = 225 this._options.analyzeFunctionBodiesPredicate =
226 options.analyzeFunctionBodiesPredicate; 226 options.analyzeFunctionBodiesPredicate;
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 } 637 }
638 638
639 @override 639 @override
640 List<CompilationUnit> ensureResolvedDartUnits(Source unitSource) { 640 List<CompilationUnit> ensureResolvedDartUnits(Source unitSource) {
641 // Check every library. 641 // Check every library.
642 List<CompilationUnit> units = <CompilationUnit>[]; 642 List<CompilationUnit> units = <CompilationUnit>[];
643 List<Source> containingLibraries = getLibrariesContaining(unitSource); 643 List<Source> containingLibraries = getLibrariesContaining(unitSource);
644 for (Source librarySource in containingLibraries) { 644 for (Source librarySource in containingLibraries) {
645 LibrarySpecificUnit target = 645 LibrarySpecificUnit target =
646 new LibrarySpecificUnit(librarySource, unitSource); 646 new LibrarySpecificUnit(librarySource, unitSource);
647 CompilationUnit unit = _getResult(target, RESOLVED_UNIT); 647 CompilationUnit unit = _cache.getValue(target, RESOLVED_UNIT);
648 if (unit == null) { 648 if (unit == null) {
649 units = null; 649 units = null;
650 break; 650 break;
651 } 651 }
652 units.add(unit); 652 units.add(unit);
653 } 653 }
654 // If we have results, then we're done. 654 // If we have results, then we're done.
655 if (units != null) { 655 if (units != null) {
656 return units; 656 return units;
657 } 657 }
658 // Schedule recomputing RESOLVED_UNIT results. 658 // Schedule recomputing RESOLVED_UNIT results.
659 for (Source librarySource in containingLibraries) { 659 for (Source librarySource in containingLibraries) {
660 LibrarySpecificUnit target = 660 LibrarySpecificUnit target =
661 new LibrarySpecificUnit(librarySource, unitSource); 661 new LibrarySpecificUnit(librarySource, unitSource);
662 if (_getResultState(target, RESOLVED_UNIT) == CacheState.FLUSHED) { 662 if (_cache.getState(target, RESOLVED_UNIT) == CacheState.FLUSHED) {
663 dartWorkManager.addPriorityResult(target, RESOLVED_UNIT); 663 dartWorkManager.addPriorityResult(target, RESOLVED_UNIT);
664 } 664 }
665 } 665 }
666 return null; 666 return null;
667 } 667 }
668 668
669 @override 669 @override
670 bool exists(Source source) { 670 bool exists(Source source) {
671 if (source == null) { 671 if (source == null) {
672 return false; 672 return false;
(...skipping 11 matching lines...) Expand all
684 entry = new cache.CacheEntry(target); 684 entry = new cache.CacheEntry(target);
685 _cache.put(entry); 685 _cache.put(entry);
686 } 686 }
687 return entry; 687 return entry;
688 } 688 }
689 689
690 @override 690 @override
691 CompilationUnitElement getCompilationUnitElement( 691 CompilationUnitElement getCompilationUnitElement(
692 Source unitSource, Source librarySource) { 692 Source unitSource, Source librarySource) {
693 AnalysisTarget target = new LibrarySpecificUnit(librarySource, unitSource); 693 AnalysisTarget target = new LibrarySpecificUnit(librarySource, unitSource);
694 return _getResult(target, COMPILATION_UNIT_ELEMENT); 694 return _cache.getValue(target, COMPILATION_UNIT_ELEMENT);
695 } 695 }
696 696
697 @override 697 @override
698 TimestampedData<String> getContents(Source source) { 698 TimestampedData<String> getContents(Source source) {
699 String contents = _contentCache.getContents(source); 699 String contents = _contentCache.getContents(source);
700 if (contents != null) { 700 if (contents != null) {
701 return new TimestampedData<String>( 701 return new TimestampedData<String>(
702 _contentCache.getModificationStamp(source), contents); 702 _contentCache.getModificationStamp(source), contents);
703 } 703 }
704 return source.contents; 704 return source.contents;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 } 739 }
740 740
741 @override 741 @override
742 AnalysisErrorInfo getErrors(Source source) { 742 AnalysisErrorInfo getErrors(Source source) {
743 // TODO(brianwilkerson) Figure out how to implement this cleanly. The 743 // TODO(brianwilkerson) Figure out how to implement this cleanly. The
744 // problem is that _getResult doesn't know to go into the individual inputs 744 // problem is that _getResult doesn't know to go into the individual inputs
745 // for the task to get their values for tasks that are just merging other 745 // for the task to get their values for tasks that are just merging other
746 // result values. Therefore, if some, but not all, of the error lists have 746 // result values. Therefore, if some, but not all, of the error lists have
747 // been computed, no errors will be returned by it. 747 // been computed, no errors will be returned by it.
748 List<List<AnalysisError>> errorLists = <List<AnalysisError>>[]; 748 List<List<AnalysisError>> errorLists = <List<AnalysisError>>[];
749 errorLists.add(_getResult(source, BUILD_DIRECTIVES_ERRORS)); 749 errorLists.add(_cache.getValue(source, BUILD_DIRECTIVES_ERRORS));
750 errorLists.add(_getResult(source, BUILD_LIBRARY_ERRORS)); 750 errorLists.add(_cache.getValue(source, BUILD_LIBRARY_ERRORS));
751 errorLists.add(_getResult(source, PARSE_ERRORS)); 751 errorLists.add(_cache.getValue(source, PARSE_ERRORS));
752 errorLists.add(_getResult(source, SCAN_ERRORS)); 752 errorLists.add(_cache.getValue(source, SCAN_ERRORS));
753 for (Source library in getLibrariesContaining(source)) { 753 for (Source library in getLibrariesContaining(source)) {
754 LibrarySpecificUnit unit = new LibrarySpecificUnit(library, source); 754 LibrarySpecificUnit unit = new LibrarySpecificUnit(library, source);
755 errorLists.add(_getResult(unit, BUILD_FUNCTION_TYPE_ALIASES_ERRORS)); 755 errorLists.add(_cache.getValue(unit, BUILD_FUNCTION_TYPE_ALIASES_ERRORS));
756 errorLists.add(_getResult(unit, HINTS)); 756 errorLists.add(_cache.getValue(unit, HINTS));
757 errorLists.add(_getResult(unit, RESOLVE_REFERENCES_ERRORS)); 757 errorLists.add(_cache.getValue(unit, RESOLVE_REFERENCES_ERRORS));
758 errorLists.add(_getResult(unit, RESOLVE_TYPE_NAMES_ERRORS)); 758 errorLists.add(_cache.getValue(unit, RESOLVE_TYPE_NAMES_ERRORS));
759 errorLists.add(_getResult(unit, VERIFY_ERRORS)); 759 errorLists.add(_cache.getValue(unit, VERIFY_ERRORS));
760 } 760 }
761 LineInfo lineInfo = _getResult(source, LINE_INFO); 761 LineInfo lineInfo = _cache.getValue(source, LINE_INFO);
762 return new AnalysisErrorInfoImpl( 762 return new AnalysisErrorInfoImpl(
763 AnalysisError.mergeLists(errorLists), lineInfo); 763 AnalysisError.mergeLists(errorLists), lineInfo);
764 } 764 }
765 765
766 @override 766 @override
767 HtmlElement getHtmlElement(Source source) { 767 HtmlElement getHtmlElement(Source source) {
768 // TODO(brianwilkerson) Implement this. 768 // TODO(brianwilkerson) Implement this.
769 // SourceEntry sourceEntry = getReadableSourceEntryOrNull(source); 769 // SourceEntry sourceEntry = getReadableSourceEntryOrNull(source);
770 // if (sourceEntry is HtmlEntry) { 770 // if (sourceEntry is HtmlEntry) {
771 // return sourceEntry.getValue(HtmlEntry.ELEMENT); 771 // return sourceEntry.getValue(HtmlEntry.ELEMENT);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 if (htmlSources.isEmpty) { 814 if (htmlSources.isEmpty) {
815 return Source.EMPTY_LIST; 815 return Source.EMPTY_LIST;
816 } 816 }
817 return htmlSources; 817 return htmlSources;
818 } 818 }
819 819
820 @override 820 @override
821 SourceKind getKindOf(Source source) { 821 SourceKind getKindOf(Source source) {
822 String name = source.shortName; 822 String name = source.shortName;
823 if (AnalysisEngine.isDartFileName(name)) { 823 if (AnalysisEngine.isDartFileName(name)) {
824 return _getResult(source, SOURCE_KIND); 824 return _cache.getValue(source, SOURCE_KIND);
825 } else if (AnalysisEngine.isHtmlFileName(name)) { 825 } else if (AnalysisEngine.isHtmlFileName(name)) {
826 return SourceKind.HTML; 826 return SourceKind.HTML;
827 } 827 }
828 return SourceKind.UNKNOWN; 828 return SourceKind.UNKNOWN;
829 } 829 }
830 830
831 @override 831 @override
832 List<Source> getLibrariesContaining(Source source) { 832 List<Source> getLibrariesContaining(Source source) {
833 SourceKind kind = getKindOf(source); 833 SourceKind kind = getKindOf(source);
834 if (kind == SourceKind.LIBRARY) { 834 if (kind == SourceKind.LIBRARY) {
835 return <Source>[source]; 835 return <Source>[source];
836 } else if (kind == SourceKind.PART) { 836 } else if (kind == SourceKind.PART) {
837 List<Source> libraries = <Source>[]; 837 List<Source> libraries = <Source>[];
838 MapIterator<AnalysisTarget, cache.CacheEntry> iterator = 838 MapIterator<AnalysisTarget, cache.CacheEntry> iterator =
839 _cache.iterator(); 839 _cache.iterator();
840 while (iterator.moveNext()) { 840 while (iterator.moveNext()) {
841 AnalysisTarget target = iterator.key; 841 AnalysisTarget target = iterator.key;
842 if (target is Source && getKindOf(target) == SourceKind.LIBRARY) { 842 if (target is Source && getKindOf(target) == SourceKind.LIBRARY) {
843 List<Source> parts = _getResult(target, INCLUDED_PARTS); 843 List<Source> parts = _cache.getValue(target, INCLUDED_PARTS);
844 if (parts.contains(source)) { 844 if (parts.contains(source)) {
845 libraries.add(target); 845 libraries.add(target);
846 } 846 }
847 } 847 }
848 } 848 }
849 if (libraries.isNotEmpty) { 849 if (libraries.isNotEmpty) {
850 return libraries; 850 return libraries;
851 } 851 }
852 } 852 }
853 return Source.EMPTY_ARRAY; 853 return Source.EMPTY_ARRAY;
(...skipping 26 matching lines...) Expand all
880 // cache.CacheEntry entry = getReadableSourceEntryOrNull(htmlSource); 880 // cache.CacheEntry entry = getReadableSourceEntryOrNull(htmlSource);
881 // if (entry is HtmlEntry) { 881 // if (entry is HtmlEntry) {
882 // HtmlEntry htmlEntry = entry; 882 // HtmlEntry htmlEntry = entry;
883 // return htmlEntry.getValue(HtmlEntry.REFERENCED_LIBRARIES); 883 // return htmlEntry.getValue(HtmlEntry.REFERENCED_LIBRARIES);
884 // } 884 // }
885 return Source.EMPTY_LIST; 885 return Source.EMPTY_LIST;
886 } 886 }
887 887
888 @override 888 @override
889 LibraryElement getLibraryElement(Source source) => 889 LibraryElement getLibraryElement(Source source) =>
890 _getResult(source, LIBRARY_ELEMENT); 890 _cache.getValue(source, LIBRARY_ELEMENT);
891 891
892 @override 892 @override
893 LineInfo getLineInfo(Source source) => _getResult(source, LINE_INFO); 893 LineInfo getLineInfo(Source source) => _cache.getValue(source, LINE_INFO);
894 894
895 @override 895 @override
896 int getModificationStamp(Source source) { 896 int getModificationStamp(Source source) {
897 int stamp = _contentCache.getModificationStamp(source); 897 int stamp = _contentCache.getModificationStamp(source);
898 if (stamp != null) { 898 if (stamp != null) {
899 return stamp; 899 return stamp;
900 } 900 }
901 return source.modificationStamp; 901 return source.modificationStamp;
902 } 902 }
903 903
(...skipping 27 matching lines...) Expand all
931 return getResolvedCompilationUnit2(unitSource, library.source); 931 return getResolvedCompilationUnit2(unitSource, library.source);
932 } 932 }
933 933
934 @override 934 @override
935 CompilationUnit getResolvedCompilationUnit2( 935 CompilationUnit getResolvedCompilationUnit2(
936 Source unitSource, Source librarySource) { 936 Source unitSource, Source librarySource) {
937 if (!AnalysisEngine.isDartFileName(unitSource.shortName) || 937 if (!AnalysisEngine.isDartFileName(unitSource.shortName) ||
938 !AnalysisEngine.isDartFileName(librarySource.shortName)) { 938 !AnalysisEngine.isDartFileName(librarySource.shortName)) {
939 return null; 939 return null;
940 } 940 }
941 return _getResult( 941 return _cache.getValue(
942 new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT); 942 new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT);
943 } 943 }
944 944
945 @override 945 @override
946 ht.HtmlUnit getResolvedHtmlUnit(Source htmlSource) { 946 ht.HtmlUnit getResolvedHtmlUnit(Source htmlSource) {
947 // TODO(brianwilkerson) Implement this. 947 // TODO(brianwilkerson) Implement this.
948 // SourceEntry sourceEntry = getReadableSourceEntryOrNull(htmlSource); 948 // SourceEntry sourceEntry = getReadableSourceEntryOrNull(htmlSource);
949 // if (sourceEntry is HtmlEntry) { 949 // if (sourceEntry is HtmlEntry) {
950 // HtmlEntry htmlEntry = sourceEntry; 950 // HtmlEntry htmlEntry = sourceEntry;
951 // return htmlEntry.getValue(HtmlEntry.RESOLVED_UNIT); 951 // return htmlEntry.getValue(HtmlEntry.RESOLVED_UNIT);
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 ChangeNoticeImpl _getNotice(Source source) { 1456 ChangeNoticeImpl _getNotice(Source source) {
1457 // Used in commented out code. 1457 // Used in commented out code.
1458 ChangeNoticeImpl notice = _pendingNotices[source]; 1458 ChangeNoticeImpl notice = _pendingNotices[source];
1459 if (notice == null) { 1459 if (notice == null) {
1460 notice = new ChangeNoticeImpl(source); 1460 notice = new ChangeNoticeImpl(source);
1461 _pendingNotices[source] = notice; 1461 _pendingNotices[source] = notice;
1462 } 1462 }
1463 return notice; 1463 return notice;
1464 } 1464 }
1465 1465
1466 Object _getResult(AnalysisTarget target, ResultDescriptor descriptor) {
1467 cache.CacheEntry entry = _cache.get(target);
1468 if (entry == null) {
1469 return descriptor.defaultValue;
1470 }
1471 if (entry.isValid(descriptor)) {
1472 return entry.getValue(descriptor);
1473 }
1474 return descriptor.defaultValue;
1475 }
1476
1477 CacheState _getResultState(
1478 AnalysisTarget target, ResultDescriptor descriptor) {
1479 cache.CacheEntry entry = _cache.get(target);
1480 if (entry == null) {
1481 return CacheState.INVALID;
1482 }
1483 return entry.getState(descriptor);
1484 }
1485
1486 /** 1466 /**
1487 * Return a list containing all of the sources known to this context that have 1467 * Return a list containing all of the sources known to this context that have
1488 * the given [kind]. 1468 * the given [kind].
1489 */ 1469 */
1490 List<Source> _getSources(SourceKind kind) { 1470 List<Source> _getSources(SourceKind kind) {
1491 List<Source> sources = new List<Source>(); 1471 List<Source> sources = new List<Source>();
1492 MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator(); 1472 MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
1493 while (iterator.moveNext()) { 1473 while (iterator.moveNext()) {
1494 if (iterator.value.getValue(SOURCE_KIND) == kind && 1474 if (iterator.value.getValue(SOURCE_KIND) == kind &&
1495 iterator.key is Source) { 1475 iterator.key is Source) {
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
2085 PendingFuture pendingFuture = 2065 PendingFuture pendingFuture =
2086 new PendingFuture<T>(_context, target, computeValue); 2066 new PendingFuture<T>(_context, target, computeValue);
2087 if (!pendingFuture.evaluate(entry)) { 2067 if (!pendingFuture.evaluate(entry)) {
2088 _context._pendingFutureTargets 2068 _context._pendingFutureTargets
2089 .putIfAbsent(target, () => <PendingFuture>[]) 2069 .putIfAbsent(target, () => <PendingFuture>[])
2090 .add(pendingFuture); 2070 .add(pendingFuture);
2091 } 2071 }
2092 return pendingFuture.future; 2072 return pendingFuture.future;
2093 } 2073 }
2094 } 2074 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/context/cache.dart ('k') | pkg/analyzer/lib/src/task/dart_work_manager.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698