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

Side by Side Diff: pkg/analyzer/lib/src/summary/resynthesize.dart

Issue 1560343002: Test and fix resynthesized function-typed parameters referring to type parameters. (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 unified diff | Download patch
« no previous file with comments | « no previous file | pkg/analyzer/test/src/summary/resynthesize_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library summary_resynthesizer; 5 library summary_resynthesizer;
6 6
7 import 'package:analyzer/analyzer.dart'; 7 import 'package:analyzer/analyzer.dart';
8 import 'package:analyzer/src/generated/element.dart'; 8 import 'package:analyzer/src/generated/element.dart';
9 import 'package:analyzer/src/generated/element_handle.dart'; 9 import 'package:analyzer/src/generated/element_handle.dart';
10 import 'package:analyzer/src/generated/engine.dart'; 10 import 'package:analyzer/src/generated/engine.dart';
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 * TODO(paulberry): extend this to do the right thing for generic methods. 205 * TODO(paulberry): extend this to do the right thing for generic methods.
206 */ 206 */
207 List<TypeParameterElement> currentTypeParameters; 207 List<TypeParameterElement> currentTypeParameters;
208 208
209 _LibraryResynthesizer(this.summaryResynthesizer, this.prelinkedLibrary, 209 _LibraryResynthesizer(this.summaryResynthesizer, this.prelinkedLibrary,
210 this.unlinkedUnits, this.librarySource) { 210 this.unlinkedUnits, this.librarySource) {
211 isCoreLibrary = librarySource.uri.toString() == 'dart:core'; 211 isCoreLibrary = librarySource.uri.toString() == 'dart:core';
212 } 212 }
213 213
214 /** 214 /**
215 * Return a list of type arguments corresponding to [currentTypeParameters].
216 */
217 List<TypeParameterType> get currentTypeArguments => currentTypeParameters
218 ?.map((TypeParameterElement param) => param.type)
219 ?.toList();
220
221 /**
215 * Resynthesize a [ClassElement] and place it in [unitHolder]. 222 * Resynthesize a [ClassElement] and place it in [unitHolder].
216 */ 223 */
217 void buildClass(UnlinkedClass serializedClass) { 224 void buildClass(UnlinkedClass serializedClass) {
218 try { 225 try {
219 currentTypeParameters = 226 currentTypeParameters =
220 serializedClass.typeParameters.map(buildTypeParameter).toList(); 227 serializedClass.typeParameters.map(buildTypeParameter).toList();
221 for (int i = 0; i < serializedClass.typeParameters.length; i++) { 228 for (int i = 0; i < serializedClass.typeParameters.length; i++) {
222 finishTypeParameter( 229 finishTypeParameter(
223 serializedClass.typeParameters[i], currentTypeParameters[i]); 230 serializedClass.typeParameters[i], currentTypeParameters[i]);
224 } 231 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 buildVariable(serializedVariable, memberHolder); 266 buildVariable(serializedVariable, memberHolder);
260 } 267 }
261 if (!serializedClass.isMixinApplication) { 268 if (!serializedClass.isMixinApplication) {
262 if (!constructorFound) { 269 if (!constructorFound) {
263 // Synthesize implicit constructors. 270 // Synthesize implicit constructors.
264 ConstructorElementImpl constructor = 271 ConstructorElementImpl constructor =
265 new ConstructorElementImpl('', -1); 272 new ConstructorElementImpl('', -1);
266 constructor.synthetic = true; 273 constructor.synthetic = true;
267 constructor.returnType = correspondingType; 274 constructor.returnType = correspondingType;
268 constructor.type = new FunctionTypeImpl.elementWithNameAndArgs( 275 constructor.type = new FunctionTypeImpl.elementWithNameAndArgs(
269 constructor, 276 constructor, null, currentTypeArguments);
270 null,
271 currentTypeParameters
272 .map((TypeParameterElement e) => e.type)
273 .toList());
274 memberHolder.addConstructor(constructor); 277 memberHolder.addConstructor(constructor);
275 } 278 }
276 classElement.constructors = memberHolder.constructors; 279 classElement.constructors = memberHolder.constructors;
277 } 280 }
278 classElement.accessors = memberHolder.accessors; 281 classElement.accessors = memberHolder.accessors;
279 classElement.fields = memberHolder.fields; 282 classElement.fields = memberHolder.fields;
280 classElement.methods = memberHolder.methods; 283 classElement.methods = memberHolder.methods;
281 correspondingType.typeArguments = 284 correspondingType.typeArguments = currentTypeArguments;
282 currentTypeParameters.map((param) => param.type).toList();
283 classElement.type = correspondingType; 285 classElement.type = correspondingType;
284 unitHolder.addType(classElement); 286 unitHolder.addType(classElement);
285 } finally { 287 } finally {
286 currentTypeParameters = null; 288 currentTypeParameters = null;
287 } 289 }
288 } 290 }
289 291
290 /** 292 /**
291 * Resynthesize a [NamespaceCombinator]. 293 * Resynthesize a [NamespaceCombinator].
292 */ 294 */
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 void buildExecutableCommonParts(ExecutableElementImpl executableElement, 448 void buildExecutableCommonParts(ExecutableElementImpl executableElement,
447 UnlinkedExecutable serializedExecutable) { 449 UnlinkedExecutable serializedExecutable) {
448 executableElement.parameters = 450 executableElement.parameters =
449 serializedExecutable.parameters.map(buildParameter).toList(); 451 serializedExecutable.parameters.map(buildParameter).toList();
450 if (serializedExecutable.returnType != null) { 452 if (serializedExecutable.returnType != null) {
451 executableElement.returnType = buildType(serializedExecutable.returnType); 453 executableElement.returnType = buildType(serializedExecutable.returnType);
452 } else { 454 } else {
453 executableElement.returnType = VoidTypeImpl.instance; 455 executableElement.returnType = VoidTypeImpl.instance;
454 } 456 }
455 executableElement.type = new FunctionTypeImpl.elementWithNameAndArgs( 457 executableElement.type = new FunctionTypeImpl.elementWithNameAndArgs(
456 executableElement, 458 executableElement, null, currentTypeArguments);
457 null,
458 currentTypeParameters
459 ?.map((TypeParameterElement e) => e.type)
460 ?.toList());
461 executableElement.hasImplicitReturnType = 459 executableElement.hasImplicitReturnType =
462 serializedExecutable.hasImplicitReturnType; 460 serializedExecutable.hasImplicitReturnType;
463 executableElement.external = serializedExecutable.isExternal; 461 executableElement.external = serializedExecutable.isExternal;
464 } 462 }
465 463
466 /** 464 /**
467 * Resynthesize an [ExportElement], 465 * Resynthesize an [ExportElement],
468 */ 466 */
469 ExportElement buildExport(UnlinkedExport serializedExport) { 467 ExportElement buildExport(UnlinkedExport serializedExport) {
470 ExportElementImpl exportElement = new ExportElementImpl(0); 468 ExportElementImpl exportElement = new ExportElementImpl(0);
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 parameterTypeElement.synthetic = true; 659 parameterTypeElement.synthetic = true;
662 parameterElement.parameters = 660 parameterElement.parameters =
663 serializedParameter.parameters.map(buildParameter).toList(); 661 serializedParameter.parameters.map(buildParameter).toList();
664 parameterTypeElement.enclosingElement = parameterElement; 662 parameterTypeElement.enclosingElement = parameterElement;
665 parameterTypeElement.shareParameters(parameterElement.parameters); 663 parameterTypeElement.shareParameters(parameterElement.parameters);
666 if (serializedParameter.type != null) { 664 if (serializedParameter.type != null) {
667 parameterTypeElement.returnType = buildType(serializedParameter.type); 665 parameterTypeElement.returnType = buildType(serializedParameter.type);
668 } else { 666 } else {
669 parameterTypeElement.returnType = VoidTypeImpl.instance; 667 parameterTypeElement.returnType = VoidTypeImpl.instance;
670 } 668 }
671 parameterElement.type = new FunctionTypeImpl(parameterTypeElement); 669 parameterElement.type = new FunctionTypeImpl.elementWithNameAndArgs(
670 parameterTypeElement, null, currentTypeArguments);
672 } else { 671 } else {
673 parameterElement.type = buildType(serializedParameter.type); 672 parameterElement.type = buildType(serializedParameter.type);
674 parameterElement.hasImplicitType = serializedParameter.hasImplicitType; 673 parameterElement.hasImplicitType = serializedParameter.hasImplicitType;
675 } 674 }
676 switch (serializedParameter.kind) { 675 switch (serializedParameter.kind) {
677 case UnlinkedParamKind.named: 676 case UnlinkedParamKind.named:
678 parameterElement.parameterKind = ParameterKind.NAMED; 677 parameterElement.parameterKind = ParameterKind.NAMED;
679 break; 678 break;
680 case UnlinkedParamKind.positional: 679 case UnlinkedParamKind.positional:
681 parameterElement.parameterKind = ParameterKind.POSITIONAL; 680 parameterElement.parameterKind = ParameterKind.POSITIONAL;
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 } 916 }
918 for (FunctionTypeAliasElement typeAlias in unit.functionTypeAliases) { 917 for (FunctionTypeAliasElement typeAlias in unit.functionTypeAliases) {
919 elementMap[typeAlias.name] = typeAlias; 918 elementMap[typeAlias.name] = typeAlias;
920 } 919 }
921 resummarizedElements[absoluteUri] = elementMap; 920 resummarizedElements[absoluteUri] = elementMap;
922 unitHolder = null; 921 unitHolder = null;
923 prelinkedUnit = null; 922 prelinkedUnit = null;
924 unlinkedUnit = null; 923 unlinkedUnit = null;
925 } 924 }
926 } 925 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/src/summary/resynthesize_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698