OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 /** | 5 /** |
6 * This library is capable of producing linked summaries from unlinked | 6 * This library is capable of producing linked summaries from unlinked |
7 * ones (or prelinked ones). It functions by building a miniature | 7 * ones (or prelinked ones). It functions by building a miniature |
8 * element model to represent the contents of the summaries, and then | 8 * element model to represent the contents of the summaries, and then |
9 * scanning the element model to gather linked information and adding | 9 * scanning the element model to gather linked information and adding |
10 * it to the summary data structures. | 10 * it to the summary data structures. |
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 } | 599 } |
600 | 600 |
601 @override | 601 @override |
602 int get version => 0; | 602 int get version => 0; |
603 | 603 |
604 @override | 604 @override |
605 DartType buildType( | 605 DartType buildType( |
606 DartType getTypeArgument(int i), List<int> implicitFunctionTypeIndices) { | 606 DartType getTypeArgument(int i), List<int> implicitFunctionTypeIndices) { |
607 int numTypeParameters = _unlinkedClass.typeParameters.length; | 607 int numTypeParameters = _unlinkedClass.typeParameters.length; |
608 if (numTypeParameters != 0) { | 608 if (numTypeParameters != 0) { |
609 return new InterfaceTypeImpl.elementWithNameAndArgs(this, name, () { | 609 List<DartType> typeArguments = |
610 List<DartType> typeArguments = new List<DartType>(numTypeParameters); | 610 new List<DartType>.generate(numTypeParameters, getTypeArgument); |
611 for (int i = 0; i < numTypeParameters; i++) { | 611 if (typeArguments.contains(null)) { |
612 typeArguments[i] = | 612 return context.typeSystem.instantiateToBounds(this.type); |
613 getTypeArgument(i) ?? computeDefaultTypeArgument(i); | 613 } else { |
614 } | 614 return new InterfaceTypeImpl.elementWithNameAndArgs( |
615 return typeArguments; | 615 this, name, () => typeArguments); |
616 }); | 616 } |
617 } else { | 617 } else { |
618 return _type ??= new InterfaceTypeImpl(this); | 618 return _type ??= new InterfaceTypeImpl(this); |
619 } | 619 } |
620 } | 620 } |
621 | 621 |
622 @override | 622 @override |
623 PropertyAccessorElement getGetter(String getterName) { | 623 PropertyAccessorElement getGetter(String getterName) { |
624 for (PropertyAccessorElement accessor in accessors) { | 624 for (PropertyAccessorElement accessor in accessors) { |
625 if (accessor.isGetter && accessor.name == getterName) { | 625 if (accessor.isGetter && accessor.name == getterName) { |
626 return accessor; | 626 return accessor; |
(...skipping 2543 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3170 | 3170 |
3171 @override | 3171 @override |
3172 List<UnlinkedTypeParam> get unlinkedTypeParams => | 3172 List<UnlinkedTypeParam> get unlinkedTypeParams => |
3173 _unlinkedTypedef.typeParameters; | 3173 _unlinkedTypedef.typeParameters; |
3174 | 3174 |
3175 @override | 3175 @override |
3176 DartType buildType( | 3176 DartType buildType( |
3177 DartType getTypeArgument(int i), List<int> implicitFunctionTypeIndices) { | 3177 DartType getTypeArgument(int i), List<int> implicitFunctionTypeIndices) { |
3178 int numTypeParameters = _unlinkedTypedef.typeParameters.length; | 3178 int numTypeParameters = _unlinkedTypedef.typeParameters.length; |
3179 if (numTypeParameters != 0) { | 3179 if (numTypeParameters != 0) { |
3180 List<DartType> typeArguments = new List<DartType>(numTypeParameters); | 3180 List<DartType> typeArguments = |
3181 for (int i = 0; i < numTypeParameters; i++) { | 3181 new List<DartType>.generate(numTypeParameters, getTypeArgument); |
3182 typeArguments[i] = getTypeArgument(i) ?? computeDefaultTypeArgument(i); | 3182 if (typeArguments.contains(null)) { |
| 3183 return context.typeSystem |
| 3184 .instantiateToBounds(new FunctionTypeImpl.forTypedef(this)); |
| 3185 } else { |
| 3186 return new FunctionTypeImpl.elementWithNameAndArgs( |
| 3187 this, name, typeArguments, true); |
3183 } | 3188 } |
3184 return new FunctionTypeImpl.elementWithNameAndArgs( | |
3185 this, name, typeArguments, true); | |
3186 } else { | 3189 } else { |
3187 return _type ??= new FunctionTypeImpl.forTypedef(this); | 3190 return _type ??= new FunctionTypeImpl.forTypedef(this); |
3188 } | 3191 } |
3189 } | 3192 } |
3190 | 3193 |
3191 @override | 3194 @override |
3192 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 3195 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
3193 | 3196 |
3194 @override | 3197 @override |
3195 String toString() => '$enclosingElement.$name'; | 3198 String toString() => '$enclosingElement.$name'; |
(...skipping 1204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4400 */ | 4403 */ |
4401 DartType get asStaticType => DynamicTypeImpl.instance; | 4404 DartType get asStaticType => DynamicTypeImpl.instance; |
4402 | 4405 |
4403 /** | 4406 /** |
4404 * If this element can be used in a getter context as a type inference | 4407 * If this element can be used in a getter context as a type inference |
4405 * dependency, return the [TypeInferenceNode] for the inferred type. | 4408 * dependency, return the [TypeInferenceNode] for the inferred type. |
4406 * Otherwise return `null`. | 4409 * Otherwise return `null`. |
4407 */ | 4410 */ |
4408 TypeInferenceNode get asTypeInferenceNode => null; | 4411 TypeInferenceNode get asTypeInferenceNode => null; |
4409 | 4412 |
| 4413 @override |
| 4414 ElementLocation get location => new ElementLocationImpl.con1(this); |
| 4415 |
4410 /** | 4416 /** |
4411 * Return the type indicated by this element when it is used in a | 4417 * Return the type indicated by this element when it is used in a |
4412 * type instantiation context. If this element can't legally be | 4418 * type instantiation context. If this element can't legally be |
4413 * instantiated as a type, return the dynamic type. | 4419 * instantiated as a type, return the dynamic type. |
4414 * | 4420 * |
4415 * If the type is parameterized, [getTypeArgument] will be called to retrieve | 4421 * If the type is parameterized, [getTypeArgument] will be called to retrieve |
4416 * the type parameters. It should return `null` for unspecified type | 4422 * the type parameters. It should return `null` for unspecified type |
4417 * parameters. | 4423 * parameters. |
4418 */ | 4424 */ |
4419 DartType buildType(DartType getTypeArgument(int i), | 4425 DartType buildType(DartType getTypeArgument(int i), |
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5006 * there are no type parameters in scope. | 5012 * there are no type parameters in scope. |
5007 */ | 5013 */ |
5008 TypeParameterizedElementMixin get _typeParameterContext; | 5014 TypeParameterizedElementMixin get _typeParameterContext; |
5009 | 5015 |
5010 @override | 5016 @override |
5011 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 5017 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
5012 | 5018 |
5013 @override | 5019 @override |
5014 String toString() => '$enclosingElement.$name'; | 5020 String toString() => '$enclosingElement.$name'; |
5015 } | 5021 } |
OLD | NEW |