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

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

Issue 1132423002: Implement AnalysisContext.ensureResolvedDartUnits(). (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 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 for (List<PendingFuture> pendingFutures in _pendingFutureTargets.values) { 630 for (List<PendingFuture> pendingFutures in _pendingFutureTargets.values) {
631 for (PendingFuture pendingFuture in pendingFutures) { 631 for (PendingFuture pendingFuture in pendingFutures) {
632 pendingFuture.forciblyComplete(); 632 pendingFuture.forciblyComplete();
633 } 633 }
634 } 634 }
635 _pendingFutureTargets.clear(); 635 _pendingFutureTargets.clear();
636 } 636 }
637 637
638 @override 638 @override
639 List<CompilationUnit> ensureResolvedDartUnits(Source unitSource) { 639 List<CompilationUnit> ensureResolvedDartUnits(Source unitSource) {
640 // TODO(brianwilkerson) Implement this. 640 // Check every library.
641 List<CompilationUnit> units = <CompilationUnit>[];
642 List<Source> containingLibraries = getLibrariesContaining(unitSource);
643 for (Source librarySource in containingLibraries) {
644 LibrarySpecificUnit target =
645 new LibrarySpecificUnit(librarySource, unitSource);
646 CompilationUnit unit = _getResult(target, RESOLVED_UNIT);
647 if (unit == null) {
648 units = null;
649 break;
650 }
651 units.add(unit);
652 }
653 // If we have results, then we're done.
654 if (units != null) {
655 return units;
656 }
657 // Schedule recomputing RESOLVED_UNIT results.
658 for (Source librarySource in containingLibraries) {
659 LibrarySpecificUnit target =
660 new LibrarySpecificUnit(librarySource, unitSource);
661 if (_getResultState(target, RESOLVED_UNIT) == CacheState.FLUSHED) {
662 dartWorkManager.addPriorityResult(target, RESOLVED_UNIT);
663 }
664 }
641 return null; 665 return null;
642 // cache.CacheEntry entry = _cache.get(unitSource);
643 // // Check every library.
644 // List<CompilationUnit> units = <CompilationUnit>[];
645 // List<Source> containingLibraries = entry.containingLibraries;
646 // for (Source librarySource in containingLibraries) {
647 // CompilationUnit unit =
648 // entry.getValueInLibrary(DartEntry.RESOLVED_UNIT, librarySource);
649 // if (unit == null) {
650 // units = null;
651 // break;
652 // }
653 // units.add(unit);
654 // }
655 // // Invalidate the flushed RESOLVED_UNIT to force it eventually.
656 // if (units == null) {
657 // bool shouldBeScheduled = false;
658 // for (Source librarySource in containingLibraries) {
659 // if (entry.getStateInLibrary(DartEntry.RESOLVED_UNIT, librarySource) ==
660 // CacheState.FLUSHED) {
661 // entry.setStateInLibrary(
662 // DartEntry.RESOLVED_UNIT, librarySource, CacheState.INVALID);
663 // shouldBeScheduled = true;
664 // }
665 // }
666 // if (shouldBeScheduled) {
667 // _workManager.add(unitSource, SourcePriority.UNKNOWN);
668 // }
669 // // We cannot provide resolved units right now,
670 // // but the future analysis will.
671 // return null;
672 // }
673 // // done
674 // return units;
675 } 666 }
676 667
677 @override 668 @override
678 bool exists(Source source) { 669 bool exists(Source source) {
679 if (source == null) { 670 if (source == null) {
680 return false; 671 return false;
681 } 672 }
682 if (_contentCache.getContents(source) != null) { 673 if (_contentCache.getContents(source) != null) {
683 return true; 674 return true;
684 } 675 }
(...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after
1475 cache.CacheEntry entry = _cache.get(target); 1466 cache.CacheEntry entry = _cache.get(target);
1476 if (entry == null) { 1467 if (entry == null) {
1477 return descriptor.defaultValue; 1468 return descriptor.defaultValue;
1478 } 1469 }
1479 if (entry.isValid(descriptor)) { 1470 if (entry.isValid(descriptor)) {
1480 return entry.getValue(descriptor); 1471 return entry.getValue(descriptor);
1481 } 1472 }
1482 return descriptor.defaultValue; 1473 return descriptor.defaultValue;
1483 } 1474 }
1484 1475
1476 CacheState _getResultState(
Brian Wilkerson 2015/05/11 18:36:49 Should this be moved to AnalysisCache?
scheglov 2015/05/11 18:46:07 Will move getValue() and getState() in the followi
1477 AnalysisTarget target, ResultDescriptor descriptor) {
1478 cache.CacheEntry entry = _cache.get(target);
1479 if (entry == null) {
1480 return CacheState.INVALID;
1481 }
1482 return entry.getState(descriptor);
1483 }
1484
1485 /** 1485 /**
1486 * Return a list containing all of the sources known to this context that have 1486 * Return a list containing all of the sources known to this context that have
1487 * the given [kind]. 1487 * the given [kind].
1488 */ 1488 */
1489 List<Source> _getSources(SourceKind kind) { 1489 List<Source> _getSources(SourceKind kind) {
1490 List<Source> sources = new List<Source>(); 1490 List<Source> sources = new List<Source>();
1491 MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator(); 1491 MapIterator<AnalysisTarget, cache.CacheEntry> iterator = _cache.iterator();
1492 while (iterator.moveNext()) { 1492 while (iterator.moveNext()) {
1493 if (iterator.value.getValue(SOURCE_KIND) == kind && 1493 if (iterator.value.getValue(SOURCE_KIND) == kind &&
1494 iterator.key is Source) { 1494 iterator.key is Source) {
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
2084 PendingFuture pendingFuture = 2084 PendingFuture pendingFuture =
2085 new PendingFuture<T>(_context, target, computeValue); 2085 new PendingFuture<T>(_context, target, computeValue);
2086 if (!pendingFuture.evaluate(entry)) { 2086 if (!pendingFuture.evaluate(entry)) {
2087 _context._pendingFutureTargets 2087 _context._pendingFutureTargets
2088 .putIfAbsent(target, () => <PendingFuture>[]) 2088 .putIfAbsent(target, () => <PendingFuture>[])
2089 .add(pendingFuture); 2089 .add(pendingFuture);
2090 } 2090 }
2091 return pendingFuture.future; 2091 return pendingFuture.future;
2092 } 2092 }
2093 } 2093 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/task/dart_work_manager.dart » ('j') | pkg/analyzer/lib/src/task/dart_work_manager.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698