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 7505ad7a72f7338e7819b48e1af66f578d195613..004991a7296387d01db4a36600a68d28be0f45d4 100644 |
--- a/pkg/analyzer/lib/src/dart/element/builder.dart |
+++ b/pkg/analyzer/lib/src/dart/element/builder.dart |
@@ -140,8 +140,8 @@ class ApiElementBuilder extends _BaseElementBuilder { |
@override |
Object visitCompilationUnit(CompilationUnit node) { |
- if (compilationUnitElement is ElementImpl) { |
- _setCodeRange(compilationUnitElement, node); |
+ if (_unitElement is ElementImpl) { |
+ _setCodeRange(_unitElement, node); |
} |
return super.visitCompilationUnit(node); |
} |
@@ -235,7 +235,7 @@ class ApiElementBuilder extends _BaseElementBuilder { |
Object visitExportDirective(ExportDirective node) { |
List<ElementAnnotation> annotations = |
_createElementAnnotations(node.metadata); |
- compilationUnitElement.setAnnotations(node.offset, annotations); |
+ _unitElement.setAnnotations(node.offset, annotations); |
return super.visitExportDirective(node); |
} |
@@ -474,7 +474,7 @@ class ApiElementBuilder extends _BaseElementBuilder { |
Object visitImportDirective(ImportDirective node) { |
List<ElementAnnotation> annotations = |
_createElementAnnotations(node.metadata); |
- compilationUnitElement.setAnnotations(node.offset, annotations); |
+ _unitElement.setAnnotations(node.offset, annotations); |
return super.visitImportDirective(node); |
} |
@@ -482,7 +482,7 @@ class ApiElementBuilder extends _BaseElementBuilder { |
Object visitLibraryDirective(LibraryDirective node) { |
List<ElementAnnotation> annotations = |
_createElementAnnotations(node.metadata); |
- compilationUnitElement.setAnnotations(node.offset, annotations); |
+ _unitElement.setAnnotations(node.offset, annotations); |
return super.visitLibraryDirective(node); |
} |
@@ -647,7 +647,7 @@ class ApiElementBuilder extends _BaseElementBuilder { |
Object visitPartDirective(PartDirective node) { |
List<ElementAnnotation> annotations = |
_createElementAnnotations(node.metadata); |
- compilationUnitElement.setAnnotations(node.offset, annotations); |
+ _unitElement.setAnnotations(node.offset, annotations); |
return super.visitPartDirective(node); |
} |
@@ -1090,6 +1090,13 @@ class ElementBuilder extends ApiElementBuilder { |
} |
@override |
+ Object visitDefaultFormalParameter(DefaultFormalParameter node) { |
+ super.visitDefaultFormalParameter(node); |
+ _buildParameterInitializer(node.element as ParameterElementImpl, node); |
+ return null; |
+ } |
+ |
+ @override |
Object visitExpressionFunctionBody(ExpressionFunctionBody node) { |
_buildLocal(node); |
return null; |
@@ -1104,8 +1111,7 @@ class ElementBuilder extends ApiElementBuilder { |
} |
void _buildLocal(AstNode node) { |
- node.accept( |
- new LocalElementBuilder(_currentHolder, compilationUnitElement)); |
+ node.accept(new LocalElementBuilder(_currentHolder, _unitElement)); |
} |
} |
@@ -1350,18 +1356,17 @@ abstract class _BaseElementBuilder extends RecursiveAstVisitor<Object> { |
* The compilation unit element into which the elements being built will be |
* stored. |
*/ |
- final CompilationUnitElementImpl compilationUnitElement; |
+ final CompilationUnitElementImpl _unitElement; |
/** |
* The element holder associated with the element that is currently being built. |
*/ |
ElementHolder _currentHolder; |
- _BaseElementBuilder(this._currentHolder, this.compilationUnitElement); |
+ _BaseElementBuilder(this._currentHolder, this._unitElement); |
@override |
Object visitDefaultFormalParameter(DefaultFormalParameter node) { |
- ElementHolder holder = new ElementHolder(); |
NormalFormalParameter normalParameter = node.parameter; |
SimpleIdentifier parameterName = normalParameter.identifier; |
ParameterElementImpl parameter; |
@@ -1377,22 +1382,6 @@ abstract class _BaseElementBuilder extends RecursiveAstVisitor<Object> { |
parameter.const3 = node.isConst; |
parameter.final2 = node.isFinal; |
parameter.parameterKind = node.kind; |
- // set initializer, default value range |
- Expression defaultValue = node.defaultValue; |
- if (defaultValue != null) { |
- _visit(holder, defaultValue); |
- FunctionElementImpl initializer = |
- new FunctionElementImpl.forOffset(defaultValue.beginToken.offset); |
- initializer.hasImplicitReturnType = true; |
- initializer.functions = holder.functions; |
- initializer.labels = holder.labels; |
- initializer.localVariables = holder.localVariables; |
- initializer.parameters = holder.parameters; |
- initializer.synthetic = true; |
- initializer.type = new FunctionTypeImpl(initializer); |
- parameter.initializer = initializer; |
- parameter.defaultValueCode = defaultValue.toSource(); |
- } |
// visible range |
_setParameterVisibleRange(node, parameter); |
if (normalParameter is SimpleFormalParameter && |
@@ -1402,7 +1391,6 @@ abstract class _BaseElementBuilder extends RecursiveAstVisitor<Object> { |
_currentHolder.addParameter(parameter); |
parameterName.staticElement = parameter; |
normalParameter.accept(this); |
- holder.validate(); |
return null; |
} |
@@ -1470,6 +1458,27 @@ abstract class _BaseElementBuilder extends RecursiveAstVisitor<Object> { |
return super.visitTypeParameter(node); |
} |
+ void _buildParameterInitializer( |
+ ParameterElementImpl parameter, DefaultFormalParameter node) { |
+ Expression defaultValue = node.defaultValue; |
+ if (defaultValue != null) { |
+ ElementHolder holder = new ElementHolder(); |
+ _visit(holder, defaultValue); |
+ FunctionElementImpl initializer = |
+ new FunctionElementImpl.forOffset(defaultValue.beginToken.offset); |
+ initializer.hasImplicitReturnType = true; |
+ initializer.functions = holder.functions; |
+ initializer.labels = holder.labels; |
+ initializer.localVariables = holder.localVariables; |
+ initializer.parameters = holder.parameters; |
+ initializer.synthetic = true; |
+ initializer.type = new FunctionTypeImpl(initializer); |
+ parameter.initializer = initializer; |
+ parameter.defaultValueCode = defaultValue.toSource(); |
+ holder.validate(); |
+ } |
+ } |
+ |
void _buildVariableInitializer(VariableElementImpl element, Expression node) { |
if (node != null) { |
ElementHolder holder = new ElementHolder(); |
@@ -1498,7 +1507,7 @@ abstract class _BaseElementBuilder extends RecursiveAstVisitor<Object> { |
} |
return annotations.map((Annotation a) { |
ElementAnnotationImpl elementAnnotation = |
- new ElementAnnotationImpl(compilationUnitElement); |
+ new ElementAnnotationImpl(_unitElement); |
a.elementAnnotation = elementAnnotation; |
return elementAnnotation; |
}).toList(); |
@@ -1584,7 +1593,7 @@ abstract class _BaseElementBuilder extends RecursiveAstVisitor<Object> { |
} |
class _ElementBuilder_visitClassDeclaration extends UnifyingAstVisitor<Object> { |
- final ElementBuilder builder; |
+ final ApiElementBuilder builder; |
List<ClassMember> nonFields; |