| 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 'dart:collection'; | 7 import 'dart:collection'; |
| 8 | 8 |
| 9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
| 10 import 'package:analyzer/dart/ast/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
| (...skipping 2076 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2087 | 2087 |
| 2088 /** | 2088 /** |
| 2089 * Handle the parts of an executable element that are common to constructors, | 2089 * Handle the parts of an executable element that are common to constructors, |
| 2090 * functions, methods, getters, and setters. | 2090 * functions, methods, getters, and setters. |
| 2091 */ | 2091 */ |
| 2092 void buildExecutableCommonParts(ExecutableElementImpl executableElement, | 2092 void buildExecutableCommonParts(ExecutableElementImpl executableElement, |
| 2093 UnlinkedExecutable serializedExecutable) { | 2093 UnlinkedExecutable serializedExecutable) { |
| 2094 executableElement.typeParameters = | 2094 executableElement.typeParameters = |
| 2095 buildTypeParameters(serializedExecutable.typeParameters); | 2095 buildTypeParameters(serializedExecutable.typeParameters); |
| 2096 { | 2096 { |
| 2097 List<UnlinkedParam> unlinkedParameters = serializedExecutable.parameters; | |
| 2098 int length = unlinkedParameters.length; | |
| 2099 if (length != 0) { | |
| 2100 List<ParameterElementImpl> parameters = | |
| 2101 new List<ParameterElementImpl>(length); | |
| 2102 for (int i = 0; i < length; i++) { | |
| 2103 parameters[i] = new ParameterElementImpl.forSerializedFactory( | |
| 2104 unlinkedParameters[i], executableElement); | |
| 2105 } | |
| 2106 executableElement.parameters = parameters; | |
| 2107 } | |
| 2108 } | |
| 2109 { | |
| 2110 List<UnlinkedExecutable> unlinkedFunctions = | 2097 List<UnlinkedExecutable> unlinkedFunctions = |
| 2111 serializedExecutable.localFunctions; | 2098 serializedExecutable.localFunctions; |
| 2112 int length = unlinkedFunctions.length; | 2099 int length = unlinkedFunctions.length; |
| 2113 if (length != 0) { | 2100 if (length != 0) { |
| 2114 List<FunctionElementImpl> localFunctions = | 2101 List<FunctionElementImpl> localFunctions = |
| 2115 new List<FunctionElementImpl>(length); | 2102 new List<FunctionElementImpl>(length); |
| 2116 for (int i = 0; i < length; i++) { | 2103 for (int i = 0; i < length; i++) { |
| 2117 localFunctions[i] = | 2104 localFunctions[i] = |
| 2118 buildLocalFunction(unlinkedFunctions[i], executableElement); | 2105 buildLocalFunction(unlinkedFunctions[i], executableElement); |
| 2119 } | 2106 } |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2265 if (defaultVoid) { | 2252 if (defaultVoid) { |
| 2266 return VoidTypeImpl.instance; | 2253 return VoidTypeImpl.instance; |
| 2267 } else { | 2254 } else { |
| 2268 return DynamicTypeImpl.instance; | 2255 return DynamicTypeImpl.instance; |
| 2269 } | 2256 } |
| 2270 } | 2257 } |
| 2271 if (type.paramReference != 0) { | 2258 if (type.paramReference != 0) { |
| 2272 return typeParameterContext.getTypeParameterType(type.paramReference); | 2259 return typeParameterContext.getTypeParameterType(type.paramReference); |
| 2273 } else if (type.syntheticReturnType != null) { | 2260 } else if (type.syntheticReturnType != null) { |
| 2274 FunctionElementImpl element = | 2261 FunctionElementImpl element = |
| 2275 new FunctionElementImpl_forLUB(unit, typeParameterContext); | 2262 new FunctionElementImpl_forLUB(unit, typeParameterContext, type); |
| 2276 element.parameters = type.syntheticParams | 2263 return element.type; |
| 2277 .map((UnlinkedParam param) => | |
| 2278 new ParameterElementImpl.forSerializedFactory(param, element, | |
| 2279 synthetic: true)) | |
| 2280 .toList(); | |
| 2281 element.returnType = | |
| 2282 buildType(type.syntheticReturnType, typeParameterContext); | |
| 2283 FunctionTypeImpl result = new FunctionTypeImpl.elementWithNameAndArgs( | |
| 2284 element, null, null, false); | |
| 2285 element.type = result; | |
| 2286 return result; | |
| 2287 } else { | 2264 } else { |
| 2288 DartType getTypeArgument(int i) { | 2265 DartType getTypeArgument(int i) { |
| 2289 if (i < type.typeArguments.length) { | 2266 if (i < type.typeArguments.length) { |
| 2290 return buildType(type.typeArguments[i], typeParameterContext); | 2267 return buildType(type.typeArguments[i], typeParameterContext); |
| 2291 } else { | 2268 } else { |
| 2292 return DynamicTypeImpl.instance; | 2269 return DynamicTypeImpl.instance; |
| 2293 } | 2270 } |
| 2294 } | 2271 } |
| 2295 _ReferenceInfo referenceInfo = getReferenceInfo(type.reference); | 2272 _ReferenceInfo referenceInfo = getReferenceInfo(type.reference); |
| 2296 return referenceInfo.buildType( | 2273 return referenceInfo.buildType( |
| 2297 instantiateToBoundsAllowed, | 2274 instantiateToBoundsAllowed, |
| 2298 type.typeArguments.length, | 2275 type.typeArguments.length, |
| 2299 getTypeArgument, | 2276 getTypeArgument, |
| 2300 type.implicitFunctionTypeIndices); | 2277 type.implicitFunctionTypeIndices); |
| 2301 } | 2278 } |
| 2302 } | 2279 } |
| 2303 | 2280 |
| 2304 /** | 2281 /** |
| 2305 * Resynthesize a [FunctionTypeAliasElement] and place it in the | 2282 * Resynthesize a [FunctionTypeAliasElement] and place it in the |
| 2306 * [unitHolder]. | 2283 * [unitHolder]. |
| 2307 */ | 2284 */ |
| 2308 void buildTypedef(UnlinkedTypedef serializedTypedef) { | 2285 void buildTypedef(UnlinkedTypedef serializedTypedef) { |
| 2309 FunctionTypeAliasElementImpl functionTypeAliasElement = | 2286 FunctionTypeAliasElementImpl functionTypeAliasElement = |
| 2310 new FunctionTypeAliasElementImpl.forSerialized(serializedTypedef, unit); | 2287 new FunctionTypeAliasElementImpl.forSerialized(serializedTypedef, unit); |
| 2311 // TODO(scheglov) remove this after delaying parameters and their types | |
| 2312 currentTypeParameters.add(functionTypeAliasElement.typeParameters); | |
| 2313 functionTypeAliasElement.parameters = serializedTypedef.parameters | |
| 2314 .map((p) => new ParameterElementImpl.forSerializedFactory( | |
| 2315 p, functionTypeAliasElement)) | |
| 2316 .toList(); | |
| 2317 unitHolder.addTypeAlias(functionTypeAliasElement); | 2288 unitHolder.addTypeAlias(functionTypeAliasElement); |
| 2318 // TODO(scheglov) remove this after delaying parameters and their types | |
| 2319 currentTypeParameters.removeLast(); | |
| 2320 assert(currentTypeParameters.isEmpty); | |
| 2321 } | 2289 } |
| 2322 | 2290 |
| 2323 /** | 2291 /** |
| 2324 * Resynthesize a [TypeParameterElement], handling all parts of its except | 2292 * Resynthesize a [TypeParameterElement], handling all parts of its except |
| 2325 * its bound. | 2293 * its bound. |
| 2326 * | 2294 * |
| 2327 * The bound is deferred until later since it may refer to other type | 2295 * The bound is deferred until later since it may refer to other type |
| 2328 * parameters that have not been resynthesized yet. To handle the bound, | 2296 * parameters that have not been resynthesized yet. To handle the bound, |
| 2329 * call [finishTypeParameter]. | 2297 * call [finishTypeParameter]. |
| 2330 */ | 2298 */ |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2748 static String _getElementIdentifier(String name, ReferenceKind kind) { | 2716 static String _getElementIdentifier(String name, ReferenceKind kind) { |
| 2749 if (kind == ReferenceKind.topLevelPropertyAccessor || | 2717 if (kind == ReferenceKind.topLevelPropertyAccessor || |
| 2750 kind == ReferenceKind.propertyAccessor) { | 2718 kind == ReferenceKind.propertyAccessor) { |
| 2751 if (!name.endsWith('=')) { | 2719 if (!name.endsWith('=')) { |
| 2752 return name + '?'; | 2720 return name + '?'; |
| 2753 } | 2721 } |
| 2754 } | 2722 } |
| 2755 return name; | 2723 return name; |
| 2756 } | 2724 } |
| 2757 } | 2725 } |
| OLD | NEW |