Chromium Code Reviews| 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; |