Chromium Code Reviews| 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 48a732f47f28750b162918c7ed26b80c17cff89c..23869eeb038f1cda63b70ed0e6b781b32a0c395b 100644 |
| --- a/pkg/analyzer/lib/src/dart/element/builder.dart |
| +++ b/pkg/analyzer/lib/src/dart/element/builder.dart |
| @@ -382,6 +382,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| if (stackTraceParameter != null) { |
| LocalVariableElementImpl stackTrace = |
| new LocalVariableElementImpl.forNode(stackTraceParameter); |
| + _setCodeRange(stackTrace, stackTraceParameter); |
| _currentHolder.addLocalVariable(stackTrace); |
| stackTraceParameter.staticElement = stackTrace; |
| } |
| @@ -413,6 +414,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| } |
| SimpleIdentifier className = node.name; |
| ClassElementImpl element = new ClassElementImpl.forNode(className); |
| + _setCodeRange(element, node); |
| element.metadata = _createElementAnnotations(node.metadata); |
| List<TypeParameterElement> typeParameters = holder.typeParameters; |
| List<DartType> typeArguments = _createTypeParameterTypes(typeParameters); |
| @@ -462,6 +464,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| _visitChildren(holder, node); |
| SimpleIdentifier className = node.name; |
| ClassElementImpl element = new ClassElementImpl.forNode(className); |
| + _setCodeRange(element, node); |
| element.metadata = _createElementAnnotations(node.metadata); |
| element.abstract = node.abstractKeyword != null; |
| element.mixinApplication = true; |
| @@ -479,6 +482,14 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| } |
| @override |
| + Object visitCompilationUnit(CompilationUnit node) { |
| + if (compilationUnitElement is ElementImpl) { |
| + _setCodeRange(compilationUnitElement as ElementImpl, node); |
| + } |
| + return super.visitCompilationUnit(node); |
| + } |
| + |
| + @override |
| Object visitConstructorDeclaration(ConstructorDeclaration node) { |
| ElementHolder holder = new ElementHolder(); |
| bool wasInFunction = _inFunction; |
| @@ -492,6 +503,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| SimpleIdentifier constructorName = node.name; |
| ConstructorElementImpl element = |
| new ConstructorElementImpl.forNode(constructorName); |
| + _setCodeRange(element, node); |
| element.metadata = _createElementAnnotations(node.metadata); |
| setElementDocumentationComment(element, node); |
| if (node.externalKeyword != null) { |
| @@ -533,6 +545,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| SimpleIdentifier variableName = node.identifier; |
| LocalVariableElementImpl element = |
| new LocalVariableElementImpl.forNode(variableName); |
| + _setCodeRange(element, node); |
| element.metadata = _createElementAnnotations(node.metadata); |
| ForEachStatement statement = node.parent as ForEachStatement; |
| int declarationEnd = node.offset + node.length; |
| @@ -565,6 +578,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| } else { |
| parameter = new DefaultParameterElementImpl.forNode(parameterName); |
| } |
| + _setCodeRange(parameter, node); |
| parameter.const3 = node.isConst; |
| parameter.final2 = node.isFinal; |
| parameter.parameterKind = node.kind; |
| @@ -601,6 +615,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| Object visitEnumDeclaration(EnumDeclaration node) { |
| SimpleIdentifier enumName = node.name; |
| ClassElementImpl enumElement = new ClassElementImpl.forNode(enumName); |
| + _setCodeRange(enumElement, node); |
| enumElement.metadata = _createElementAnnotations(node.metadata); |
| enumElement.enum2 = true; |
| setElementDocumentationComment(enumElement, node); |
| @@ -630,6 +645,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| _fieldMap == null ? null : _fieldMap[parameterName.name]; |
| FieldFormalParameterElementImpl parameter = |
| new FieldFormalParameterElementImpl.forNode(parameterName); |
| + _setCodeRange(parameter, node); |
| parameter.const3 = node.isConst; |
| parameter.final2 = node.isFinal; |
| parameter.parameterKind = node.kind; |
| @@ -671,6 +687,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| SimpleIdentifier functionName = node.name; |
| FunctionElementImpl element = |
| new FunctionElementImpl.forNode(functionName); |
| + _setCodeRange(element, node); |
| element.metadata = _createElementAnnotations(node.metadata); |
| setElementDocumentationComment(element, node); |
| if (node.externalKeyword != null) { |
| @@ -718,6 +735,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| if (node.isGetter) { |
| PropertyAccessorElementImpl getter = |
| new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| + _setCodeRange(getter, node); |
| getter.metadata = _createElementAnnotations(node.metadata); |
| setElementDocumentationComment(getter, node); |
| if (node.externalKeyword != null) { |
| @@ -745,6 +763,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| } else { |
| PropertyAccessorElementImpl setter = |
| new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| + _setCodeRange(setter, node); |
| setter.metadata = _createElementAnnotations(node.metadata); |
| setElementDocumentationComment(setter, node); |
| if (node.externalKeyword != null) { |
| @@ -796,6 +815,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| FunctionBody body = node.body; |
| FunctionElementImpl element = |
| new FunctionElementImpl.forOffset(node.beginToken.offset); |
| + _setCodeRange(element, node); |
| element.functions = holder.functions; |
| element.labels = holder.labels; |
| element.localVariables = holder.localVariables; |
| @@ -834,6 +854,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| List<TypeParameterElement> typeParameters = holder.typeParameters; |
| FunctionTypeAliasElementImpl element = |
| new FunctionTypeAliasElementImpl.forNode(aliasName); |
| + _setCodeRange(element, node); |
| element.metadata = _createElementAnnotations(node.metadata); |
| setElementDocumentationComment(element, node); |
| element.parameters = parameters; |
| @@ -852,6 +873,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| SimpleIdentifier parameterName = node.identifier; |
| ParameterElementImpl parameter = |
| new ParameterElementImpl.forNode(parameterName); |
| + _setCodeRange(parameter, node); |
| parameter.parameterKind = node.kind; |
| _setParameterVisibleRange(node, parameter); |
| _currentHolder.addParameter(parameter); |
| @@ -884,6 +906,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| SimpleIdentifier labelName = label.label; |
| LabelElementImpl element = |
| new LabelElementImpl.forNode(labelName, onSwitchStatement, false); |
| + _setCodeRange(element, node); |
| _currentHolder.addLabel(element); |
| labelName.staticElement = element; |
| } |
| @@ -919,6 +942,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| } |
| MethodElementImpl element = |
| new MethodElementImpl(nameOfMethod, methodName.offset); |
| + _setCodeRange(element, node); |
| element.metadata = _createElementAnnotations(node.metadata); |
| setElementDocumentationComment(element, node); |
| element.abstract = node.isAbstract; |
| @@ -957,6 +981,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| if (node.isGetter) { |
| PropertyAccessorElementImpl getter = |
| new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| + _setCodeRange(getter, node); |
| getter.metadata = _createElementAnnotations(node.metadata); |
| setElementDocumentationComment(getter, node); |
| if (node.externalKeyword != null) { |
| @@ -984,6 +1009,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| } else { |
| PropertyAccessorElementImpl setter = |
| new PropertyAccessorElementImpl.forNode(propertyNameNode); |
| + _setCodeRange(setter, node); |
| setter.metadata = _createElementAnnotations(node.metadata); |
| setElementDocumentationComment(setter, node); |
| if (node.externalKeyword != null) { |
| @@ -1062,6 +1088,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| SimpleIdentifier parameterName = node.identifier; |
| ParameterElementImpl parameter = |
| new ParameterElementImpl.forNode(parameterName); |
| + _setCodeRange(parameter, node); |
| parameter.const3 = node.isConst; |
| parameter.final2 = node.isFinal; |
| parameter.parameterKind = node.kind; |
| @@ -1107,6 +1134,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| SimpleIdentifier parameterName = node.name; |
| TypeParameterElementImpl typeParameter = |
| new TypeParameterElementImpl.forNode(parameterName); |
| + _setCodeRange(typeParameter, node); |
| typeParameter.metadata = _createElementAnnotations(node.metadata); |
| TypeParameterTypeImpl typeParameterType = |
| new TypeParameterTypeImpl(typeParameter); |
| @@ -1135,6 +1163,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| } |
| element = field; |
| field.static = fieldNode.isStatic; |
| + _setCodeRange(element, node); |
| setElementDocumentationComment(element, fieldNode); |
| field.hasImplicitType = varList.type == null; |
| _currentHolder.addField(field); |
| @@ -1148,6 +1177,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| variable = new LocalVariableElementImpl.forNode(variableName); |
| } |
| 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. |
| @@ -1164,6 +1194,7 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| variable = new TopLevelVariableElementImpl.forNode(variableName); |
| } |
| element = variable; |
| + _setCodeRange(element, node); |
| if (varList.parent is TopLevelVariableDeclaration) { |
| setElementDocumentationComment(element, varList.parent); |
| } |
| @@ -1226,8 +1257,9 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| elementAnnotations = _createElementAnnotations(node.metadata); |
| } |
| for (VariableDeclaration variableDeclaration in node.variables) { |
| - (variableDeclaration.element as ElementImpl).metadata = |
| - elementAnnotations; |
| + ElementImpl element = variableDeclaration.element as ElementImpl; |
| + _setCodeRange(element, node.parent); |
| + element.metadata = elementAnnotations; |
| } |
| return null; |
| } |
| @@ -1319,6 +1351,10 @@ class ElementBuilder extends RecursiveAstVisitor<Object> { |
| return null; |
| } |
| + void _setCodeRange(ElementImpl element, AstNode node) { |
|
Brian Wilkerson
2016/03/02 00:08:09
Should / could this happen automatically in the 'f
scheglov
2016/03/02 04:57:01
Unfortunately it does not work well for constructo
|
| + element.setCodeRange(node.offset, node.length); |
| + } |
| + |
| /** |
| * Sets the visible source range for formal parameter. |
| */ |