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

Unified Diff: pkg/analyzer/lib/src/generated/incremental_resolver.dart

Issue 767453002: A whitespace-only change can be incremental anywhere. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analyzer/test/generated/incremental_resolver_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/generated/incremental_resolver.dart
diff --git a/pkg/analyzer/lib/src/generated/incremental_resolver.dart b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
index 9197dd49bf72560c756b8907ca7947a5db339a23..2bb86473d693a00e5b85f0dd0700ee904a8ddb68 100644
--- a/pkg/analyzer/lib/src/generated/incremental_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
@@ -670,10 +670,10 @@ class IncrementalResolver {
void resolve(AstNode node) {
AstNode rootNode = _findResolutionRoot(node);
// update elements
- _definingUnit.accept(
- new _ElementNameOffsetUpdater(
- _updateOffset,
- _updateNewLength - _updateOldLength));
+ _updateElementNameOffsets(
+ _definingUnit,
+ _updateOffset,
+ _updateNewLength - _updateOldLength);
if (_elementModelChanged(rootNode)) {
throw new AnalysisException("Cannot resolve node: element model changed");
}
@@ -878,6 +878,10 @@ class IncrementalResolver {
node.accept(errorVerifier);
_verifyErrors = errorListener.getErrorsForSource(_source);
}
+
+ static void _updateElementNameOffsets(Element root, int offset, int delta) {
+ root.accept(new _ElementNameOffsetUpdater(offset, delta));
+ }
}
@@ -922,6 +926,20 @@ class PoorMansIncrementalResolver {
int endOffsetOld = math.max(firstOffsetOld, lastOffsetOld);
int beginOffsetNew = math.min(firstOffsetNew, lastOffsetNew);
int endOffsetNew = math.max(firstOffsetNew, lastOffsetNew);
+ // check for a whitespace only change
Brian Wilkerson 2014/11/26 23:22:37 Does this handle changes in dartdoc comments? Chan
scheglov 2014/11/26 23:25:37 Not yet. Support for incremental resolving dartdoc
+ if (identical(lastPair.oldToken, firstPair.oldToken) &&
+ identical(lastPair.newToken, firstPair.newToken)) {
+ _updateOffset = beginOffsetOld - 1;
+ _updateEndOld = endOffsetOld;
+ _updateDelta = newUnit.length - oldUnit.length;
+ _shiftTokens(firstPair.oldToken, _updateDelta);
+ IncrementalResolver._updateElementNameOffsets(
+ oldUnit.element,
+ _updateOffset,
+ _updateDelta);
+ _updateEntry();
+ return true;
+ }
// print('beginOffsetOld: $beginOffsetOld endOffsetOld: $endOffsetOld');
// print('beginOffsetNew: $beginOffsetNew endOffsetNew: $endOffsetNew');
// Find nodes covering the "old" and "new" token ranges.
@@ -997,10 +1015,10 @@ class PoorMansIncrementalResolver {
// print('Successfully incrementally resolved.');
return true;
}
- } catch (e, st) {
+ } catch (e) {
// TODO(scheglov) find a way to log these exceptions
- print(e);
- print(st);
+// print(e);
+// print(st);
}
return false;
}
@@ -1107,7 +1125,7 @@ class PoorMansIncrementalResolver {
// print('old: $oldToken @ ${oldToken.offset}');
// print('new: $newToken @ ${newToken.offset}');
if (!_equalToken(oldToken, newToken, delta)) {
- return new _TokenPair(oldToken, newToken);
+ return new _TokenPair(oldToken.next, newToken.next);
}
oldToken = oldToken.previous;
newToken = newToken.previous;
« no previous file with comments | « no previous file | pkg/analyzer/test/generated/incremental_resolver_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698