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

Unified Diff: pkg/analyzer/lib/src/dart/element/element.dart

Issue 2023443003: Convert buildParameter() into a factory constructor. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 7 months 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
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/resynthesize.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/dart/element/element.dart
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 944c9b941d532670c6c88cdbab6b54e2b6e02940..cbdf65c06fce93481289d544bb671b286ef3648e 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -6038,6 +6038,34 @@ class ParameterElementImpl extends VariableElementImpl
: super.forSerialized(enclosingElement);
/**
+ * Initialize using the given serialized information.
+ */
+ factory ParameterElementImpl.forSerializedFactory(
+ UnlinkedParam unlinkedParameter, ElementImpl enclosingElement,
+ {bool synthetic: false}) {
+ ParameterElementImpl element;
+ if (unlinkedParameter.isInitializingFormal) {
+ if (unlinkedParameter.kind == UnlinkedParamKind.required) {
+ element = new FieldFormalParameterElementImpl.forSerialized(
+ unlinkedParameter, enclosingElement);
+ } else {
+ element = new DefaultFieldFormalParameterElementImpl.forSerialized(
+ unlinkedParameter, enclosingElement);
+ }
+ } else {
+ if (unlinkedParameter.kind == UnlinkedParamKind.required) {
+ element = new ParameterElementImpl.forSerialized(
+ unlinkedParameter, enclosingElement);
+ } else {
+ element = new DefaultParameterElementImpl.forSerialized(
+ unlinkedParameter, enclosingElement);
+ }
+ }
+ element.synthetic = synthetic;
+ return element;
+ }
+
+ /**
* Creates a synthetic parameter with [name], [type] and [kind].
*/
factory ParameterElementImpl.synthetic(
@@ -6208,7 +6236,12 @@ class ParameterElementImpl extends VariableElementImpl
}
@override
- List<ParameterElement> get parameters => _parameters;
+ List<ParameterElement> get parameters {
+ if (_unlinkedParam != null) {
+ type; // _parameters is set during computing 'type'
Paul Berry 2016/05/27 21:51:20 Even with the comment, this code looks very strang
scheglov 2016/05/27 21:57:04 Done.
+ }
+ return _parameters;
+ }
/**
* Set the parameters defined by this executable element to the given
@@ -6224,10 +6257,38 @@ class ParameterElementImpl extends VariableElementImpl
@override
DartType get type {
if (_unlinkedParam != null && _type == null) {
- _type = enclosingUnit.resynthesizerContext.resolveLinkedType(
- _unlinkedParam.inferredTypeSlot, typeParameterContext) ??
- enclosingUnit.resynthesizerContext
- .resolveTypeRef(_unlinkedParam.type, typeParameterContext);
+ if (_unlinkedParam.isFunctionTyped) {
+ CompilationUnitElementImpl enclosingUnit = this.enclosingUnit;
+ FunctionElementImpl parameterTypeElement =
+ new FunctionElementImpl_forFunctionTypedParameter(
+ enclosingUnit, this);
+ if (!isSynthetic) {
+ parameterTypeElement.enclosingElement = this;
+ }
+ List<ParameterElement> subParameters = _unlinkedParam.parameters
+ .map((UnlinkedParam p) =>
+ new ParameterElementImpl.forSerializedFactory(p, this,
+ synthetic: isSynthetic))
+ .toList(growable: false);
+ if (isSynthetic) {
+ parameterTypeElement.parameters = subParameters;
+ } else {
+ _parameters = subParameters;
+ parameterTypeElement.shareParameters(subParameters);
+ }
+ parameterTypeElement.returnType = enclosingUnit.resynthesizerContext
+ .resolveTypeRef(_unlinkedParam.type, typeParameterContext);
+ FunctionTypeImpl parameterType =
+ new FunctionTypeImpl.elementWithNameAndArgs(parameterTypeElement,
+ null, typeParameterContext.allTypeParameterTypes, false);
+ parameterTypeElement.type = parameterType;
+ _type = parameterType;
+ } else {
+ _type = enclosingUnit.resynthesizerContext.resolveLinkedType(
+ _unlinkedParam.inferredTypeSlot, typeParameterContext) ??
+ enclosingUnit.resynthesizerContext
+ .resolveTypeRef(_unlinkedParam.type, typeParameterContext);
+ }
}
return super.type;
}
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/summary/resynthesize.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698