| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |