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

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

Issue 1218503003: Don't remove ResultData(s) for incrementally updated results. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Disable 'limitInvalidationInTaskModel' Created 5 years, 5 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
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.task.dart; 5 library analyzer.src.task.dart;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'dart:math' as math; 8 import 'dart:math' as math;
9 9
10 import 'package:analyzer/src/context/cache.dart'; 10 import 'package:analyzer/src/context/cache.dart';
(...skipping 1905 matching lines...) Expand 10 before | Expand all | Expand 10 after
1916 final Set<String> addedNames = new Set<String>(); 1916 final Set<String> addedNames = new Set<String>();
1917 final Set<String> changedNames = new Set<String>(); 1917 final Set<String> changedNames = new Set<String>();
1918 final Set<String> removedNames = new Set<String>(); 1918 final Set<String> removedNames = new Set<String>();
1919 1919
1920 final Set<Source> invalidatedSources = new Set<Source>(); 1920 final Set<Source> invalidatedSources = new Set<Source>();
1921 1921
1922 DartDelta(Source source) : super(source) { 1922 DartDelta(Source source) : super(source) {
1923 invalidatedSources.add(source); 1923 invalidatedSources.add(source);
1924 } 1924 }
1925 1925
1926 void elementAdded(Element element) {
1927 addedNames.add(element.name);
1928 }
1929
1930 void elementChanged(Element element) {
1931 changedNames.add(element.name);
1932 }
1933
1934 void elementRemoved(Element element) {
1935 removedNames.add(element.name);
1936 }
1937
1938 bool isNameAffected(String name) {
1939 return addedNames.contains(name) ||
1940 changedNames.contains(name) ||
1941 removedNames.contains(name);
1942 }
1943
1944 bool nameChanged(String name) {
1945 return changedNames.add(name);
1946 }
1947
1926 @override 1948 @override
1927 bool affects(InternalAnalysisContext context, AnalysisTarget target, 1949 DeltaResult validate(InternalAnalysisContext context, AnalysisTarget target,
1928 ResultDescriptor descriptor) { 1950 ResultDescriptor descriptor) {
1929 if (hasDirectiveChange) { 1951 if (hasDirectiveChange) {
1930 return true; 1952 return DeltaResult.INVALIDATE;
1931 } 1953 }
1954 // Prepare target source.
1932 Source targetSource = null; 1955 Source targetSource = null;
1933 if (target is Source) { 1956 if (target is Source) {
1934 targetSource = target; 1957 targetSource = target;
1935 } 1958 }
1936 if (target is LibrarySpecificUnit) { 1959 if (target is LibrarySpecificUnit) {
1937 targetSource = target.library; 1960 targetSource = target.library;
1938 } 1961 }
1939 if (target is Element) { 1962 if (target is Element) {
1940 targetSource = target.source; 1963 targetSource = target.source;
1941 } 1964 }
1965 // Keep results that are updated incrementally.
1966 // If we want to analyze only some references to the source being changed,
1967 // we need to keep the same instances of CompilationUnitElement and
1968 // LibraryElement.
1942 if (targetSource == source) { 1969 if (targetSource == source) {
1943 return true; 1970 if (ParseDartTask.DESCRIPTOR.results.contains(descriptor)) {
1971 return DeltaResult.KEEP_CONTINUE;
1972 }
1973 if (BuildCompilationUnitElementTask.DESCRIPTOR.results
1974 .contains(descriptor)) {
1975 return DeltaResult.KEEP_CONTINUE;
1976 }
1977 if (BuildLibraryElementTask.DESCRIPTOR.results.contains(descriptor)) {
1978 return DeltaResult.KEEP_CONTINUE;
1979 }
1980 return DeltaResult.INVALIDATE;
1944 } 1981 }
1982 // Use the target library dependency information to decide whether
1983 // the delta affects the library.
1945 if (targetSource != null) { 1984 if (targetSource != null) {
1946 List<Source> librarySources = 1985 List<Source> librarySources =
1947 context.getLibrariesContaining(targetSource); 1986 context.getLibrariesContaining(targetSource);
1948 for (Source librarySource in librarySources) { 1987 for (Source librarySource in librarySources) {
1949 AnalysisCache cache = context.analysisCache; 1988 AnalysisCache cache = context.analysisCache;
1950 ReferencedNames referencedNames = 1989 ReferencedNames referencedNames =
1951 cache.getValue(librarySource, REFERENCED_NAMES); 1990 cache.getValue(librarySource, REFERENCED_NAMES);
1952 if (referencedNames == null) { 1991 if (referencedNames == null) {
1953 return true; 1992 return DeltaResult.INVALIDATE;
1954 } 1993 }
1955 referencedNames.addChangedElements(this); 1994 referencedNames.addChangedElements(this);
1956 if (referencedNames.isAffectedBy(this)) { 1995 if (referencedNames.isAffectedBy(this)) {
1957 return true; 1996 return DeltaResult.INVALIDATE;
1958 } 1997 }
1959 } 1998 }
1960 return false; 1999 return DeltaResult.STOP;
1961 } 2000 }
1962 return true; 2001 // We don't know what to do with the given target, invalidate it.
1963 } 2002 return DeltaResult.INVALIDATE;
1964
1965 void elementAdded(Element element) {
1966 addedNames.add(element.name);
1967 }
1968
1969 void elementChanged(Element element) {
1970 changedNames.add(element.name);
1971 }
1972
1973 void elementRemoved(Element element) {
1974 removedNames.add(element.name);
1975 }
1976
1977 bool isNameAffected(String name) {
1978 return addedNames.contains(name) ||
1979 changedNames.contains(name) ||
1980 removedNames.contains(name);
1981 }
1982
1983 bool nameChanged(String name) {
1984 return changedNames.add(name);
1985 } 2003 }
1986 } 2004 }
1987 2005
1988 /** 2006 /**
1989 * A task that merges all of the errors for a single source into a single list 2007 * A task that merges all of the errors for a single source into a single list
1990 * of errors. 2008 * of errors.
1991 */ 2009 */
1992 class DartErrorsTask extends SourceBasedAnalysisTask { 2010 class DartErrorsTask extends SourceBasedAnalysisTask {
1993 /** 2011 /**
1994 * The name of the [BUILD_DIRECTIVES_ERRORS] input. 2012 * The name of the [BUILD_DIRECTIVES_ERRORS] input.
(...skipping 1680 matching lines...) Expand 10 before | Expand all | Expand 10 after
3675 3693
3676 @override 3694 @override
3677 bool moveNext() { 3695 bool moveNext() {
3678 if (_newSources.isEmpty) { 3696 if (_newSources.isEmpty) {
3679 return false; 3697 return false;
3680 } 3698 }
3681 currentTarget = _newSources.removeLast(); 3699 currentTarget = _newSources.removeLast();
3682 return true; 3700 return true;
3683 } 3701 }
3684 } 3702 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698