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

Unified Diff: pkg/analyzer/lib/src/summary/resynthesize.dart

Issue 1603643007: Properly resynthesize field formal parameter elements. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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
Index: pkg/analyzer/lib/src/summary/resynthesize.dart
diff --git a/pkg/analyzer/lib/src/summary/resynthesize.dart b/pkg/analyzer/lib/src/summary/resynthesize.dart
index 7ba0db1bec525c7acf5996e22ae33be35a05a8d3..c83f2beaefacfc5e7bb4c2e95540ea4352723608 100644
--- a/pkg/analyzer/lib/src/summary/resynthesize.dart
+++ b/pkg/analyzer/lib/src/summary/resynthesize.dart
@@ -282,10 +282,10 @@ class _LibraryResynthesizer {
/**
* If a class is currently being resynthesized, map from field name to the
- * type of the corresponding field. This is used to populate the types of
- * initializing formal parameters whose type is implicit.
+ * corresponding field element. This is used when resynthesizing
+ * initializing formal parameters.
*/
- Map<String, DartType> fieldTypes;
+ Map<String, FieldElementImpl> fields;
_LibraryResynthesizer(this.summaryResynthesizer, this.linkedLibrary,
this.unlinkedUnits, this.librarySource) {
@@ -328,7 +328,7 @@ class _LibraryResynthesizer {
classElement.mixins = serializedClass.mixins.map(buildType).toList();
classElement.typeParameters = currentTypeParameters;
ElementHolder memberHolder = new ElementHolder();
- fieldTypes = <String, DartType>{};
+ fields = <String, FieldElementImpl>{};
for (UnlinkedVariable serializedVariable in serializedClass.fields) {
buildVariable(serializedVariable, memberHolder);
}
@@ -370,7 +370,7 @@ class _LibraryResynthesizer {
unitHolder.addType(classElement);
} finally {
currentTypeParameters = <TypeParameterElement>[];
- fieldTypes = null;
+ fields = null;
}
}
@@ -863,8 +863,15 @@ class _LibraryResynthesizer {
* Resynthesize a [ParameterElement].
*/
ParameterElement buildParameter(UnlinkedParam serializedParameter) {
- ParameterElementImpl parameterElement = new ParameterElementImpl(
- serializedParameter.name, serializedParameter.nameOffset);
+ ParameterElementImpl parameterElement;
+ if (serializedParameter.isInitializingFormal) {
+ parameterElement = new FieldFormalParameterElementImpl.forNameAndOffset(
+ serializedParameter.name, serializedParameter.nameOffset)
+ ..field = fields[serializedParameter.name];
+ } else {
+ parameterElement = new ParameterElementImpl(
+ serializedParameter.name, serializedParameter.nameOffset);
+ }
if (serializedParameter.isFunctionTyped) {
FunctionElementImpl parameterTypeElement =
new FunctionElementImpl('', -1);
@@ -884,7 +891,7 @@ class _LibraryResynthesizer {
if (serializedParameter.isInitializingFormal &&
serializedParameter.hasImplicitType) {
// The type is inherited from the matching field.
- parameterElement.type = fieldTypes[serializedParameter.name] ??
+ parameterElement.type = fields[serializedParameter.name]?.type ??
summaryResynthesizer.typeProvider.dynamicType;
} else {
parameterElement.type = buildType(serializedParameter.type);
@@ -1070,7 +1077,7 @@ class _LibraryResynthesizer {
element.static = serializedVariable.isStatic;
holder.addField(element);
buildImplicitAccessors(element, holder);
- fieldTypes[element.name] = element.type;
+ fields[element.name] = element;
}
}
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/element.dart ('k') | pkg/analyzer/test/src/summary/resynthesize_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698