| 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 c450a8fa93f66478991563ac92442f6ff0937ca6..e34448485322ba5aa48e7b4612182341d300e5e6 100644
|
| --- a/pkg/analyzer/lib/src/dart/element/builder.dart
|
| +++ b/pkg/analyzer/lib/src/dart/element/builder.dart
|
| @@ -1041,7 +1041,8 @@ class ElementBuilder extends ApiElementBuilder {
|
| @override
|
| Object visitDefaultFormalParameter(DefaultFormalParameter node) {
|
| super.visitDefaultFormalParameter(node);
|
| - _buildParameterInitializer(node.element as ParameterElementImpl, node);
|
| + buildParameterInitializer(
|
| + node.element as ParameterElementImpl, node.defaultValue);
|
| return null;
|
| }
|
|
|
| @@ -1055,7 +1056,7 @@ class ElementBuilder extends ApiElementBuilder {
|
| Object visitVariableDeclaration(VariableDeclaration node) {
|
| super.visitVariableDeclaration(node);
|
| VariableElementImpl element = node.element as VariableElementImpl;
|
| - _buildVariableInitializer(element, node.initializer);
|
| + buildVariableInitializer(element, node.initializer);
|
| return null;
|
| }
|
|
|
| @@ -1271,7 +1272,7 @@ class LocalElementBuilder extends _BaseElementBuilder {
|
| variableName.staticElement = element;
|
| element.const3 = isConst;
|
| element.final2 = isFinal;
|
| - _buildVariableInitializer(element, initializerNode);
|
| + buildVariableInitializer(element, initializerNode);
|
| return null;
|
| }
|
|
|
| @@ -1314,6 +1315,52 @@ abstract class _BaseElementBuilder extends RecursiveAstVisitor<Object> {
|
|
|
| _BaseElementBuilder(this._currentHolder, this._unitElement);
|
|
|
| + /**
|
| + * If the [defaultValue] is not `null`, build the [FunctionElementImpl]
|
| + * that corresponds it, and set it as the initializer for the [parameter].
|
| + */
|
| + void buildParameterInitializer(
|
| + ParameterElementImpl parameter, Expression 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();
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * If the [initializer] is not `null`, build the [FunctionElementImpl] that
|
| + * corresponds it, and set it as the initializer for the [variable].
|
| + */
|
| + void buildVariableInitializer(
|
| + VariableElementImpl variable, Expression initializer) {
|
| + if (initializer != null) {
|
| + ElementHolder holder = new ElementHolder();
|
| + _visit(holder, initializer);
|
| + FunctionElementImpl initializerElement =
|
| + new FunctionElementImpl.forOffset(initializer.beginToken.offset);
|
| + initializerElement.hasImplicitReturnType = true;
|
| + initializerElement.functions = holder.functions;
|
| + initializerElement.labels = holder.labels;
|
| + initializerElement.localVariables = holder.localVariables;
|
| + initializerElement.synthetic = true;
|
| + initializerElement.type = new FunctionTypeImpl(initializerElement);
|
| + variable.initializer = initializerElement;
|
| + holder.validate();
|
| + }
|
| + }
|
| +
|
| @override
|
| Object visitDefaultFormalParameter(DefaultFormalParameter node) {
|
| NormalFormalParameter normalParameter = node.parameter;
|
| @@ -1407,44 +1454,6 @@ 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();
|
| - _visit(holder, node);
|
| - FunctionElementImpl initializer =
|
| - new FunctionElementImpl.forOffset(node.beginToken.offset);
|
| - initializer.hasImplicitReturnType = true;
|
| - initializer.functions = holder.functions;
|
| - initializer.labels = holder.labels;
|
| - initializer.localVariables = holder.localVariables;
|
| - initializer.synthetic = true;
|
| - initializer.type = new FunctionTypeImpl(initializer);
|
| - element.initializer = initializer;
|
| - holder.validate();
|
| - }
|
| - }
|
| -
|
| /**
|
| * For each [Annotation] found in [annotations], create a new
|
| * [ElementAnnotation] object and set the [Annotation] to point to it.
|
|
|