| Index: pkg/analyzer/lib/src/dart/element/builder.dart
|
| diff --git a/pkg/analyzer/lib/src/dart/element/builder.dart b/pkg/analyzer/lib/src/dart/element/builder.dart
|
| index 8dfc781ddc143e4e2de2524f1f63d315f495a47b..2754786b2d386b1ae0e686fbaf073bab180abad1 100644
|
| --- a/pkg/analyzer/lib/src/dart/element/builder.dart
|
| +++ b/pkg/analyzer/lib/src/dart/element/builder.dart
|
| @@ -543,9 +543,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> {
|
| _setCodeRange(element, node);
|
| element.metadata = _createElementAnnotations(node.metadata);
|
| ForEachStatement statement = node.parent as ForEachStatement;
|
| - int declarationEnd = node.offset + node.length;
|
| - int statementEnd = statement.offset + statement.length;
|
| - element.setVisibleRange(declarationEnd, statementEnd - declarationEnd - 1);
|
| + element.setVisibleRange(statement.offset, statement.length);
|
| element.const3 = node.isConst;
|
| element.final2 = node.isFinal;
|
| if (node.type == null) {
|
| @@ -1201,10 +1199,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> {
|
| }
|
| element = variable;
|
| _setCodeRange(element, node);
|
| - Block enclosingBlock = node.getAncestor((node) => node is Block);
|
| - // TODO(brianwilkerson) This isn't right for variables declared in a for
|
| - // loop.
|
| - variable.setVisibleRange(enclosingBlock.offset, enclosingBlock.length);
|
| + _setVariableVisibleRange(variable, node);
|
| variable.hasImplicitType = varList.type == null;
|
| _currentHolder.addLocalVariable(variable);
|
| variableName.staticElement = element;
|
| @@ -1401,6 +1396,18 @@ class ElementBuilder extends RecursiveAstVisitor<Object> {
|
| }
|
| }
|
|
|
| + void _setVariableVisibleRange(
|
| + LocalVariableElementImpl element, VariableDeclaration node) {
|
| + AstNode scopeNode;
|
| + AstNode parent2 = node.parent.parent;
|
| + if (parent2 is ForStatement) {
|
| + scopeNode = parent2;
|
| + } else {
|
| + scopeNode = node.getAncestor((node) => node is Block);
|
| + }
|
| + element.setVisibleRange(scopeNode.offset, scopeNode.length);
|
| + }
|
| +
|
| /**
|
| * Make the given holder be the current holder while visiting the given node.
|
| *
|
|
|