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

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

Issue 1522583005: Issue 25238. Update LoclaElement(s) visible ranges during incremental resolution. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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
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 a80de5275af42959d24068e1bde96f922a93039a..a8a17925040b9b1a477e975f36848731b9d82dbf 100644
--- a/pkg/analyzer/lib/src/generated/incremental_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/incremental_resolver.dart
@@ -1117,7 +1117,8 @@ class IncrementalResolver {
*
* [node] - the node being tested.
*/
- bool _canBeResolved(AstNode node) => node is ClassDeclaration ||
+ bool _canBeResolved(AstNode node) =>
+ node is ClassDeclaration ||
node is ClassTypeAlias ||
node is CompilationUnit ||
node is ConstructorDeclaration ||
@@ -1269,7 +1270,7 @@ class IncrementalResolver {
LoggingTimer timer = logger.startTimer();
try {
_definingUnit
- .accept(new _ElementNameOffsetUpdater(_updateOffset, _updateDelta));
+ .accept(new _ElementOffsetUpdater(_updateOffset, _updateDelta));
_definingUnit.afterIncrementalResolution();
} finally {
timer.stop('update element offsets');
@@ -1987,18 +1988,34 @@ class ResolutionContextBuilder {
*/
class _DeclarationMismatchException {}
-class _ElementNameOffsetUpdater extends GeneralizingElementVisitor {
+class _ElementOffsetUpdater extends GeneralizingElementVisitor {
final int updateOffset;
final int updateDelta;
- _ElementNameOffsetUpdater(this.updateOffset, this.updateDelta);
+ _ElementOffsetUpdater(this.updateOffset, this.updateDelta);
@override
visitElement(Element element) {
+ // name offset
int nameOffset = element.nameOffset;
if (nameOffset > updateOffset) {
(element as ElementImpl).nameOffset = nameOffset + updateDelta;
}
+ // 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) {
Brian Wilkerson 2015/12/12 15:31:56 I want to make a couple of changes to the element
+ element.setVisibleRange(newOffset, length);
+ } else if (element is LocalVariableElementImpl) {
+ element.setVisibleRange(newOffset, length);
+ } else if (element is ParameterElementImpl) {
+ element.setVisibleRange(newOffset, length);
+ }
+ }
+ }
super.visitElement(element);
}
}

Powered by Google App Engine
This is Rietveld 408576698