Chromium Code Reviews| 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/standard_ast_factory.dart'; | 10 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; |
| (...skipping 1238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1249 * If [implicitFunctionTypeIndices] is not empty, a [DartType] should be | 1249 * If [implicitFunctionTypeIndices] is not empty, a [DartType] should be |
| 1250 * created which refers to a function type implicitly defined by one of the | 1250 * created which refers to a function type implicitly defined by one of the |
| 1251 * element's parameters. [implicitFunctionTypeIndices] is interpreted as in | 1251 * element's parameters. [implicitFunctionTypeIndices] is interpreted as in |
| 1252 * [EntityRef.implicitFunctionTypeIndices]. | 1252 * [EntityRef.implicitFunctionTypeIndices]. |
| 1253 * | 1253 * |
| 1254 * If the entity referred to by this [_ReferenceInfo] is not a type, `null` | 1254 * If the entity referred to by this [_ReferenceInfo] is not a type, `null` |
| 1255 * is returned. | 1255 * is returned. |
| 1256 */ | 1256 */ |
| 1257 DartType buildType(bool instantiateToBoundsAllowed, int numTypeArguments, | 1257 DartType buildType(bool instantiateToBoundsAllowed, int numTypeArguments, |
| 1258 DartType getTypeArgument(int i), List<int> implicitFunctionTypeIndices) { | 1258 DartType getTypeArgument(int i), List<int> implicitFunctionTypeIndices) { |
| 1259 DartType result = | 1259 DartType result; |
| 1260 (numTypeParameters == 0 && implicitFunctionTypeIndices.isEmpty) | 1260 if (numTypeParameters == 0 && implicitFunctionTypeIndices.isEmpty) { |
| 1261 ? type | 1261 if (element is GenericTypeAliasElementHandle) { |
|
scheglov
2017/04/10 21:37:16
Per offline discussion, this is OK to close the is
| |
| 1262 : _buildType(instantiateToBoundsAllowed, numTypeArguments, | 1262 List<DartType> argumentTypes = <DartType>[]; |
| 1263 getTypeArgument, implicitFunctionTypeIndices); | 1263 for (int i = 0; i < numTypeArguments; i++) { |
| 1264 argumentTypes.add(getTypeArgument(i)); | |
| 1265 } | |
| 1266 GenericTypeAliasElementImpl actualElement = | |
| 1267 (element as GenericTypeAliasElementHandle).actualElement; | |
| 1268 result = actualElement.typeAfterSubstitution(argumentTypes); | |
| 1269 } else { | |
| 1270 result = type; | |
| 1271 } | |
| 1272 } else { | |
| 1273 result = _buildType(instantiateToBoundsAllowed, numTypeArguments, | |
| 1274 getTypeArgument, implicitFunctionTypeIndices); | |
| 1275 } | |
| 1264 if (result == null) { | 1276 if (result == null) { |
| 1265 return DynamicTypeImpl.instance; | 1277 return DynamicTypeImpl.instance; |
| 1266 } | 1278 } |
| 1267 return result; | 1279 return result; |
| 1268 } | 1280 } |
| 1269 | 1281 |
| 1270 /** | 1282 /** |
| 1271 * If this reference refers to a type, build a [DartType]. Otherwise return | 1283 * If this reference refers to a type, build a [DartType]. Otherwise return |
| 1272 * `null`. If [numTypeArguments] is the same as the [numTypeParameters], | 1284 * `null`. If [numTypeArguments] is the same as the [numTypeParameters], |
| 1273 * the type is instantiated with type arguments returned by [getTypeArgument], | 1285 * the type is instantiated with type arguments returned by [getTypeArgument], |
| (...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1830 assert(location.components.length == 3); | 1842 assert(location.components.length == 3); |
| 1831 element = new FunctionElementHandle(summaryResynthesizer, location); | 1843 element = new FunctionElementHandle(summaryResynthesizer, location); |
| 1832 break; | 1844 break; |
| 1833 case ReferenceKind.topLevelPropertyAccessor: | 1845 case ReferenceKind.topLevelPropertyAccessor: |
| 1834 element = new PropertyAccessorElementHandle( | 1846 element = new PropertyAccessorElementHandle( |
| 1835 summaryResynthesizer, location); | 1847 summaryResynthesizer, location); |
| 1836 break; | 1848 break; |
| 1837 case ReferenceKind.typedef: | 1849 case ReferenceKind.typedef: |
| 1838 element = new FunctionTypeAliasElementHandle( | 1850 element = new FunctionTypeAliasElementHandle( |
| 1839 summaryResynthesizer, location); | 1851 summaryResynthesizer, location); |
| 1852 if ((element as ElementHandle).actualElement | |
|
scheglov
2017/04/10 21:37:16
Can we put FunctionTypeAliasElementHandle into a s
| |
| 1853 is GenericTypeAliasElement) { | |
| 1854 element = new GenericTypeAliasElementHandle( | |
|
scheglov
2017/04/10 21:37:17
It's a bit scary that we request the actual elemen
| |
| 1855 summaryResynthesizer, location); | |
| 1856 } | |
| 1840 isDeclarableType = true; | 1857 isDeclarableType = true; |
| 1841 break; | 1858 break; |
| 1842 case ReferenceKind.variable: | 1859 case ReferenceKind.variable: |
| 1843 Element enclosingElement = enclosingInfo.element; | 1860 Element enclosingElement = enclosingInfo.element; |
| 1844 if (enclosingElement is ExecutableElement) { | 1861 if (enclosingElement is ExecutableElement) { |
| 1845 element = new _DeferredLocalVariableElement( | 1862 element = new _DeferredLocalVariableElement( |
| 1846 enclosingElement, linkedReference.localIndex); | 1863 enclosingElement, linkedReference.localIndex); |
| 1847 } else { | 1864 } else { |
| 1848 throw new StateError('Unexpected element enclosing variable:' | 1865 throw new StateError('Unexpected element enclosing variable:' |
| 1849 ' ${enclosingElement.runtimeType}'); | 1866 ' ${enclosingElement.runtimeType}'); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1962 static String _getElementIdentifier(String name, ReferenceKind kind) { | 1979 static String _getElementIdentifier(String name, ReferenceKind kind) { |
| 1963 if (kind == ReferenceKind.topLevelPropertyAccessor || | 1980 if (kind == ReferenceKind.topLevelPropertyAccessor || |
| 1964 kind == ReferenceKind.propertyAccessor) { | 1981 kind == ReferenceKind.propertyAccessor) { |
| 1965 if (!name.endsWith('=')) { | 1982 if (!name.endsWith('=')) { |
| 1966 return name + '?'; | 1983 return name + '?'; |
| 1967 } | 1984 } |
| 1968 } | 1985 } |
| 1969 return name; | 1986 return name; |
| 1970 } | 1987 } |
| 1971 } | 1988 } |
| OLD | NEW |