| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 engine.resolver; | 5 library engine.resolver; |
| 6 | 6 |
| 7 import "dart:math" as math; | 7 import "dart:math" as math; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 | 9 |
| 10 import 'package:analyzer/src/generated/utilities_collection.dart'; | 10 import 'package:analyzer/src/generated/utilities_collection.dart'; |
| (...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 736 if (typeElement == null) { | 736 if (typeElement == null) { |
| 737 throw new IllegalArgumentException("class element cannot be null"); | 737 throw new IllegalArgumentException("class element cannot be null"); |
| 738 } | 738 } |
| 739 _defineMembers(typeElement); | 739 _defineMembers(typeElement); |
| 740 } | 740 } |
| 741 | 741 |
| 742 @override | 742 @override |
| 743 AnalysisError getErrorForDuplicate(Element existing, Element duplicate) { | 743 AnalysisError getErrorForDuplicate(Element existing, Element duplicate) { |
| 744 if (existing is PropertyAccessorElement && duplicate is MethodElement) { | 744 if (existing is PropertyAccessorElement && duplicate is MethodElement) { |
| 745 if (existing.nameOffset < duplicate.nameOffset) { | 745 if (existing.nameOffset < duplicate.nameOffset) { |
| 746 return new AnalysisError.con2(duplicate.source, duplicate.nameOffset, | 746 return new AnalysisError(duplicate.source, duplicate.nameOffset, |
| 747 duplicate.displayName.length, | 747 duplicate.displayName.length, |
| 748 CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME, | 748 CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME, |
| 749 [existing.displayName]); | 749 [existing.displayName]); |
| 750 } else { | 750 } else { |
| 751 return new AnalysisError.con2(existing.source, existing.nameOffset, | 751 return new AnalysisError(existing.source, existing.nameOffset, |
| 752 existing.displayName.length, | 752 existing.displayName.length, |
| 753 CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME, | 753 CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME, |
| 754 [existing.displayName]); | 754 [existing.displayName]); |
| 755 } | 755 } |
| 756 } | 756 } |
| 757 return super.getErrorForDuplicate(existing, duplicate); | 757 return super.getErrorForDuplicate(existing, duplicate); |
| 758 } | 758 } |
| 759 | 759 |
| 760 /** | 760 /** |
| 761 * Define the instance members defined by the class. | 761 * Define the instance members defined by the class. |
| (...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1261 new DartObjectImpl(_typeProvider.nullType, NullState.NULL_STATE); | 1261 new DartObjectImpl(_typeProvider.nullType, NullState.NULL_STATE); |
| 1262 } else { | 1262 } else { |
| 1263 result = _validate( | 1263 result = _validate( |
| 1264 defaultValue, CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE); | 1264 defaultValue, CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE); |
| 1265 if (result != null) { | 1265 if (result != null) { |
| 1266 _reportErrorIfFromDeferredLibrary(defaultValue, | 1266 _reportErrorIfFromDeferredLibrary(defaultValue, |
| 1267 CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LI
BRARY); | 1267 CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE_FROM_DEFERRED_LI
BRARY); |
| 1268 } | 1268 } |
| 1269 } | 1269 } |
| 1270 VariableElementImpl element = parameter.element as VariableElementImpl; | 1270 VariableElementImpl element = parameter.element as VariableElementImpl; |
| 1271 element.evaluationResult = new EvaluationResultImpl.con1(result); | 1271 element.evaluationResult = new EvaluationResultImpl(result); |
| 1272 } | 1272 } |
| 1273 } | 1273 } |
| 1274 } | 1274 } |
| 1275 | 1275 |
| 1276 /** | 1276 /** |
| 1277 * Validates that the expressions of any field initializers in the class decla
ration are all | 1277 * Validates that the expressions of any field initializers in the class decla
ration are all |
| 1278 * compile time constants. Since this is only required if the class has a cons
tant constructor, | 1278 * compile time constants. Since this is only required if the class has a cons
tant constructor, |
| 1279 * the error is reported at the constructor site. | 1279 * the error is reported at the constructor site. |
| 1280 * | 1280 * |
| 1281 * @param classDeclaration the class which should be validated | 1281 * @param classDeclaration the class which should be validated |
| (...skipping 427 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1709 * expression is not a constant boolean value. | 1709 * expression is not a constant boolean value. |
| 1710 * | 1710 * |
| 1711 * @param expression the expression to evaluate | 1711 * @param expression the expression to evaluate |
| 1712 * @return [ValidResult.RESULT_TRUE] if it is `true`, [ValidResult.RESULT_FALS
E] | 1712 * @return [ValidResult.RESULT_TRUE] if it is `true`, [ValidResult.RESULT_FALS
E] |
| 1713 * if it is `false`, or `null` if the expression is not a constant boo
lean | 1713 * if it is `false`, or `null` if the expression is not a constant boo
lean |
| 1714 * value | 1714 * value |
| 1715 */ | 1715 */ |
| 1716 EvaluationResultImpl _getConstantBooleanValue(Expression expression) { | 1716 EvaluationResultImpl _getConstantBooleanValue(Expression expression) { |
| 1717 if (expression is BooleanLiteral) { | 1717 if (expression is BooleanLiteral) { |
| 1718 if (expression.value) { | 1718 if (expression.value) { |
| 1719 return new EvaluationResultImpl.con1( | 1719 return new EvaluationResultImpl( |
| 1720 new DartObjectImpl(null, BoolState.from(true))); | 1720 new DartObjectImpl(null, BoolState.from(true))); |
| 1721 } else { | 1721 } else { |
| 1722 return new EvaluationResultImpl.con1( | 1722 return new EvaluationResultImpl( |
| 1723 new DartObjectImpl(null, BoolState.from(false))); | 1723 new DartObjectImpl(null, BoolState.from(false))); |
| 1724 } | 1724 } |
| 1725 } | 1725 } |
| 1726 // Don't consider situations where we could evaluate to a constant boolean | 1726 // Don't consider situations where we could evaluate to a constant boolean |
| 1727 // expression with the ConstantVisitor | 1727 // expression with the ConstantVisitor |
| 1728 // else { | 1728 // else { |
| 1729 // EvaluationResultImpl result = expression.accept(new ConstantVisitor()); | 1729 // EvaluationResultImpl result = expression.accept(new ConstantVisitor()); |
| 1730 // if (result == ValidResult.RESULT_TRUE) { | 1730 // if (result == ValidResult.RESULT_TRUE) { |
| 1731 // return ValidResult.RESULT_TRUE; | 1731 // return ValidResult.RESULT_TRUE; |
| 1732 // } else if (result == ValidResult.RESULT_FALSE) { | 1732 // } else if (result == ValidResult.RESULT_FALSE) { |
| (...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2443 for (int i = 0; i < count; i++) { | 2443 for (int i = 0; i < count; i++) { |
| 2444 nonFields[i].accept(this); | 2444 nonFields[i].accept(this); |
| 2445 } | 2445 } |
| 2446 } finally { | 2446 } finally { |
| 2447 _currentHolder = previousHolder; | 2447 _currentHolder = previousHolder; |
| 2448 } | 2448 } |
| 2449 SimpleIdentifier className = node.name; | 2449 SimpleIdentifier className = node.name; |
| 2450 ClassElementImpl element = new ClassElementImpl.forNode(className); | 2450 ClassElementImpl element = new ClassElementImpl.forNode(className); |
| 2451 List<TypeParameterElement> typeParameters = holder.typeParameters; | 2451 List<TypeParameterElement> typeParameters = holder.typeParameters; |
| 2452 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters); | 2452 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters); |
| 2453 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl.con1(element); | 2453 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); |
| 2454 interfaceType.typeArguments = typeArguments; | 2454 interfaceType.typeArguments = typeArguments; |
| 2455 element.type = interfaceType; | 2455 element.type = interfaceType; |
| 2456 List<ConstructorElement> constructors = holder.constructors; | 2456 List<ConstructorElement> constructors = holder.constructors; |
| 2457 if (constructors.length == 0) { | 2457 if (constructors.length == 0) { |
| 2458 // | 2458 // |
| 2459 // Create the default constructor. | 2459 // Create the default constructor. |
| 2460 // | 2460 // |
| 2461 constructors = _createDefaultConstructors(interfaceType); | 2461 constructors = _createDefaultConstructors(interfaceType); |
| 2462 } | 2462 } |
| 2463 element.abstract = node.isAbstract; | 2463 element.abstract = node.isAbstract; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2498 _functionTypesToFix = new List<FunctionTypeImpl>(); | 2498 _functionTypesToFix = new List<FunctionTypeImpl>(); |
| 2499 _visitChildren(holder, node); | 2499 _visitChildren(holder, node); |
| 2500 SimpleIdentifier className = node.name; | 2500 SimpleIdentifier className = node.name; |
| 2501 ClassElementImpl element = new ClassElementImpl.forNode(className); | 2501 ClassElementImpl element = new ClassElementImpl.forNode(className); |
| 2502 element.abstract = node.abstractKeyword != null; | 2502 element.abstract = node.abstractKeyword != null; |
| 2503 element.mixinApplication = true; | 2503 element.mixinApplication = true; |
| 2504 element.typedef = true; | 2504 element.typedef = true; |
| 2505 List<TypeParameterElement> typeParameters = holder.typeParameters; | 2505 List<TypeParameterElement> typeParameters = holder.typeParameters; |
| 2506 element.typeParameters = typeParameters; | 2506 element.typeParameters = typeParameters; |
| 2507 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters); | 2507 List<DartType> typeArguments = _createTypeParameterTypes(typeParameters); |
| 2508 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl.con1(element); | 2508 InterfaceTypeImpl interfaceType = new InterfaceTypeImpl(element); |
| 2509 interfaceType.typeArguments = typeArguments; | 2509 interfaceType.typeArguments = typeArguments; |
| 2510 element.type = interfaceType; | 2510 element.type = interfaceType; |
| 2511 // set default constructor | 2511 // set default constructor |
| 2512 element.constructors = _createDefaultConstructors(interfaceType); | 2512 element.constructors = _createDefaultConstructors(interfaceType); |
| 2513 for (FunctionTypeImpl functionType in _functionTypesToFix) { | 2513 for (FunctionTypeImpl functionType in _functionTypesToFix) { |
| 2514 functionType.typeArguments = typeArguments; | 2514 functionType.typeArguments = typeArguments; |
| 2515 } | 2515 } |
| 2516 _functionTypesToFix = null; | 2516 _functionTypesToFix = null; |
| 2517 _currentHolder.addType(element); | 2517 _currentHolder.addType(element); |
| 2518 className.staticElement = element; | 2518 className.staticElement = element; |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2622 normalParameter.accept(this); | 2622 normalParameter.accept(this); |
| 2623 holder.validate(); | 2623 holder.validate(); |
| 2624 return null; | 2624 return null; |
| 2625 } | 2625 } |
| 2626 | 2626 |
| 2627 @override | 2627 @override |
| 2628 Object visitEnumDeclaration(EnumDeclaration node) { | 2628 Object visitEnumDeclaration(EnumDeclaration node) { |
| 2629 SimpleIdentifier enumName = node.name; | 2629 SimpleIdentifier enumName = node.name; |
| 2630 ClassElementImpl enumElement = new ClassElementImpl.forNode(enumName); | 2630 ClassElementImpl enumElement = new ClassElementImpl.forNode(enumName); |
| 2631 enumElement.enum2 = true; | 2631 enumElement.enum2 = true; |
| 2632 InterfaceTypeImpl enumType = new InterfaceTypeImpl.con1(enumElement); | 2632 InterfaceTypeImpl enumType = new InterfaceTypeImpl(enumElement); |
| 2633 enumElement.type = enumType; | 2633 enumElement.type = enumType; |
| 2634 _currentHolder.addEnum(enumElement); | 2634 _currentHolder.addEnum(enumElement); |
| 2635 enumName.staticElement = enumElement; | 2635 enumName.staticElement = enumElement; |
| 2636 return super.visitEnumDeclaration(node); | 2636 return super.visitEnumDeclaration(node); |
| 2637 } | 2637 } |
| 2638 | 2638 |
| 2639 @override | 2639 @override |
| 2640 Object visitFieldDeclaration(FieldDeclaration node) { | 2640 Object visitFieldDeclaration(FieldDeclaration node) { |
| 2641 bool wasInField = _inFieldContext; | 2641 bool wasInField = _inFieldContext; |
| 2642 _inFieldContext = true; | 2642 _inFieldContext = true; |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2806 element.generator = true; | 2806 element.generator = true; |
| 2807 } | 2807 } |
| 2808 if (_inFunction) { | 2808 if (_inFunction) { |
| 2809 Block enclosingBlock = node.getAncestor((node) => node is Block); | 2809 Block enclosingBlock = node.getAncestor((node) => node is Block); |
| 2810 if (enclosingBlock != null) { | 2810 if (enclosingBlock != null) { |
| 2811 int functionEnd = node.offset + node.length; | 2811 int functionEnd = node.offset + node.length; |
| 2812 int blockEnd = enclosingBlock.offset + enclosingBlock.length; | 2812 int blockEnd = enclosingBlock.offset + enclosingBlock.length; |
| 2813 element.setVisibleRange(functionEnd, blockEnd - functionEnd - 1); | 2813 element.setVisibleRange(functionEnd, blockEnd - functionEnd - 1); |
| 2814 } | 2814 } |
| 2815 } | 2815 } |
| 2816 FunctionTypeImpl type = new FunctionTypeImpl.con1(element); | 2816 FunctionTypeImpl type = new FunctionTypeImpl(element); |
| 2817 if (_functionTypesToFix != null) { | 2817 if (_functionTypesToFix != null) { |
| 2818 _functionTypesToFix.add(type); | 2818 _functionTypesToFix.add(type); |
| 2819 } | 2819 } |
| 2820 element.type = type; | 2820 element.type = type; |
| 2821 _currentHolder.addFunction(element); | 2821 _currentHolder.addFunction(element); |
| 2822 node.element = element; | 2822 node.element = element; |
| 2823 holder.validate(); | 2823 holder.validate(); |
| 2824 return null; | 2824 return null; |
| 2825 } | 2825 } |
| 2826 | 2826 |
| 2827 @override | 2827 @override |
| 2828 Object visitFunctionTypeAlias(FunctionTypeAlias node) { | 2828 Object visitFunctionTypeAlias(FunctionTypeAlias node) { |
| 2829 ElementHolder holder = new ElementHolder(); | 2829 ElementHolder holder = new ElementHolder(); |
| 2830 _visitChildren(holder, node); | 2830 _visitChildren(holder, node); |
| 2831 SimpleIdentifier aliasName = node.name; | 2831 SimpleIdentifier aliasName = node.name; |
| 2832 List<ParameterElement> parameters = holder.parameters; | 2832 List<ParameterElement> parameters = holder.parameters; |
| 2833 List<TypeParameterElement> typeParameters = holder.typeParameters; | 2833 List<TypeParameterElement> typeParameters = holder.typeParameters; |
| 2834 FunctionTypeAliasElementImpl element = | 2834 FunctionTypeAliasElementImpl element = |
| 2835 new FunctionTypeAliasElementImpl.forNode(aliasName); | 2835 new FunctionTypeAliasElementImpl.forNode(aliasName); |
| 2836 element.parameters = parameters; | 2836 element.parameters = parameters; |
| 2837 element.typeParameters = typeParameters; | 2837 element.typeParameters = typeParameters; |
| 2838 FunctionTypeImpl type = new FunctionTypeImpl.con2(element); | 2838 FunctionTypeImpl type = new FunctionTypeImpl.forTypedef(element); |
| 2839 type.typeArguments = _createTypeParameterTypes(typeParameters); | 2839 type.typeArguments = _createTypeParameterTypes(typeParameters); |
| 2840 element.type = type; | 2840 element.type = type; |
| 2841 _currentHolder.addTypeAlias(element); | 2841 _currentHolder.addTypeAlias(element); |
| 2842 aliasName.staticElement = element; | 2842 aliasName.staticElement = element; |
| 2843 holder.validate(); | 2843 holder.validate(); |
| 2844 return null; | 2844 return null; |
| 2845 } | 2845 } |
| 2846 | 2846 |
| 2847 @override | 2847 @override |
| 2848 Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) { | 2848 Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) { |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3067 @override | 3067 @override |
| 3068 Object visitVariableDeclaration(VariableDeclaration node) { | 3068 Object visitVariableDeclaration(VariableDeclaration node) { |
| 3069 bool isConst = node.isConst; | 3069 bool isConst = node.isConst; |
| 3070 bool isFinal = node.isFinal; | 3070 bool isFinal = node.isFinal; |
| 3071 bool hasInitializer = node.initializer != null; | 3071 bool hasInitializer = node.initializer != null; |
| 3072 VariableElementImpl element; | 3072 VariableElementImpl element; |
| 3073 if (_inFieldContext) { | 3073 if (_inFieldContext) { |
| 3074 SimpleIdentifier fieldName = node.name; | 3074 SimpleIdentifier fieldName = node.name; |
| 3075 FieldElementImpl field; | 3075 FieldElementImpl field; |
| 3076 if ((isConst || isFinal) && hasInitializer) { | 3076 if ((isConst || isFinal) && hasInitializer) { |
| 3077 field = new ConstFieldElementImpl.con1(fieldName); | 3077 field = new ConstFieldElementImpl.forNode(fieldName); |
| 3078 } else { | 3078 } else { |
| 3079 field = new FieldElementImpl.forNode(fieldName); | 3079 field = new FieldElementImpl.forNode(fieldName); |
| 3080 } | 3080 } |
| 3081 element = field; | 3081 element = field; |
| 3082 _currentHolder.addField(field); | 3082 _currentHolder.addField(field); |
| 3083 fieldName.staticElement = field; | 3083 fieldName.staticElement = field; |
| 3084 } else if (_inFunction) { | 3084 } else if (_inFunction) { |
| 3085 SimpleIdentifier variableName = node.name; | 3085 SimpleIdentifier variableName = node.name; |
| 3086 LocalVariableElementImpl variable; | 3086 LocalVariableElementImpl variable; |
| 3087 if (isConst && hasInitializer) { | 3087 if (isConst && hasInitializer) { |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3174 * | 3174 * |
| 3175 * @param interfaceType the interface type for which to create a default const
ructor | 3175 * @param interfaceType the interface type for which to create a default const
ructor |
| 3176 * @return the [ConstructorElement]s array with the single default constructor
element | 3176 * @return the [ConstructorElement]s array with the single default constructor
element |
| 3177 */ | 3177 */ |
| 3178 List<ConstructorElement> _createDefaultConstructors( | 3178 List<ConstructorElement> _createDefaultConstructors( |
| 3179 InterfaceTypeImpl interfaceType) { | 3179 InterfaceTypeImpl interfaceType) { |
| 3180 ConstructorElementImpl constructor = | 3180 ConstructorElementImpl constructor = |
| 3181 new ConstructorElementImpl.forNode(null); | 3181 new ConstructorElementImpl.forNode(null); |
| 3182 constructor.synthetic = true; | 3182 constructor.synthetic = true; |
| 3183 constructor.returnType = interfaceType; | 3183 constructor.returnType = interfaceType; |
| 3184 FunctionTypeImpl type = new FunctionTypeImpl.con1(constructor); | 3184 FunctionTypeImpl type = new FunctionTypeImpl(constructor); |
| 3185 _functionTypesToFix.add(type); | 3185 _functionTypesToFix.add(type); |
| 3186 constructor.type = type; | 3186 constructor.type = type; |
| 3187 return <ConstructorElement>[constructor]; | 3187 return <ConstructorElement>[constructor]; |
| 3188 } | 3188 } |
| 3189 | 3189 |
| 3190 /** | 3190 /** |
| 3191 * Create the types associated with the given type parameters, setting the typ
e of each type | 3191 * Create the types associated with the given type parameters, setting the typ
e of each type |
| 3192 * parameter, and return an array of types corresponding to the given paramete
rs. | 3192 * parameter, and return an array of types corresponding to the given paramete
rs. |
| 3193 * | 3193 * |
| 3194 * @param typeParameters the type parameters for which types are to be created | 3194 * @param typeParameters the type parameters for which types are to be created |
| (...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3743 List<FieldElement> fields = new List<FieldElement>(); | 3743 List<FieldElement> fields = new List<FieldElement>(); |
| 3744 List<PropertyAccessorElement> getters = new List<PropertyAccessorElement>(); | 3744 List<PropertyAccessorElement> getters = new List<PropertyAccessorElement>(); |
| 3745 InterfaceType intType = _typeProvider.intType; | 3745 InterfaceType intType = _typeProvider.intType; |
| 3746 String indexFieldName = "index"; | 3746 String indexFieldName = "index"; |
| 3747 FieldElementImpl indexField = new FieldElementImpl(indexFieldName, -1); | 3747 FieldElementImpl indexField = new FieldElementImpl(indexFieldName, -1); |
| 3748 indexField.final2 = true; | 3748 indexField.final2 = true; |
| 3749 indexField.synthetic = true; | 3749 indexField.synthetic = true; |
| 3750 indexField.type = intType; | 3750 indexField.type = intType; |
| 3751 fields.add(indexField); | 3751 fields.add(indexField); |
| 3752 getters.add(_createGetter(indexField)); | 3752 getters.add(_createGetter(indexField)); |
| 3753 ConstFieldElementImpl valuesField = | 3753 ConstFieldElementImpl valuesField = new ConstFieldElementImpl("values", -1); |
| 3754 new ConstFieldElementImpl.con2("values", -1); | |
| 3755 valuesField.static = true; | 3754 valuesField.static = true; |
| 3756 valuesField.const3 = true; | 3755 valuesField.const3 = true; |
| 3757 valuesField.synthetic = true; | 3756 valuesField.synthetic = true; |
| 3758 valuesField.type = _typeProvider.listType.substitute4(<DartType>[enumType]); | 3757 valuesField.type = _typeProvider.listType.substitute4(<DartType>[enumType]); |
| 3759 fields.add(valuesField); | 3758 fields.add(valuesField); |
| 3760 getters.add(_createGetter(valuesField)); | 3759 getters.add(_createGetter(valuesField)); |
| 3761 // | 3760 // |
| 3762 // Build the enum constants. | 3761 // Build the enum constants. |
| 3763 // | 3762 // |
| 3764 NodeList<EnumConstantDeclaration> constants = node.constants; | 3763 NodeList<EnumConstantDeclaration> constants = node.constants; |
| 3765 List<DartObjectImpl> constantValues = new List<DartObjectImpl>(); | 3764 List<DartObjectImpl> constantValues = new List<DartObjectImpl>(); |
| 3766 int constantCount = constants.length; | 3765 int constantCount = constants.length; |
| 3767 for (int i = 0; i < constantCount; i++) { | 3766 for (int i = 0; i < constantCount; i++) { |
| 3768 SimpleIdentifier constantName = constants[i].name; | 3767 SimpleIdentifier constantName = constants[i].name; |
| 3769 FieldElementImpl constantField = | 3768 FieldElementImpl constantField = |
| 3770 new ConstFieldElementImpl.con1(constantName); | 3769 new ConstFieldElementImpl.forNode(constantName); |
| 3771 constantField.static = true; | 3770 constantField.static = true; |
| 3772 constantField.const3 = true; | 3771 constantField.const3 = true; |
| 3773 constantField.type = enumType; | 3772 constantField.type = enumType; |
| 3774 // | 3773 // |
| 3775 // Create a value for the constant. | 3774 // Create a value for the constant. |
| 3776 // | 3775 // |
| 3777 HashMap<String, DartObjectImpl> fieldMap = | 3776 HashMap<String, DartObjectImpl> fieldMap = |
| 3778 new HashMap<String, DartObjectImpl>(); | 3777 new HashMap<String, DartObjectImpl>(); |
| 3779 fieldMap[indexFieldName] = new DartObjectImpl(intType, new IntState(i)); | 3778 fieldMap[indexFieldName] = new DartObjectImpl(intType, new IntState(i)); |
| 3780 DartObjectImpl value = | 3779 DartObjectImpl value = |
| 3781 new DartObjectImpl(enumType, new GenericState(fieldMap)); | 3780 new DartObjectImpl(enumType, new GenericState(fieldMap)); |
| 3782 constantValues.add(value); | 3781 constantValues.add(value); |
| 3783 constantField.evaluationResult = new EvaluationResultImpl.con1(value); | 3782 constantField.evaluationResult = new EvaluationResultImpl(value); |
| 3784 fields.add(constantField); | 3783 fields.add(constantField); |
| 3785 getters.add(_createGetter(constantField)); | 3784 getters.add(_createGetter(constantField)); |
| 3786 constantName.staticElement = constantField; | 3785 constantName.staticElement = constantField; |
| 3787 } | 3786 } |
| 3788 // | 3787 // |
| 3789 // Build the value of the 'values' field. | 3788 // Build the value of the 'values' field. |
| 3790 // | 3789 // |
| 3791 valuesField.evaluationResult = new EvaluationResultImpl.con1( | 3790 valuesField.evaluationResult = new EvaluationResultImpl( |
| 3792 new DartObjectImpl(valuesField.type, new ListState(constantValues))); | 3791 new DartObjectImpl(valuesField.type, new ListState(constantValues))); |
| 3793 // | 3792 // |
| 3794 // Finish building the enum. | 3793 // Finish building the enum. |
| 3795 // | 3794 // |
| 3796 enumElement.fields = fields; | 3795 enumElement.fields = fields; |
| 3797 enumElement.accessors = getters; | 3796 enumElement.accessors = getters; |
| 3798 // Client code isn't allowed to invoke the constructor, so we do not model | 3797 // Client code isn't allowed to invoke the constructor, so we do not model |
| 3799 // it. | 3798 // it. |
| 3800 return super.visitEnumDeclaration(node); | 3799 return super.visitEnumDeclaration(node); |
| 3801 } | 3800 } |
| 3802 | 3801 |
| 3803 /** | 3802 /** |
| 3804 * Create a getter that corresponds to the given field. | 3803 * Create a getter that corresponds to the given field. |
| 3805 * | 3804 * |
| 3806 * @param field the field for which a getter is to be created | 3805 * @param field the field for which a getter is to be created |
| 3807 * @return the getter that was created | 3806 * @return the getter that was created |
| 3808 */ | 3807 */ |
| 3809 PropertyAccessorElement _createGetter(FieldElementImpl field) { | 3808 PropertyAccessorElement _createGetter(FieldElementImpl field) { |
| 3810 PropertyAccessorElementImpl getter = | 3809 PropertyAccessorElementImpl getter = |
| 3811 new PropertyAccessorElementImpl.forVariable(field); | 3810 new PropertyAccessorElementImpl.forVariable(field); |
| 3812 getter.getter = true; | 3811 getter.getter = true; |
| 3813 getter.returnType = field.type; | 3812 getter.returnType = field.type; |
| 3814 getter.type = new FunctionTypeImpl.con1(getter); | 3813 getter.type = new FunctionTypeImpl(getter); |
| 3815 field.getter = getter; | 3814 field.getter = getter; |
| 3816 return getter; | 3815 return getter; |
| 3817 } | 3816 } |
| 3818 } | 3817 } |
| 3819 | 3818 |
| 3820 /** | 3819 /** |
| 3821 * Instances of the class `ExitDetector` determine whether the visited AST node
is guaranteed | 3820 * Instances of the class `ExitDetector` determine whether the visited AST node
is guaranteed |
| 3822 * to terminate by executing a `return` statement, `throw` expression, `rethrow` | 3821 * to terminate by executing a `return` statement, `throw` expression, `rethrow` |
| 3823 * expression, or simple infinite loop such as `while(true)`. | 3822 * expression, or simple infinite loop such as `while(true)`. |
| 3824 */ | 3823 */ |
| (...skipping 1380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5205 implicitParameter.const3 = explicitParameter.isConst; | 5204 implicitParameter.const3 = explicitParameter.isConst; |
| 5206 implicitParameter.final2 = explicitParameter.isFinal; | 5205 implicitParameter.final2 = explicitParameter.isFinal; |
| 5207 implicitParameter.parameterKind = explicitParameter.parameterKind; | 5206 implicitParameter.parameterKind = explicitParameter.parameterKind; |
| 5208 implicitParameter.synthetic = true; | 5207 implicitParameter.synthetic = true; |
| 5209 implicitParameter.type = | 5208 implicitParameter.type = |
| 5210 explicitParameter.type.substitute2(argumentTypes, parameterTypes); | 5209 explicitParameter.type.substitute2(argumentTypes, parameterTypes); |
| 5211 implicitParameters[i] = implicitParameter; | 5210 implicitParameters[i] = implicitParameter; |
| 5212 } | 5211 } |
| 5213 implicitConstructor.parameters = implicitParameters; | 5212 implicitConstructor.parameters = implicitParameters; |
| 5214 } | 5213 } |
| 5215 FunctionTypeImpl type = new FunctionTypeImpl.con1(implicitConstructor); | 5214 FunctionTypeImpl type = new FunctionTypeImpl(implicitConstructor); |
| 5216 type.typeArguments = classType.typeArguments; | 5215 type.typeArguments = classType.typeArguments; |
| 5217 implicitConstructor.type = type; | 5216 implicitConstructor.type = type; |
| 5218 return implicitConstructor; | 5217 return implicitConstructor; |
| 5219 } | 5218 } |
| 5220 | 5219 |
| 5221 /** | 5220 /** |
| 5222 * Find all the constructors that should be forwarded from the given | 5221 * Find all the constructors that should be forwarded from the given |
| 5223 * [superType], to the class or mixin application [classElement], | 5222 * [superType], to the class or mixin application [classElement], |
| 5224 * and pass information about them to [callback]. | 5223 * and pass information about them to [callback]. |
| 5225 * | 5224 * |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5288 if (superElement != null) { | 5287 if (superElement != null) { |
| 5289 _callback(classElement, superElement, () { | 5288 _callback(classElement, superElement, () { |
| 5290 bool constructorFound = false; | 5289 bool constructorFound = false; |
| 5291 void callback(ConstructorElement explicitConstructor, | 5290 void callback(ConstructorElement explicitConstructor, |
| 5292 List<DartType> parameterTypes, List<DartType> argumentTypes) { | 5291 List<DartType> parameterTypes, List<DartType> argumentTypes) { |
| 5293 constructorFound = true; | 5292 constructorFound = true; |
| 5294 } | 5293 } |
| 5295 if (_findForwardedConstructors(classElement, superType, callback) && | 5294 if (_findForwardedConstructors(classElement, superType, callback) && |
| 5296 !constructorFound) { | 5295 !constructorFound) { |
| 5297 SourceRange withRange = classElement.withClauseRange; | 5296 SourceRange withRange = classElement.withClauseRange; |
| 5298 errorListener.onError(new AnalysisError.con2(classElement.source, | 5297 errorListener.onError(new AnalysisError(classElement.source, |
| 5299 withRange.offset, withRange.length, | 5298 withRange.offset, withRange.length, |
| 5300 CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS, | 5299 CompileTimeErrorCode.MIXIN_HAS_NO_CONSTRUCTORS, |
| 5301 [superElement.name])); | 5300 [superElement.name])); |
| 5302 classElement.mixinErrorsReported = true; | 5301 classElement.mixinErrorsReported = true; |
| 5303 } | 5302 } |
| 5304 }); | 5303 }); |
| 5305 } | 5304 } |
| 5306 } | 5305 } |
| 5307 } | 5306 } |
| 5308 | 5307 |
| (...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5963 superclassElt = supertype.element; | 5962 superclassElt = supertype.element; |
| 5964 } else { | 5963 } else { |
| 5965 // classElt is Object | 5964 // classElt is Object |
| 5966 _classLookup[classElt] = resultMap; | 5965 _classLookup[classElt] = resultMap; |
| 5967 return resultMap; | 5966 return resultMap; |
| 5968 } | 5967 } |
| 5969 if (superclassElt != null) { | 5968 if (superclassElt != null) { |
| 5970 if (!visitedClasses.contains(superclassElt)) { | 5969 if (!visitedClasses.contains(superclassElt)) { |
| 5971 visitedClasses.add(superclassElt); | 5970 visitedClasses.add(superclassElt); |
| 5972 try { | 5971 try { |
| 5973 resultMap = new MemberMap.con2( | 5972 resultMap = new MemberMap.from( |
| 5974 _computeClassChainLookupMap(superclassElt, visitedClasses)); | 5973 _computeClassChainLookupMap(superclassElt, visitedClasses)); |
| 5975 // | 5974 // |
| 5976 // Substitute the super types down the hierarchy. | 5975 // Substitute the super types down the hierarchy. |
| 5977 // | 5976 // |
| 5978 _substituteTypeParametersDownHierarchy(supertype, resultMap); | 5977 _substituteTypeParametersDownHierarchy(supertype, resultMap); |
| 5979 // | 5978 // |
| 5980 // Include the members from the superclass in the resultMap. | 5979 // Include the members from the superclass in the resultMap. |
| 5981 // | 5980 // |
| 5982 _recordMapWithClassMembers(resultMap, supertype, false); | 5981 _recordMapWithClassMembers(resultMap, supertype, false); |
| 5983 } finally { | 5982 } finally { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 5996 // multiple mixins, visit them in the order listed so that methods in later | 5995 // multiple mixins, visit them in the order listed so that methods in later |
| 5997 // mixins will overwrite identically-named methods in earlier mixins. | 5996 // mixins will overwrite identically-named methods in earlier mixins. |
| 5998 // | 5997 // |
| 5999 List<InterfaceType> mixins = classElt.mixins; | 5998 List<InterfaceType> mixins = classElt.mixins; |
| 6000 for (InterfaceType mixin in mixins) { | 5999 for (InterfaceType mixin in mixins) { |
| 6001 ClassElement mixinElement = mixin.element; | 6000 ClassElement mixinElement = mixin.element; |
| 6002 if (mixinElement != null) { | 6001 if (mixinElement != null) { |
| 6003 if (!visitedClasses.contains(mixinElement)) { | 6002 if (!visitedClasses.contains(mixinElement)) { |
| 6004 visitedClasses.add(mixinElement); | 6003 visitedClasses.add(mixinElement); |
| 6005 try { | 6004 try { |
| 6006 MemberMap map = new MemberMap.con2( | 6005 MemberMap map = new MemberMap.from( |
| 6007 _computeClassChainLookupMap(mixinElement, visitedClasses)); | 6006 _computeClassChainLookupMap(mixinElement, visitedClasses)); |
| 6008 // | 6007 // |
| 6009 // Substitute the super types down the hierarchy. | 6008 // Substitute the super types down the hierarchy. |
| 6010 // | 6009 // |
| 6011 _substituteTypeParametersDownHierarchy(mixin, map); | 6010 _substituteTypeParametersDownHierarchy(mixin, map); |
| 6012 // | 6011 // |
| 6013 // Include the members from the superclass in the resultMap. | 6012 // Include the members from the superclass in the resultMap. |
| 6014 // | 6013 // |
| 6015 _recordMapWithClassMembers(map, mixin, false); | 6014 _recordMapWithClassMembers(map, mixin, false); |
| 6016 // | 6015 // |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6164 // | 6163 // |
| 6165 if (superclassElement != null) { | 6164 if (superclassElement != null) { |
| 6166 if (!visitedInterfaces.contains(superclassElement)) { | 6165 if (!visitedInterfaces.contains(superclassElement)) { |
| 6167 try { | 6166 try { |
| 6168 visitedInterfaces.add(superclassElement); | 6167 visitedInterfaces.add(superclassElement); |
| 6169 // | 6168 // |
| 6170 // Recursively compute the map for the super type. | 6169 // Recursively compute the map for the super type. |
| 6171 // | 6170 // |
| 6172 MemberMap map = | 6171 MemberMap map = |
| 6173 _computeInterfaceLookupMap(superclassElement, visitedInterfaces); | 6172 _computeInterfaceLookupMap(superclassElement, visitedInterfaces); |
| 6174 map = new MemberMap.con2(map); | 6173 map = new MemberMap.from(map); |
| 6175 // | 6174 // |
| 6176 // Substitute the super type down the hierarchy. | 6175 // Substitute the super type down the hierarchy. |
| 6177 // | 6176 // |
| 6178 _substituteTypeParametersDownHierarchy(supertype, map); | 6177 _substituteTypeParametersDownHierarchy(supertype, map); |
| 6179 // | 6178 // |
| 6180 // Add any members from the super type into the map as well. | 6179 // Add any members from the super type into the map as well. |
| 6181 // | 6180 // |
| 6182 _recordMapWithClassMembers(map, supertype, true); | 6181 _recordMapWithClassMembers(map, supertype, true); |
| 6183 lookupMaps.add(map); | 6182 lookupMaps.add(map); |
| 6184 } finally { | 6183 } finally { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 6196 ClassElement mixinElement = mixinType.element; | 6195 ClassElement mixinElement = mixinType.element; |
| 6197 if (mixinElement != null) { | 6196 if (mixinElement != null) { |
| 6198 if (!visitedInterfaces.contains(mixinElement)) { | 6197 if (!visitedInterfaces.contains(mixinElement)) { |
| 6199 try { | 6198 try { |
| 6200 visitedInterfaces.add(mixinElement); | 6199 visitedInterfaces.add(mixinElement); |
| 6201 // | 6200 // |
| 6202 // Recursively compute the map for the mixin. | 6201 // Recursively compute the map for the mixin. |
| 6203 // | 6202 // |
| 6204 MemberMap map = | 6203 MemberMap map = |
| 6205 _computeInterfaceLookupMap(mixinElement, visitedInterfaces); | 6204 _computeInterfaceLookupMap(mixinElement, visitedInterfaces); |
| 6206 map = new MemberMap.con2(map); | 6205 map = new MemberMap.from(map); |
| 6207 // | 6206 // |
| 6208 // Substitute the mixin type down the hierarchy. | 6207 // Substitute the mixin type down the hierarchy. |
| 6209 // | 6208 // |
| 6210 _substituteTypeParametersDownHierarchy(mixinType, map); | 6209 _substituteTypeParametersDownHierarchy(mixinType, map); |
| 6211 // | 6210 // |
| 6212 // Add any members from the mixin type into the map as well. | 6211 // Add any members from the mixin type into the map as well. |
| 6213 // | 6212 // |
| 6214 _recordMapWithClassMembers(map, mixinType, true); | 6213 _recordMapWithClassMembers(map, mixinType, true); |
| 6215 lookupMaps.add(map); | 6214 lookupMaps.add(map); |
| 6216 } finally { | 6215 } finally { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 6228 ClassElement interfaceElement = interfaceType.element; | 6227 ClassElement interfaceElement = interfaceType.element; |
| 6229 if (interfaceElement != null) { | 6228 if (interfaceElement != null) { |
| 6230 if (!visitedInterfaces.contains(interfaceElement)) { | 6229 if (!visitedInterfaces.contains(interfaceElement)) { |
| 6231 try { | 6230 try { |
| 6232 visitedInterfaces.add(interfaceElement); | 6231 visitedInterfaces.add(interfaceElement); |
| 6233 // | 6232 // |
| 6234 // Recursively compute the map for the interfaces. | 6233 // Recursively compute the map for the interfaces. |
| 6235 // | 6234 // |
| 6236 MemberMap map = | 6235 MemberMap map = |
| 6237 _computeInterfaceLookupMap(interfaceElement, visitedInterfaces); | 6236 _computeInterfaceLookupMap(interfaceElement, visitedInterfaces); |
| 6238 map = new MemberMap.con2(map); | 6237 map = new MemberMap.from(map); |
| 6239 // | 6238 // |
| 6240 // Substitute the supertypes down the hierarchy | 6239 // Substitute the supertypes down the hierarchy |
| 6241 // | 6240 // |
| 6242 _substituteTypeParametersDownHierarchy(interfaceType, map); | 6241 _substituteTypeParametersDownHierarchy(interfaceType, map); |
| 6243 // | 6242 // |
| 6244 // And add any members from the interface into the map as well. | 6243 // And add any members from the interface into the map as well. |
| 6245 // | 6244 // |
| 6246 _recordMapWithClassMembers(map, interfaceType, true); | 6245 _recordMapWithClassMembers(map, interfaceType, true); |
| 6247 lookupMaps.add(map); | 6246 lookupMaps.add(map); |
| 6248 } finally { | 6247 } finally { |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6329 * @param errorCode the error code to be associated with this error | 6328 * @param errorCode the error code to be associated with this error |
| 6330 * @param arguments the arguments used to build the error message | 6329 * @param arguments the arguments used to build the error message |
| 6331 */ | 6330 */ |
| 6332 void _reportError(ClassElement classElt, int offset, int length, | 6331 void _reportError(ClassElement classElt, int offset, int length, |
| 6333 ErrorCode errorCode, List<Object> arguments) { | 6332 ErrorCode errorCode, List<Object> arguments) { |
| 6334 HashSet<AnalysisError> errorSet = _errorsInClassElement[classElt]; | 6333 HashSet<AnalysisError> errorSet = _errorsInClassElement[classElt]; |
| 6335 if (errorSet == null) { | 6334 if (errorSet == null) { |
| 6336 errorSet = new HashSet<AnalysisError>(); | 6335 errorSet = new HashSet<AnalysisError>(); |
| 6337 _errorsInClassElement[classElt] = errorSet; | 6336 _errorsInClassElement[classElt] = errorSet; |
| 6338 } | 6337 } |
| 6339 errorSet.add(new AnalysisError.con2( | 6338 errorSet.add(new AnalysisError( |
| 6340 classElt.source, offset, length, errorCode, arguments)); | 6339 classElt.source, offset, length, errorCode, arguments)); |
| 6341 } | 6340 } |
| 6342 | 6341 |
| 6343 /** | 6342 /** |
| 6344 * Given the set of methods defined by classes above [classElt] in the class h
ierarchy, | 6343 * Given the set of methods defined by classes above [classElt] in the class h
ierarchy, |
| 6345 * apply the appropriate inheritance rules to determine those methods inherite
d by or overridden | 6344 * apply the appropriate inheritance rules to determine those methods inherite
d by or overridden |
| 6346 * by [classElt]. Also report static warnings | 6345 * by [classElt]. Also report static warnings |
| 6347 * [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE] and | 6346 * [StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE] and |
| 6348 * [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD] if ap
propriate. | 6347 * [StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD] if ap
propriate. |
| 6349 * | 6348 * |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6675 } | 6674 } |
| 6676 for (int m = 0; m < namedParameters.length; m++, i++) { | 6675 for (int m = 0; m < namedParameters.length; m++, i++) { |
| 6677 ParameterElementImpl parameter = | 6676 ParameterElementImpl parameter = |
| 6678 new ParameterElementImpl(namedParameters[m], 0); | 6677 new ParameterElementImpl(namedParameters[m], 0); |
| 6679 parameter.type = dynamicType; | 6678 parameter.type = dynamicType; |
| 6680 parameter.parameterKind = ParameterKind.NAMED; | 6679 parameter.parameterKind = ParameterKind.NAMED; |
| 6681 parameters[i] = parameter; | 6680 parameters[i] = parameter; |
| 6682 } | 6681 } |
| 6683 executable.returnType = dynamicType; | 6682 executable.returnType = dynamicType; |
| 6684 executable.parameters = parameters; | 6683 executable.parameters = parameters; |
| 6685 FunctionTypeImpl methodType = new FunctionTypeImpl.con1(executable); | 6684 FunctionTypeImpl methodType = new FunctionTypeImpl(executable); |
| 6686 executable.type = methodType; | 6685 executable.type = methodType; |
| 6687 return executable; | 6686 return executable; |
| 6688 } | 6687 } |
| 6689 | 6688 |
| 6690 /** | 6689 /** |
| 6691 * Given some [ExecutableElement], return the list of named parameters. | 6690 * Given some [ExecutableElement], return the list of named parameters. |
| 6692 */ | 6691 */ |
| 6693 static List<String> _getNamedParameterNames( | 6692 static List<String> _getNamedParameterNames( |
| 6694 ExecutableElement executableElement) { | 6693 ExecutableElement executableElement) { |
| 6695 List<String> namedParameterNames = new List<String>(); | 6694 List<String> namedParameterNames = new List<String>(); |
| (...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7088 if (directive is ImportDirective && | 7087 if (directive is ImportDirective && |
| 7089 uriContent.startsWith(_DART_EXT_SCHEME)) { | 7088 uriContent.startsWith(_DART_EXT_SCHEME)) { |
| 7090 _libraryElement.hasExtUri = true; | 7089 _libraryElement.hasExtUri = true; |
| 7091 return null; | 7090 return null; |
| 7092 } | 7091 } |
| 7093 try { | 7092 try { |
| 7094 parseUriWithException(uriContent); | 7093 parseUriWithException(uriContent); |
| 7095 Source source = | 7094 Source source = |
| 7096 _analysisContext.sourceFactory.resolveUri(librarySource, uriContent); | 7095 _analysisContext.sourceFactory.resolveUri(librarySource, uriContent); |
| 7097 if (!_analysisContext.exists(source)) { | 7096 if (!_analysisContext.exists(source)) { |
| 7098 _errorListener.onError(new AnalysisError.con2(librarySource, | 7097 _errorListener.onError(new AnalysisError(librarySource, |
| 7099 uriLiteral.offset, uriLiteral.length, | 7098 uriLiteral.offset, uriLiteral.length, |
| 7100 CompileTimeErrorCode.URI_DOES_NOT_EXIST, [uriContent])); | 7099 CompileTimeErrorCode.URI_DOES_NOT_EXIST, [uriContent])); |
| 7101 } | 7100 } |
| 7102 return source; | 7101 return source; |
| 7103 } on URISyntaxException { | 7102 } on URISyntaxException { |
| 7104 _errorListener.onError(new AnalysisError.con2(librarySource, | 7103 _errorListener.onError(new AnalysisError(librarySource, uriLiteral.offset, |
| 7105 uriLiteral.offset, uriLiteral.length, | 7104 uriLiteral.length, CompileTimeErrorCode.INVALID_URI, [uriContent])); |
| 7106 CompileTimeErrorCode.INVALID_URI, [uriContent])); | |
| 7107 } | 7105 } |
| 7108 return null; | 7106 return null; |
| 7109 } | 7107 } |
| 7110 | 7108 |
| 7111 /** | 7109 /** |
| 7112 * Returns the URI value of the given directive. | 7110 * Returns the URI value of the given directive. |
| 7113 */ | 7111 */ |
| 7114 String getUri(UriBasedDirective directive) => _directiveUris[directive]; | 7112 String getUri(UriBasedDirective directive) => _directiveUris[directive]; |
| 7115 | 7113 |
| 7116 /** | 7114 /** |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7195 part.uriOffset = partUri.offset; | 7193 part.uriOffset = partUri.offset; |
| 7196 part.uriEnd = partUri.end; | 7194 part.uriEnd = partUri.end; |
| 7197 part.uri = partDirective.uriContent; | 7195 part.uri = partDirective.uriContent; |
| 7198 // | 7196 // |
| 7199 // Validate that the part contains a part-of directive with the same | 7197 // Validate that the part contains a part-of directive with the same |
| 7200 // name as the library. | 7198 // name as the library. |
| 7201 // | 7199 // |
| 7202 String partLibraryName = | 7200 String partLibraryName = |
| 7203 _getPartLibraryName(partSource, partUnit, directivesToResolve); | 7201 _getPartLibraryName(partSource, partUnit, directivesToResolve); |
| 7204 if (partLibraryName == null) { | 7202 if (partLibraryName == null) { |
| 7205 _errorListener.onError(new AnalysisError.con2(librarySource, | 7203 _errorListener.onError(new AnalysisError(librarySource, |
| 7206 partUri.offset, partUri.length, | 7204 partUri.offset, partUri.length, |
| 7207 CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()])); | 7205 CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()])); |
| 7208 } else if (libraryNameNode == null) { | 7206 } else if (libraryNameNode == null) { |
| 7209 // TODO(brianwilkerson) Collect the names declared by the part. | 7207 // TODO(brianwilkerson) Collect the names declared by the part. |
| 7210 // If they are all the same then we can use that name as the | 7208 // If they are all the same then we can use that name as the |
| 7211 // inferred name of the library and present it in a quick-fix. | 7209 // inferred name of the library and present it in a quick-fix. |
| 7212 // partLibraryNames.add(partLibraryName); | 7210 // partLibraryNames.add(partLibraryName); |
| 7213 } else if (libraryNameNode.name != partLibraryName) { | 7211 } else if (libraryNameNode.name != partLibraryName) { |
| 7214 _errorListener.onError(new AnalysisError.con2(librarySource, | 7212 _errorListener.onError(new AnalysisError(librarySource, |
| 7215 partUri.offset, partUri.length, | 7213 partUri.offset, partUri.length, |
| 7216 StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [ | 7214 StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [ |
| 7217 libraryNameNode.name, | 7215 libraryNameNode.name, |
| 7218 partLibraryName | 7216 partLibraryName |
| 7219 ])); | 7217 ])); |
| 7220 } | 7218 } |
| 7221 if (entryPoint == null) { | 7219 if (entryPoint == null) { |
| 7222 entryPoint = _findEntryPoint(part); | 7220 entryPoint = _findEntryPoint(part); |
| 7223 } | 7221 } |
| 7224 directive.element = part; | 7222 directive.element = part; |
| 7225 sourcedCompilationUnits.add(part); | 7223 sourcedCompilationUnits.add(part); |
| 7226 } | 7224 } |
| 7227 } | 7225 } |
| 7228 } | 7226 } |
| 7229 if (hasPartDirective && libraryNameNode == null) { | 7227 if (hasPartDirective && libraryNameNode == null) { |
| 7230 _errorListener.onError(new AnalysisError.con1(librarySource, | 7228 _errorListener.onError(new AnalysisError(librarySource, 0, 0, |
| 7231 ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART)); | 7229 ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART)); |
| 7232 } | 7230 } |
| 7233 // | 7231 // |
| 7234 // Create and populate the library element. | 7232 // Create and populate the library element. |
| 7235 // | 7233 // |
| 7236 LibraryElementImpl libraryElement = new LibraryElementImpl.forNode( | 7234 LibraryElementImpl libraryElement = new LibraryElementImpl.forNode( |
| 7237 _analysisContext.getContextFor(librarySource), libraryNameNode); | 7235 _analysisContext.getContextFor(librarySource), libraryNameNode); |
| 7238 libraryElement.definingCompilationUnit = definingCompilationUnitElement; | 7236 libraryElement.definingCompilationUnit = definingCompilationUnitElement; |
| 7239 if (entryPoint != null) { | 7237 if (entryPoint != null) { |
| 7240 libraryElement.entryPoint = entryPoint; | 7238 libraryElement.entryPoint = entryPoint; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7298 part.uriOffset = partUri.offset; | 7296 part.uriOffset = partUri.offset; |
| 7299 part.uriEnd = partUri.end; | 7297 part.uriEnd = partUri.end; |
| 7300 part.uri = partDirective.uriContent; | 7298 part.uri = partDirective.uriContent; |
| 7301 // | 7299 // |
| 7302 // Validate that the part contains a part-of directive with the same | 7300 // Validate that the part contains a part-of directive with the same |
| 7303 // name as the library. | 7301 // name as the library. |
| 7304 // | 7302 // |
| 7305 String partLibraryName = | 7303 String partLibraryName = |
| 7306 _getPartLibraryName(partSource, partUnit, directivesToResolve); | 7304 _getPartLibraryName(partSource, partUnit, directivesToResolve); |
| 7307 if (partLibraryName == null) { | 7305 if (partLibraryName == null) { |
| 7308 _errorListener.onError(new AnalysisError.con2(librarySource, | 7306 _errorListener.onError(new AnalysisError(librarySource, |
| 7309 partUri.offset, partUri.length, | 7307 partUri.offset, partUri.length, |
| 7310 CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()])); | 7308 CompileTimeErrorCode.PART_OF_NON_PART, [partUri.toSource()])); |
| 7311 } else if (libraryNameNode == null) { | 7309 } else if (libraryNameNode == null) { |
| 7312 // TODO(brianwilkerson) Collect the names declared by the part. | 7310 // TODO(brianwilkerson) Collect the names declared by the part. |
| 7313 // If they are all the same then we can use that name as the | 7311 // If they are all the same then we can use that name as the |
| 7314 // inferred name of the library and present it in a quick-fix. | 7312 // inferred name of the library and present it in a quick-fix. |
| 7315 // partLibraryNames.add(partLibraryName); | 7313 // partLibraryNames.add(partLibraryName); |
| 7316 } else if (libraryNameNode.name != partLibraryName) { | 7314 } else if (libraryNameNode.name != partLibraryName) { |
| 7317 _errorListener.onError(new AnalysisError.con2(librarySource, | 7315 _errorListener.onError(new AnalysisError(librarySource, |
| 7318 partUri.offset, partUri.length, | 7316 partUri.offset, partUri.length, |
| 7319 StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [ | 7317 StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, [ |
| 7320 libraryNameNode.name, | 7318 libraryNameNode.name, |
| 7321 partLibraryName | 7319 partLibraryName |
| 7322 ])); | 7320 ])); |
| 7323 } | 7321 } |
| 7324 if (entryPoint == null) { | 7322 if (entryPoint == null) { |
| 7325 entryPoint = _findEntryPoint(part); | 7323 entryPoint = _findEntryPoint(part); |
| 7326 } | 7324 } |
| 7327 directive.element = part; | 7325 directive.element = part; |
| 7328 sourcedCompilationUnits.add(part); | 7326 sourcedCompilationUnits.add(part); |
| 7329 } | 7327 } |
| 7330 } | 7328 } |
| 7331 } | 7329 } |
| 7332 } | 7330 } |
| 7333 if (hasPartDirective && libraryNameNode == null) { | 7331 if (hasPartDirective && libraryNameNode == null) { |
| 7334 _errorListener.onError(new AnalysisError.con1(librarySource, | 7332 _errorListener.onError(new AnalysisError(librarySource, 0, 0, |
| 7335 ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART)); | 7333 ResolverErrorCode.MISSING_LIBRARY_DIRECTIVE_WITH_PART)); |
| 7336 } | 7334 } |
| 7337 // | 7335 // |
| 7338 // Create and populate the library element. | 7336 // Create and populate the library element. |
| 7339 // | 7337 // |
| 7340 LibraryElementImpl libraryElement = new LibraryElementImpl.forNode( | 7338 LibraryElementImpl libraryElement = new LibraryElementImpl.forNode( |
| 7341 _analysisContext.getContextFor(librarySource), libraryNameNode); | 7339 _analysisContext.getContextFor(librarySource), libraryNameNode); |
| 7342 libraryElement.definingCompilationUnit = definingCompilationUnitElement; | 7340 libraryElement.definingCompilationUnit = definingCompilationUnitElement; |
| 7343 if (entryPoint != null) { | 7341 if (entryPoint != null) { |
| 7344 libraryElement.entryPoint = entryPoint; | 7342 libraryElement.entryPoint = entryPoint; |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7517 } | 7515 } |
| 7518 if (foundElement is MultiplyDefinedElementImpl) { | 7516 if (foundElement is MultiplyDefinedElementImpl) { |
| 7519 String foundEltName = foundElement.displayName; | 7517 String foundEltName = foundElement.displayName; |
| 7520 List<Element> conflictingMembers = foundElement.conflictingElements; | 7518 List<Element> conflictingMembers = foundElement.conflictingElements; |
| 7521 int count = conflictingMembers.length; | 7519 int count = conflictingMembers.length; |
| 7522 List<String> libraryNames = new List<String>(count); | 7520 List<String> libraryNames = new List<String>(count); |
| 7523 for (int i = 0; i < count; i++) { | 7521 for (int i = 0; i < count; i++) { |
| 7524 libraryNames[i] = _getLibraryName(conflictingMembers[i]); | 7522 libraryNames[i] = _getLibraryName(conflictingMembers[i]); |
| 7525 } | 7523 } |
| 7526 libraryNames.sort(); | 7524 libraryNames.sort(); |
| 7527 errorListener.onError(new AnalysisError.con2(getSource(identifier), | 7525 errorListener.onError(new AnalysisError(getSource(identifier), |
| 7528 identifier.offset, identifier.length, | 7526 identifier.offset, identifier.length, |
| 7529 StaticWarningCode.AMBIGUOUS_IMPORT, [ | 7527 StaticWarningCode.AMBIGUOUS_IMPORT, [ |
| 7530 foundEltName, | 7528 foundEltName, |
| 7531 StringUtilities.printListOfQuotedNames(libraryNames) | 7529 StringUtilities.printListOfQuotedNames(libraryNames) |
| 7532 ])); | 7530 ])); |
| 7533 return foundElement; | 7531 return foundElement; |
| 7534 } | 7532 } |
| 7535 if (foundElement != null) { | 7533 if (foundElement != null) { |
| 7536 defineNameWithoutChecking(name, foundElement); | 7534 defineNameWithoutChecking(name, foundElement); |
| 7537 } | 7535 } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7619 for (Element member in conflictingElements) { | 7617 for (Element member in conflictingElements) { |
| 7620 if (member.library.isInSdk) { | 7618 if (member.library.isInSdk) { |
| 7621 sdkElement = member; | 7619 sdkElement = member; |
| 7622 } else { | 7620 } else { |
| 7623 nonSdkElements.add(member); | 7621 nonSdkElements.add(member); |
| 7624 } | 7622 } |
| 7625 } | 7623 } |
| 7626 if (sdkElement != null && nonSdkElements.length > 0) { | 7624 if (sdkElement != null && nonSdkElements.length > 0) { |
| 7627 String sdkLibName = _getLibraryName(sdkElement); | 7625 String sdkLibName = _getLibraryName(sdkElement); |
| 7628 String otherLibName = _getLibraryName(nonSdkElements[0]); | 7626 String otherLibName = _getLibraryName(nonSdkElements[0]); |
| 7629 errorListener.onError(new AnalysisError.con2(getSource(identifier), | 7627 errorListener.onError(new AnalysisError(getSource(identifier), |
| 7630 identifier.offset, identifier.length, | 7628 identifier.offset, identifier.length, |
| 7631 StaticWarningCode.CONFLICTING_DART_IMPORT, [ | 7629 StaticWarningCode.CONFLICTING_DART_IMPORT, [ |
| 7632 name, | 7630 name, |
| 7633 sdkLibName, | 7631 sdkLibName, |
| 7634 otherLibName | 7632 otherLibName |
| 7635 ])); | 7633 ])); |
| 7636 } | 7634 } |
| 7637 if (nonSdkElements.length == conflictingElements.length) { | 7635 if (nonSdkElements.length == conflictingElements.length) { |
| 7638 // None of the members were removed | 7636 // None of the members were removed |
| 7639 return foundElement; | 7637 return foundElement; |
| (...skipping 442 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8082 importElement.prefix = prefix; | 8080 importElement.prefix = prefix; |
| 8083 prefixNode.staticElement = prefix; | 8081 prefixNode.staticElement = prefix; |
| 8084 } | 8082 } |
| 8085 directive.element = importElement; | 8083 directive.element = importElement; |
| 8086 imports.add(importElement); | 8084 imports.add(importElement); |
| 8087 if (analysisContext.computeKindOf(importedSource) != | 8085 if (analysisContext.computeKindOf(importedSource) != |
| 8088 SourceKind.LIBRARY) { | 8086 SourceKind.LIBRARY) { |
| 8089 ErrorCode errorCode = (importElement.isDeferred | 8087 ErrorCode errorCode = (importElement.isDeferred |
| 8090 ? StaticWarningCode.IMPORT_OF_NON_LIBRARY | 8088 ? StaticWarningCode.IMPORT_OF_NON_LIBRARY |
| 8091 : CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY); | 8089 : CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY); |
| 8092 _errorListener.onError(new AnalysisError.con2( | 8090 _errorListener.onError(new AnalysisError(library.librarySource, |
| 8093 library.librarySource, uriLiteral.offset, uriLiteral.length, | 8091 uriLiteral.offset, uriLiteral.length, errorCode, |
| 8094 errorCode, [uriLiteral.toSource()])); | 8092 [uriLiteral.toSource()])); |
| 8095 } | 8093 } |
| 8096 } | 8094 } |
| 8097 } | 8095 } |
| 8098 } else if (directive is ExportDirective) { | 8096 } else if (directive is ExportDirective) { |
| 8099 ExportDirective exportDirective = directive; | 8097 ExportDirective exportDirective = directive; |
| 8100 Source exportedSource = exportDirective.source; | 8098 Source exportedSource = exportDirective.source; |
| 8101 if (exportedSource != null) { | 8099 if (exportedSource != null) { |
| 8102 // The exported source will be null if the URI in the export | 8100 // The exported source will be null if the URI in the export |
| 8103 // directive was invalid. | 8101 // directive was invalid. |
| 8104 Library exportedLibrary = _libraryMap[exportedSource]; | 8102 Library exportedLibrary = _libraryMap[exportedSource]; |
| 8105 if (exportedLibrary != null) { | 8103 if (exportedLibrary != null) { |
| 8106 ExportElementImpl exportElement = | 8104 ExportElementImpl exportElement = |
| 8107 new ExportElementImpl(directive.offset); | 8105 new ExportElementImpl(directive.offset); |
| 8108 StringLiteral uriLiteral = exportDirective.uri; | 8106 StringLiteral uriLiteral = exportDirective.uri; |
| 8109 exportElement.uriOffset = uriLiteral.offset; | 8107 exportElement.uriOffset = uriLiteral.offset; |
| 8110 exportElement.uriEnd = uriLiteral.end; | 8108 exportElement.uriEnd = uriLiteral.end; |
| 8111 exportElement.uri = exportDirective.uriContent; | 8109 exportElement.uri = exportDirective.uriContent; |
| 8112 exportElement.combinators = _buildCombinators(exportDirective); | 8110 exportElement.combinators = _buildCombinators(exportDirective); |
| 8113 LibraryElement exportedLibraryElement = | 8111 LibraryElement exportedLibraryElement = |
| 8114 exportedLibrary.libraryElement; | 8112 exportedLibrary.libraryElement; |
| 8115 if (exportedLibraryElement != null) { | 8113 if (exportedLibraryElement != null) { |
| 8116 exportElement.exportedLibrary = exportedLibraryElement; | 8114 exportElement.exportedLibrary = exportedLibraryElement; |
| 8117 } | 8115 } |
| 8118 directive.element = exportElement; | 8116 directive.element = exportElement; |
| 8119 exports.add(exportElement); | 8117 exports.add(exportElement); |
| 8120 if (analysisContext.computeKindOf(exportedSource) != | 8118 if (analysisContext.computeKindOf(exportedSource) != |
| 8121 SourceKind.LIBRARY) { | 8119 SourceKind.LIBRARY) { |
| 8122 _errorListener.onError(new AnalysisError.con2( | 8120 _errorListener.onError(new AnalysisError(library.librarySource, |
| 8123 library.librarySource, uriLiteral.offset, uriLiteral.length, | 8121 uriLiteral.offset, uriLiteral.length, |
| 8124 CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, | 8122 CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, |
| 8125 [uriLiteral.toSource()])); | 8123 [uriLiteral.toSource()])); |
| 8126 } | 8124 } |
| 8127 } | 8125 } |
| 8128 } | 8126 } |
| 8129 } | 8127 } |
| 8130 } | 8128 } |
| 8131 Source librarySource = library.librarySource; | 8129 Source librarySource = library.librarySource; |
| 8132 if (!library.explicitlyImportsCore && | 8130 if (!library.explicitlyImportsCore && |
| 8133 _coreLibrarySource != librarySource) { | 8131 _coreLibrarySource != librarySource) { |
| (...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8770 importElement.prefix = prefix; | 8768 importElement.prefix = prefix; |
| 8771 prefixNode.staticElement = prefix; | 8769 prefixNode.staticElement = prefix; |
| 8772 } | 8770 } |
| 8773 directive.element = importElement; | 8771 directive.element = importElement; |
| 8774 imports.add(importElement); | 8772 imports.add(importElement); |
| 8775 if (analysisContext.computeKindOf(importedSource) != | 8773 if (analysisContext.computeKindOf(importedSource) != |
| 8776 SourceKind.LIBRARY) { | 8774 SourceKind.LIBRARY) { |
| 8777 ErrorCode errorCode = (importElement.isDeferred | 8775 ErrorCode errorCode = (importElement.isDeferred |
| 8778 ? StaticWarningCode.IMPORT_OF_NON_LIBRARY | 8776 ? StaticWarningCode.IMPORT_OF_NON_LIBRARY |
| 8779 : CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY); | 8777 : CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY); |
| 8780 _errorListener.onError(new AnalysisError.con2( | 8778 _errorListener.onError(new AnalysisError(library.librarySource, |
| 8781 library.librarySource, uriLiteral.offset, uriLiteral.length, | 8779 uriLiteral.offset, uriLiteral.length, errorCode, |
| 8782 errorCode, [uriLiteral.toSource()])); | 8780 [uriLiteral.toSource()])); |
| 8783 } | 8781 } |
| 8784 } | 8782 } |
| 8785 } | 8783 } |
| 8786 } else if (directive is ExportDirective) { | 8784 } else if (directive is ExportDirective) { |
| 8787 ExportDirective exportDirective = directive; | 8785 ExportDirective exportDirective = directive; |
| 8788 Source exportedSource = exportDirective.source; | 8786 Source exportedSource = exportDirective.source; |
| 8789 if (exportedSource != null && | 8787 if (exportedSource != null && |
| 8790 analysisContext.exists(exportedSource)) { | 8788 analysisContext.exists(exportedSource)) { |
| 8791 // The exported source will be null if the URI in the export | 8789 // The exported source will be null if the URI in the export |
| 8792 // directive was invalid. | 8790 // directive was invalid. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 8803 exportElement.combinators = _buildCombinators(exportDirective); | 8801 exportElement.combinators = _buildCombinators(exportDirective); |
| 8804 LibraryElement exportedLibraryElement = | 8802 LibraryElement exportedLibraryElement = |
| 8805 exportedLibrary.libraryElement; | 8803 exportedLibrary.libraryElement; |
| 8806 if (exportedLibraryElement != null) { | 8804 if (exportedLibraryElement != null) { |
| 8807 exportElement.exportedLibrary = exportedLibraryElement; | 8805 exportElement.exportedLibrary = exportedLibraryElement; |
| 8808 } | 8806 } |
| 8809 directive.element = exportElement; | 8807 directive.element = exportElement; |
| 8810 exports.add(exportElement); | 8808 exports.add(exportElement); |
| 8811 if (analysisContext.computeKindOf(exportedSource) != | 8809 if (analysisContext.computeKindOf(exportedSource) != |
| 8812 SourceKind.LIBRARY) { | 8810 SourceKind.LIBRARY) { |
| 8813 _errorListener.onError(new AnalysisError.con2( | 8811 _errorListener.onError(new AnalysisError(library.librarySource, |
| 8814 library.librarySource, uriLiteral.offset, uriLiteral.length, | 8812 uriLiteral.offset, uriLiteral.length, |
| 8815 CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, | 8813 CompileTimeErrorCode.EXPORT_OF_NON_LIBRARY, |
| 8816 [uriLiteral.toSource()])); | 8814 [uriLiteral.toSource()])); |
| 8817 } | 8815 } |
| 8818 } | 8816 } |
| 8819 } | 8817 } |
| 8820 } | 8818 } |
| 8821 } | 8819 } |
| 8822 Source librarySource = library.librarySource; | 8820 Source librarySource = library.librarySource; |
| 8823 if (!library.explicitlyImportsCore && | 8821 if (!library.explicitlyImportsCore && |
| 8824 _coreLibrarySource != librarySource) { | 8822 _coreLibrarySource != librarySource) { |
| (...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9129 if (existing is PrefixElement) { | 9127 if (existing is PrefixElement) { |
| 9130 // TODO(scheglov) consider providing actual 'nameOffset' from the | 9128 // TODO(scheglov) consider providing actual 'nameOffset' from the |
| 9131 // synthetic accessor | 9129 // synthetic accessor |
| 9132 int offset = duplicate.nameOffset; | 9130 int offset = duplicate.nameOffset; |
| 9133 if (duplicate is PropertyAccessorElement) { | 9131 if (duplicate is PropertyAccessorElement) { |
| 9134 PropertyAccessorElement accessor = duplicate; | 9132 PropertyAccessorElement accessor = duplicate; |
| 9135 if (accessor.isSynthetic) { | 9133 if (accessor.isSynthetic) { |
| 9136 offset = accessor.variable.nameOffset; | 9134 offset = accessor.variable.nameOffset; |
| 9137 } | 9135 } |
| 9138 } | 9136 } |
| 9139 return new AnalysisError.con2(duplicate.source, offset, | 9137 return new AnalysisError(duplicate.source, offset, |
| 9140 duplicate.displayName.length, | 9138 duplicate.displayName.length, |
| 9141 CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER, | 9139 CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER, |
| 9142 [existing.displayName]); | 9140 [existing.displayName]); |
| 9143 } | 9141 } |
| 9144 return super.getErrorForDuplicate(existing, duplicate); | 9142 return super.getErrorForDuplicate(existing, duplicate); |
| 9145 } | 9143 } |
| 9146 | 9144 |
| 9147 /** | 9145 /** |
| 9148 * Add to this scope all of the public top-level names that are defined in the
given compilation | 9146 * Add to this scope all of the public top-level names that are defined in the
given compilation |
| 9149 * unit. | 9147 * unit. |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9181 define(prefix); | 9179 define(prefix); |
| 9182 } | 9180 } |
| 9183 _defineLocalNames(definingLibrary.definingCompilationUnit); | 9181 _defineLocalNames(definingLibrary.definingCompilationUnit); |
| 9184 for (CompilationUnitElement compilationUnit in definingLibrary.parts) { | 9182 for (CompilationUnitElement compilationUnit in definingLibrary.parts) { |
| 9185 _defineLocalNames(compilationUnit); | 9183 _defineLocalNames(compilationUnit); |
| 9186 } | 9184 } |
| 9187 } | 9185 } |
| 9188 } | 9186 } |
| 9189 | 9187 |
| 9190 /** | 9188 /** |
| 9191 * This class is used to replace uses of `HashMap<String, ExecutableElement>` wh
ich are not as | 9189 * This class is used to replace uses of `HashMap<String, ExecutableElement>` |
| 9192 * performant as this class. | 9190 * which are not as performant as this class. |
| 9193 */ | 9191 */ |
| 9194 class MemberMap { | 9192 class MemberMap { |
| 9195 /** | 9193 /** |
| 9196 * The current size of this map. | 9194 * The current size of this map. |
| 9197 */ | 9195 */ |
| 9198 int _size = 0; | 9196 int _size = 0; |
| 9199 | 9197 |
| 9200 /** | 9198 /** |
| 9201 * The array of keys. | 9199 * The array of keys. |
| 9202 */ | 9200 */ |
| 9203 List<String> _keys; | 9201 List<String> _keys; |
| 9204 | 9202 |
| 9205 /** | 9203 /** |
| 9206 * The array of ExecutableElement values. | 9204 * The array of ExecutableElement values. |
| 9207 */ | 9205 */ |
| 9208 List<ExecutableElement> _values; | 9206 List<ExecutableElement> _values; |
| 9209 | 9207 |
| 9210 /** | 9208 /** |
| 9211 * Default constructor. | 9209 * Initialize a newly created member map to have the given [initialCapacity]. |
| 9210 * The map will grow if needed. |
| 9212 */ | 9211 */ |
| 9213 MemberMap() : this.con1(10); | 9212 MemberMap([int initialCapacity = 10]) { |
| 9213 _initArrays(initialCapacity); |
| 9214 } |
| 9214 | 9215 |
| 9215 /** | 9216 /** |
| 9216 * This constructor takes an initial capacity of the map. | 9217 * This constructor takes an initial capacity of the map. |
| 9217 * | 9218 * |
| 9218 * @param initialCapacity the initial capacity | 9219 * @param initialCapacity the initial capacity |
| 9219 */ | 9220 */ |
| 9221 @deprecated // Use new MemberMap(initialCapacity) |
| 9220 MemberMap.con1(int initialCapacity) { | 9222 MemberMap.con1(int initialCapacity) { |
| 9221 _initArrays(initialCapacity); | 9223 _initArrays(initialCapacity); |
| 9222 } | 9224 } |
| 9223 | 9225 |
| 9224 /** | 9226 /** |
| 9225 * Copy constructor. | 9227 * Copy constructor. |
| 9226 */ | 9228 */ |
| 9229 @deprecated // Use new MemberMap.from(memberMap) |
| 9227 MemberMap.con2(MemberMap memberMap) { | 9230 MemberMap.con2(MemberMap memberMap) { |
| 9228 _initArrays(memberMap._size + 5); | 9231 _initArrays(memberMap._size + 5); |
| 9229 for (int i = 0; i < memberMap._size; i++) { | 9232 for (int i = 0; i < memberMap._size; i++) { |
| 9230 _keys[i] = memberMap._keys[i]; | 9233 _keys[i] = memberMap._keys[i]; |
| 9231 _values[i] = memberMap._values[i]; | 9234 _values[i] = memberMap._values[i]; |
| 9232 } | 9235 } |
| 9233 _size = memberMap._size; | 9236 _size = memberMap._size; |
| 9234 } | 9237 } |
| 9235 | 9238 |
| 9236 /** | 9239 /** |
| 9240 * Initialize a newly created member map to contain the same members as the |
| 9241 * given [memberMap]. |
| 9242 */ |
| 9243 MemberMap.from(MemberMap memberMap) { |
| 9244 _initArrays(memberMap._size + 5); |
| 9245 for (int i = 0; i < memberMap._size; i++) { |
| 9246 _keys[i] = memberMap._keys[i]; |
| 9247 _values[i] = memberMap._values[i]; |
| 9248 } |
| 9249 _size = memberMap._size; |
| 9250 } |
| 9251 |
| 9252 /** |
| 9237 * The size of the map. | 9253 * The size of the map. |
| 9238 * | 9254 * |
| 9239 * @return the size of the map. | 9255 * @return the size of the map. |
| 9240 */ | 9256 */ |
| 9241 int get size => _size; | 9257 int get size => _size; |
| 9242 | 9258 |
| 9243 /** | 9259 /** |
| 9244 * Given some key, return the ExecutableElement value from the map, if the key
does not exist in | 9260 * Given some key, return the ExecutableElement value from the map, if the key
does not exist in |
| 9245 * the map, `null` is returned. | 9261 * the map, `null` is returned. |
| 9246 * | 9262 * |
| (...skipping 2599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11846 * @param existing the first element to be declared with the conflicting name | 11862 * @param existing the first element to be declared with the conflicting name |
| 11847 * @param duplicate another element declared with the conflicting name | 11863 * @param duplicate another element declared with the conflicting name |
| 11848 * @return the error code used to report duplicate names within a scope | 11864 * @return the error code used to report duplicate names within a scope |
| 11849 */ | 11865 */ |
| 11850 AnalysisError getErrorForDuplicate(Element existing, Element duplicate) { | 11866 AnalysisError getErrorForDuplicate(Element existing, Element duplicate) { |
| 11851 // TODO(brianwilkerson) Customize the error message based on the types of | 11867 // TODO(brianwilkerson) Customize the error message based on the types of |
| 11852 // elements that share the same name. | 11868 // elements that share the same name. |
| 11853 // TODO(jwren) There are 4 error codes for duplicate, but only 1 is being | 11869 // TODO(jwren) There are 4 error codes for duplicate, but only 1 is being |
| 11854 // generated. | 11870 // generated. |
| 11855 Source source = duplicate.source; | 11871 Source source = duplicate.source; |
| 11856 return new AnalysisError.con2(source, duplicate.nameOffset, | 11872 return new AnalysisError(source, duplicate.nameOffset, |
| 11857 duplicate.displayName.length, CompileTimeErrorCode.DUPLICATE_DEFINITION, | 11873 duplicate.displayName.length, CompileTimeErrorCode.DUPLICATE_DEFINITION, |
| 11858 [existing.displayName]); | 11874 [existing.displayName]); |
| 11859 } | 11875 } |
| 11860 | 11876 |
| 11861 /** | 11877 /** |
| 11862 * Return the source that contains the given identifier, or the source associa
ted with this scope | 11878 * Return the source that contains the given identifier, or the source associa
ted with this scope |
| 11863 * if the source containing the identifier could not be determined. | 11879 * if the source containing the identifier could not be determined. |
| 11864 * | 11880 * |
| 11865 * @param identifier the identifier whose source is to be returned | 11881 * @param identifier the identifier whose source is to be returned |
| 11866 * @return the source that contains the given identifier | 11882 * @return the source that contains the given identifier |
| (...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12092 | 12108 |
| 12093 /** | 12109 /** |
| 12094 * Report an error with the given error code and arguments. | 12110 * Report an error with the given error code and arguments. |
| 12095 * | 12111 * |
| 12096 * @param errorCode the error code of the error to be reported | 12112 * @param errorCode the error code of the error to be reported |
| 12097 * @param node the node specifying the location of the error | 12113 * @param node the node specifying the location of the error |
| 12098 * @param arguments the arguments to the error, used to compose the error mess
age | 12114 * @param arguments the arguments to the error, used to compose the error mess
age |
| 12099 */ | 12115 */ |
| 12100 void reportErrorForNode(ErrorCode errorCode, AstNode node, | 12116 void reportErrorForNode(ErrorCode errorCode, AstNode node, |
| 12101 [List<Object> arguments]) { | 12117 [List<Object> arguments]) { |
| 12102 _errorListener.onError(new AnalysisError.con2( | 12118 _errorListener.onError(new AnalysisError( |
| 12103 source, node.offset, node.length, errorCode, arguments)); | 12119 source, node.offset, node.length, errorCode, arguments)); |
| 12104 } | 12120 } |
| 12105 | 12121 |
| 12106 /** | 12122 /** |
| 12107 * Report an error with the given error code and arguments. | 12123 * Report an error with the given error code and arguments. |
| 12108 * | 12124 * |
| 12109 * @param errorCode the error code of the error to be reported | 12125 * @param errorCode the error code of the error to be reported |
| 12110 * @param offset the offset of the location of the error | 12126 * @param offset the offset of the location of the error |
| 12111 * @param length the length of the location of the error | 12127 * @param length the length of the location of the error |
| 12112 * @param arguments the arguments to the error, used to compose the error mess
age | 12128 * @param arguments the arguments to the error, used to compose the error mess
age |
| 12113 */ | 12129 */ |
| 12114 void reportErrorForOffset(ErrorCode errorCode, int offset, int length, | 12130 void reportErrorForOffset(ErrorCode errorCode, int offset, int length, |
| 12115 [List<Object> arguments]) { | 12131 [List<Object> arguments]) { |
| 12116 _errorListener.onError( | 12132 _errorListener.onError( |
| 12117 new AnalysisError.con2(source, offset, length, errorCode, arguments)); | 12133 new AnalysisError(source, offset, length, errorCode, arguments)); |
| 12118 } | 12134 } |
| 12119 | 12135 |
| 12120 /** | 12136 /** |
| 12121 * Report an error with the given error code and arguments. | 12137 * Report an error with the given error code and arguments. |
| 12122 * | 12138 * |
| 12123 * @param errorCode the error code of the error to be reported | 12139 * @param errorCode the error code of the error to be reported |
| 12124 * @param token the token specifying the location of the error | 12140 * @param token the token specifying the location of the error |
| 12125 * @param arguments the arguments to the error, used to compose the error mess
age | 12141 * @param arguments the arguments to the error, used to compose the error mess
age |
| 12126 */ | 12142 */ |
| 12127 void reportErrorForToken(ErrorCode errorCode, sc.Token token, | 12143 void reportErrorForToken(ErrorCode errorCode, sc.Token token, |
| 12128 [List<Object> arguments]) { | 12144 [List<Object> arguments]) { |
| 12129 _errorListener.onError(new AnalysisError.con2( | 12145 _errorListener.onError(new AnalysisError( |
| 12130 source, token.offset, token.length, errorCode, arguments)); | 12146 source, token.offset, token.length, errorCode, arguments)); |
| 12131 } | 12147 } |
| 12132 | 12148 |
| 12133 /** | 12149 /** |
| 12134 * Visit the given AST node if it is not null. | 12150 * Visit the given AST node if it is not null. |
| 12135 * | 12151 * |
| 12136 * @param node the node to be visited | 12152 * @param node the node to be visited |
| 12137 */ | 12153 */ |
| 12138 void safelyVisit(AstNode node) { | 12154 void safelyVisit(AstNode node) { |
| 12139 if (node != null) { | 12155 if (node != null) { |
| (...skipping 1773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13913 buffer.write(classNode.name.name); | 13929 buffer.write(classNode.name.name); |
| 13914 } | 13930 } |
| 13915 buffer.write(" in "); | 13931 buffer.write(" in "); |
| 13916 buffer.write(source.fullName); | 13932 buffer.write(source.fullName); |
| 13917 buffer.write(" was not set while trying to resolve types."); | 13933 buffer.write(" was not set while trying to resolve types."); |
| 13918 AnalysisEngine.instance.logger.logError(buffer.toString(), | 13934 AnalysisEngine.instance.logger.logError(buffer.toString(), |
| 13919 new CaughtException(new AnalysisException(), null)); | 13935 new CaughtException(new AnalysisException(), null)); |
| 13920 } else { | 13936 } else { |
| 13921 ClassElement definingClass = element.enclosingElement as ClassElement; | 13937 ClassElement definingClass = element.enclosingElement as ClassElement; |
| 13922 element.returnType = definingClass.type; | 13938 element.returnType = definingClass.type; |
| 13923 FunctionTypeImpl type = new FunctionTypeImpl.con1(element); | 13939 FunctionTypeImpl type = new FunctionTypeImpl(element); |
| 13924 type.typeArguments = definingClass.type.typeArguments; | 13940 type.typeArguments = definingClass.type.typeArguments; |
| 13925 element.type = type; | 13941 element.type = type; |
| 13926 } | 13942 } |
| 13927 return null; | 13943 return null; |
| 13928 } | 13944 } |
| 13929 | 13945 |
| 13930 @override | 13946 @override |
| 13931 Object visitDeclaredIdentifier(DeclaredIdentifier node) { | 13947 Object visitDeclaredIdentifier(DeclaredIdentifier node) { |
| 13932 super.visitDeclaredIdentifier(node); | 13948 super.visitDeclaredIdentifier(node); |
| 13933 DartType declaredType; | 13949 DartType declaredType; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 13982 StringBuffer buffer = new StringBuffer(); | 13998 StringBuffer buffer = new StringBuffer(); |
| 13983 buffer.write("The element for the top-level function "); | 13999 buffer.write("The element for the top-level function "); |
| 13984 buffer.write(node.name); | 14000 buffer.write(node.name); |
| 13985 buffer.write(" in "); | 14001 buffer.write(" in "); |
| 13986 buffer.write(source.fullName); | 14002 buffer.write(source.fullName); |
| 13987 buffer.write(" was not set while trying to resolve types."); | 14003 buffer.write(" was not set while trying to resolve types."); |
| 13988 AnalysisEngine.instance.logger.logError(buffer.toString(), | 14004 AnalysisEngine.instance.logger.logError(buffer.toString(), |
| 13989 new CaughtException(new AnalysisException(), null)); | 14005 new CaughtException(new AnalysisException(), null)); |
| 13990 } | 14006 } |
| 13991 element.returnType = _computeReturnType(node.returnType); | 14007 element.returnType = _computeReturnType(node.returnType); |
| 13992 FunctionTypeImpl type = new FunctionTypeImpl.con1(element); | 14008 FunctionTypeImpl type = new FunctionTypeImpl(element); |
| 13993 ClassElement definingClass = | 14009 ClassElement definingClass = |
| 13994 element.getAncestor((element) => element is ClassElement); | 14010 element.getAncestor((element) => element is ClassElement); |
| 13995 if (definingClass != null) { | 14011 if (definingClass != null) { |
| 13996 type.typeArguments = definingClass.type.typeArguments; | 14012 type.typeArguments = definingClass.type.typeArguments; |
| 13997 } | 14013 } |
| 13998 element.type = type; | 14014 element.type = type; |
| 13999 return null; | 14015 return null; |
| 14000 } | 14016 } |
| 14001 | 14017 |
| 14002 @override | 14018 @override |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14039 } else { | 14055 } else { |
| 14040 buffer.write(classNode.name.name); | 14056 buffer.write(classNode.name.name); |
| 14041 } | 14057 } |
| 14042 buffer.write(" in "); | 14058 buffer.write(" in "); |
| 14043 buffer.write(source.fullName); | 14059 buffer.write(source.fullName); |
| 14044 buffer.write(" was not set while trying to resolve types."); | 14060 buffer.write(" was not set while trying to resolve types."); |
| 14045 AnalysisEngine.instance.logger.logError(buffer.toString(), | 14061 AnalysisEngine.instance.logger.logError(buffer.toString(), |
| 14046 new CaughtException(new AnalysisException(), null)); | 14062 new CaughtException(new AnalysisException(), null)); |
| 14047 } | 14063 } |
| 14048 element.returnType = _computeReturnType(node.returnType); | 14064 element.returnType = _computeReturnType(node.returnType); |
| 14049 FunctionTypeImpl type = new FunctionTypeImpl.con1(element); | 14065 FunctionTypeImpl type = new FunctionTypeImpl(element); |
| 14050 ClassElement definingClass = | 14066 ClassElement definingClass = |
| 14051 element.getAncestor((element) => element is ClassElement); | 14067 element.getAncestor((element) => element is ClassElement); |
| 14052 if (definingClass != null) { | 14068 if (definingClass != null) { |
| 14053 type.typeArguments = definingClass.type.typeArguments; | 14069 type.typeArguments = definingClass.type.typeArguments; |
| 14054 } | 14070 } |
| 14055 element.type = type; | 14071 element.type = type; |
| 14056 if (element is PropertyAccessorElement) { | 14072 if (element is PropertyAccessorElement) { |
| 14057 PropertyAccessorElement accessor = element as PropertyAccessorElement; | 14073 PropertyAccessorElement accessor = element as PropertyAccessorElement; |
| 14058 PropertyInducingElementImpl variable = | 14074 PropertyInducingElementImpl variable = |
| 14059 accessor.variable as PropertyInducingElementImpl; | 14075 accessor.variable as PropertyInducingElementImpl; |
| (...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14395 declaredType = _getType(typeName); | 14411 declaredType = _getType(typeName); |
| 14396 } | 14412 } |
| 14397 Element element = node.name.staticElement; | 14413 Element element = node.name.staticElement; |
| 14398 if (element is VariableElement) { | 14414 if (element is VariableElement) { |
| 14399 (element as VariableElementImpl).type = declaredType; | 14415 (element as VariableElementImpl).type = declaredType; |
| 14400 if (element is PropertyInducingElement) { | 14416 if (element is PropertyInducingElement) { |
| 14401 PropertyInducingElement variableElement = element; | 14417 PropertyInducingElement variableElement = element; |
| 14402 PropertyAccessorElementImpl getter = | 14418 PropertyAccessorElementImpl getter = |
| 14403 variableElement.getter as PropertyAccessorElementImpl; | 14419 variableElement.getter as PropertyAccessorElementImpl; |
| 14404 getter.returnType = declaredType; | 14420 getter.returnType = declaredType; |
| 14405 FunctionTypeImpl getterType = new FunctionTypeImpl.con1(getter); | 14421 FunctionTypeImpl getterType = new FunctionTypeImpl(getter); |
| 14406 ClassElement definingClass = | 14422 ClassElement definingClass = |
| 14407 element.getAncestor((element) => element is ClassElement); | 14423 element.getAncestor((element) => element is ClassElement); |
| 14408 if (definingClass != null) { | 14424 if (definingClass != null) { |
| 14409 getterType.typeArguments = definingClass.type.typeArguments; | 14425 getterType.typeArguments = definingClass.type.typeArguments; |
| 14410 } | 14426 } |
| 14411 getter.type = getterType; | 14427 getter.type = getterType; |
| 14412 PropertyAccessorElementImpl setter = | 14428 PropertyAccessorElementImpl setter = |
| 14413 variableElement.setter as PropertyAccessorElementImpl; | 14429 variableElement.setter as PropertyAccessorElementImpl; |
| 14414 if (setter != null) { | 14430 if (setter != null) { |
| 14415 List<ParameterElement> parameters = setter.parameters; | 14431 List<ParameterElement> parameters = setter.parameters; |
| 14416 if (parameters.length > 0) { | 14432 if (parameters.length > 0) { |
| 14417 (parameters[0] as ParameterElementImpl).type = declaredType; | 14433 (parameters[0] as ParameterElementImpl).type = declaredType; |
| 14418 } | 14434 } |
| 14419 setter.returnType = VoidTypeImpl.instance; | 14435 setter.returnType = VoidTypeImpl.instance; |
| 14420 FunctionTypeImpl setterType = new FunctionTypeImpl.con1(setter); | 14436 FunctionTypeImpl setterType = new FunctionTypeImpl(setter); |
| 14421 if (definingClass != null) { | 14437 if (definingClass != null) { |
| 14422 setterType.typeArguments = definingClass.type.typeArguments; | 14438 setterType.typeArguments = definingClass.type.typeArguments; |
| 14423 } | 14439 } |
| 14424 setter.type = setterType; | 14440 setter.type = setterType; |
| 14425 } | 14441 } |
| 14426 } | 14442 } |
| 14427 } else { | 14443 } else { |
| 14428 // TODO(brianwilkerson) Report the internal error. | 14444 // TODO(brianwilkerson) Report the internal error. |
| 14429 } | 14445 } |
| 14430 return null; | 14446 return null; |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14831 new FunctionTypeAliasElementImpl.forNode(null); | 14847 new FunctionTypeAliasElementImpl.forNode(null); |
| 14832 aliasElement.synthetic = true; | 14848 aliasElement.synthetic = true; |
| 14833 aliasElement.shareParameters(parameters); | 14849 aliasElement.shareParameters(parameters); |
| 14834 aliasElement.returnType = _computeReturnType(returnType); | 14850 aliasElement.returnType = _computeReturnType(returnType); |
| 14835 // FunctionTypeAliasElementImpl assumes the enclosing element is a | 14851 // FunctionTypeAliasElementImpl assumes the enclosing element is a |
| 14836 // CompilationUnitElement (because non-synthetic function types can only be | 14852 // CompilationUnitElement (because non-synthetic function types can only be |
| 14837 // declared at top level), so to avoid breaking things, go find the | 14853 // declared at top level), so to avoid breaking things, go find the |
| 14838 // compilation unit element. | 14854 // compilation unit element. |
| 14839 aliasElement.enclosingElement = | 14855 aliasElement.enclosingElement = |
| 14840 element.getAncestor((element) => element is CompilationUnitElement); | 14856 element.getAncestor((element) => element is CompilationUnitElement); |
| 14841 FunctionTypeImpl type = new FunctionTypeImpl.con2(aliasElement); | 14857 FunctionTypeImpl type = new FunctionTypeImpl.forTypedef(aliasElement); |
| 14842 ClassElement definingClass = | 14858 ClassElement definingClass = |
| 14843 element.getAncestor((element) => element is ClassElement); | 14859 element.getAncestor((element) => element is ClassElement); |
| 14844 if (definingClass != null) { | 14860 if (definingClass != null) { |
| 14845 aliasElement.shareTypeParameters(definingClass.typeParameters); | 14861 aliasElement.shareTypeParameters(definingClass.typeParameters); |
| 14846 type.typeArguments = definingClass.type.typeArguments; | 14862 type.typeArguments = definingClass.type.typeArguments; |
| 14847 } else { | 14863 } else { |
| 14848 FunctionTypeAliasElement alias = | 14864 FunctionTypeAliasElement alias = |
| 14849 element.getAncestor((element) => element is FunctionTypeAliasElement); | 14865 element.getAncestor((element) => element is FunctionTypeAliasElement); |
| 14850 while (alias != null && alias.isSynthetic) { | 14866 while (alias != null && alias.isSynthetic) { |
| 14851 alias = | 14867 alias = |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15035 } | 15051 } |
| 15036 if (_usedElements.members.contains(element.displayName)) { | 15052 if (_usedElements.members.contains(element.displayName)) { |
| 15037 return true; | 15053 return true; |
| 15038 } | 15054 } |
| 15039 return _usedElements.elements.contains(element); | 15055 return _usedElements.elements.contains(element); |
| 15040 } | 15056 } |
| 15041 | 15057 |
| 15042 void _reportErrorForElement( | 15058 void _reportErrorForElement( |
| 15043 ErrorCode errorCode, Element element, List<Object> arguments) { | 15059 ErrorCode errorCode, Element element, List<Object> arguments) { |
| 15044 if (element != null) { | 15060 if (element != null) { |
| 15045 _errorListener.onError(new AnalysisError.con2(element.source, | 15061 _errorListener.onError(new AnalysisError(element.source, |
| 15046 element.nameOffset, element.displayName.length, errorCode, | 15062 element.nameOffset, element.displayName.length, errorCode, |
| 15047 arguments)); | 15063 arguments)); |
| 15048 } | 15064 } |
| 15049 } | 15065 } |
| 15050 } | 15066 } |
| 15051 | 15067 |
| 15052 /** | 15068 /** |
| 15053 * A container with information about used imports prefixes and used imported | 15069 * A container with information about used imports prefixes and used imported |
| 15054 * elements. | 15070 * elements. |
| 15055 */ | 15071 */ |
| (...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15451 nonFields.add(node); | 15467 nonFields.add(node); |
| 15452 return null; | 15468 return null; |
| 15453 } | 15469 } |
| 15454 | 15470 |
| 15455 @override | 15471 @override |
| 15456 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); | 15472 Object visitNode(AstNode node) => node.accept(TypeResolverVisitor_this); |
| 15457 | 15473 |
| 15458 @override | 15474 @override |
| 15459 Object visitWithClause(WithClause node) => null; | 15475 Object visitWithClause(WithClause node) => null; |
| 15460 } | 15476 } |
| OLD | NEW |