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

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

Issue 1667023002: Issue 25657. Update offsets of cloned constant initializers. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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 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 1fe2217be2aeb32bfab1490750847e46dc0533c7..ea4fd23c7eac69f1c5339f3b66d60547eda938a2 100644
--- a/pkg/analyzer/lib/src/generated/incremental_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
@@ -2068,24 +2068,57 @@ class _ElementOffsetUpdater extends GeneralizingElementVisitor {
if (nameOffset > updateOffset) {
cache.remove(element);
(element as ElementImpl).nameOffset = nameOffset + updateDelta;
+ if (element is ConstVariableElement) {
+ ConstVariableElement constVariable = element as ConstVariableElement;
+ Expression initializer = constVariable.constantInitializer;
+ if (initializer != null) {
+ _shiftTokens(initializer.beginToken);
+ }
+ }
}
// visible range
if (element is LocalElement) {
SourceRange visibleRange = element.visibleRange;
- if (visibleRange != null && visibleRange.offset > updateOffset) {
- int newOffset = visibleRange.offset + updateDelta;
- int length = visibleRange.length;
- if (element is FunctionElementImpl) {
- element.setVisibleRange(newOffset, length);
- } else if (element is LocalVariableElementImpl) {
- element.setVisibleRange(newOffset, length);
- } else if (element is ParameterElementImpl) {
- element.setVisibleRange(newOffset, length);
+ if (visibleRange != null) {
+ int oldOffset = visibleRange.offset;
+ int oldLength = visibleRange.length;
+ int newOffset = oldOffset;
+ int newLength = oldLength;
+ newOffset += oldOffset > updateOffset ? updateDelta : 0;
+ newLength += visibleRange.contains(updateOffset) ? updateDelta : 0;
+ if (newOffset != oldOffset || newLength != oldLength) {
+ if (element is FunctionElementImpl) {
+ element.setVisibleRange(newOffset, newLength);
+ } else if (element is LocalVariableElementImpl) {
+ element.setVisibleRange(newOffset, newLength);
+ } else if (element is ParameterElementImpl) {
+ element.setVisibleRange(newOffset, newLength);
+ }
}
}
}
super.visitElement(element);
}
+
+ void _shiftTokens(Token token) {
+ while (token != null) {
+ if (token.offset > updateOffset) {
+ token.offset += updateDelta;
+ }
+ // comments
+ _shiftTokens(token.precedingComments);
+ if (token is DocumentationCommentToken) {
+ for (Token reference in token.references) {
+ _shiftTokens(reference);
+ }
+ }
+ // next
+ if (token.type == TokenType.EOF) {
+ break;
+ }
+ token = token.next;
+ }
+ }
}
class _ElementsGatherer extends GeneralizingElementVisitor {
« 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