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

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

Issue 1565643002: Eliminate constructor return types from summaries. (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
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 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 serializedClass.interfaces.map(buildType).toList(); 239 serializedClass.interfaces.map(buildType).toList();
240 classElement.mixins = serializedClass.mixins.map(buildType).toList(); 240 classElement.mixins = serializedClass.mixins.map(buildType).toList();
241 classElement.typeParameters = currentTypeParameters; 241 classElement.typeParameters = currentTypeParameters;
242 ElementHolder memberHolder = new ElementHolder(); 242 ElementHolder memberHolder = new ElementHolder();
243 bool constructorFound = false; 243 bool constructorFound = false;
244 for (UnlinkedExecutable serializedExecutable 244 for (UnlinkedExecutable serializedExecutable
245 in serializedClass.executables) { 245 in serializedClass.executables) {
246 switch (serializedExecutable.kind) { 246 switch (serializedExecutable.kind) {
247 case UnlinkedExecutableKind.constructor: 247 case UnlinkedExecutableKind.constructor:
248 constructorFound = true; 248 constructorFound = true;
249 buildConstructor(serializedExecutable, memberHolder); 249 buildConstructor(
250 serializedExecutable, memberHolder, correspondingType);
250 break; 251 break;
251 case UnlinkedExecutableKind.functionOrMethod: 252 case UnlinkedExecutableKind.functionOrMethod:
252 case UnlinkedExecutableKind.getter: 253 case UnlinkedExecutableKind.getter:
253 case UnlinkedExecutableKind.setter: 254 case UnlinkedExecutableKind.setter:
254 buildExecutable(serializedExecutable, memberHolder); 255 buildExecutable(serializedExecutable, memberHolder);
255 break; 256 break;
256 } 257 }
257 } 258 }
258 for (UnlinkedVariable serializedVariable in serializedClass.fields) { 259 for (UnlinkedVariable serializedVariable in serializedClass.fields) {
259 buildVariable(serializedVariable, memberHolder); 260 buildVariable(serializedVariable, memberHolder);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 HideElementCombinatorImpl combinator = new HideElementCombinatorImpl(); 302 HideElementCombinatorImpl combinator = new HideElementCombinatorImpl();
302 // Note: we call toList() so that we don't retain a reference to the 303 // Note: we call toList() so that we don't retain a reference to the
303 // deserialized data structure. 304 // deserialized data structure.
304 combinator.hiddenNames = serializedCombinator.hides.toList(); 305 combinator.hiddenNames = serializedCombinator.hides.toList();
305 return combinator; 306 return combinator;
306 } 307 }
307 } 308 }
308 309
309 /** 310 /**
310 * Resynthesize a [ConstructorElement] and place it in the given [holder]. 311 * Resynthesize a [ConstructorElement] and place it in the given [holder].
312 * [classType] is the type of the class for which this element is a
313 * constructor.
311 */ 314 */
312 void buildConstructor( 315 void buildConstructor(UnlinkedExecutable serializedExecutable,
313 UnlinkedExecutable serializedExecutable, ElementHolder holder) { 316 ElementHolder holder, InterfaceType classType) {
314 assert(serializedExecutable.kind == UnlinkedExecutableKind.constructor); 317 assert(serializedExecutable.kind == UnlinkedExecutableKind.constructor);
315 ConstructorElementImpl constructorElement = 318 ConstructorElementImpl constructorElement =
316 new ConstructorElementImpl(serializedExecutable.name, -1); 319 new ConstructorElementImpl(serializedExecutable.name, -1);
320 constructorElement.returnType = classType;
317 buildExecutableCommonParts(constructorElement, serializedExecutable); 321 buildExecutableCommonParts(constructorElement, serializedExecutable);
318 constructorElement.factory = serializedExecutable.isFactory; 322 constructorElement.factory = serializedExecutable.isFactory;
319 constructorElement.const2 = serializedExecutable.isConst; 323 constructorElement.const2 = serializedExecutable.isConst;
320 holder.addConstructor(constructorElement); 324 holder.addConstructor(constructorElement);
321 } 325 }
322 326
323 /** 327 /**
324 * Resynthesize the [ClassElement] corresponding to an enum, along with the 328 * Resynthesize the [ClassElement] corresponding to an enum, along with the
325 * associated fields and implicit accessors. 329 * associated fields and implicit accessors.
326 */ 330 */
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 /** 446 /**
443 * Handle the parts of an executable element that are common to constructors, 447 * Handle the parts of an executable element that are common to constructors,
444 * functions, methods, getters, and setters. 448 * functions, methods, getters, and setters.
445 */ 449 */
446 void buildExecutableCommonParts(ExecutableElementImpl executableElement, 450 void buildExecutableCommonParts(ExecutableElementImpl executableElement,
447 UnlinkedExecutable serializedExecutable) { 451 UnlinkedExecutable serializedExecutable) {
448 executableElement.parameters = 452 executableElement.parameters =
449 serializedExecutable.parameters.map(buildParameter).toList(); 453 serializedExecutable.parameters.map(buildParameter).toList();
450 if (serializedExecutable.returnType != null) { 454 if (serializedExecutable.returnType != null) {
451 executableElement.returnType = buildType(serializedExecutable.returnType); 455 executableElement.returnType = buildType(serializedExecutable.returnType);
456 } else if (serializedExecutable.kind ==
457 UnlinkedExecutableKind.constructor) {
458 // Return type was set by the caller.
452 } else { 459 } else {
453 executableElement.returnType = VoidTypeImpl.instance; 460 executableElement.returnType = VoidTypeImpl.instance;
454 } 461 }
455 executableElement.type = new FunctionTypeImpl.elementWithNameAndArgs( 462 executableElement.type = new FunctionTypeImpl.elementWithNameAndArgs(
456 executableElement, 463 executableElement,
457 null, 464 null,
458 currentTypeParameters 465 currentTypeParameters
459 ?.map((TypeParameterElement e) => e.type) 466 ?.map((TypeParameterElement e) => e.type)
460 ?.toList()); 467 ?.toList());
461 executableElement.hasImplicitReturnType = 468 executableElement.hasImplicitReturnType =
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 } 924 }
918 for (FunctionTypeAliasElement typeAlias in unit.functionTypeAliases) { 925 for (FunctionTypeAliasElement typeAlias in unit.functionTypeAliases) {
919 elementMap[typeAlias.name] = typeAlias; 926 elementMap[typeAlias.name] = typeAlias;
920 } 927 }
921 resummarizedElements[absoluteUri] = elementMap; 928 resummarizedElements[absoluteUri] = elementMap;
922 unitHolder = null; 929 unitHolder = null;
923 prelinkedUnit = null; 930 prelinkedUnit = null;
924 unlinkedUnit = null; 931 unlinkedUnit = null;
925 } 932 }
926 } 933 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698