OLD | NEW |
---|---|
1 // This code was auto-generated, is not intended to be edited, and is subject to | 1 // This code was auto-generated, is not intended to be edited, and is subject to |
2 // significant change. Please see the README file for more information. | 2 // significant change. Please see the README file for more information. |
3 | 3 |
4 library engine.resolver; | 4 library engine.resolver; |
5 | 5 |
6 import 'dart:collection'; | 6 import 'dart:collection'; |
7 import 'java_core.dart'; | 7 import 'java_core.dart'; |
8 import 'java_engine.dart'; | 8 import 'java_engine.dart'; |
9 import 'instrumentation.dart'; | 9 import 'instrumentation.dart'; |
10 import 'source.dart'; | 10 import 'source.dart'; |
(...skipping 995 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1006 _enclosingExecutable = outerExecutable; | 1006 _enclosingExecutable = outerExecutable; |
1007 } | 1007 } |
1008 } | 1008 } |
1009 Object visitDeclaredIdentifier(DeclaredIdentifier node) { | 1009 Object visitDeclaredIdentifier(DeclaredIdentifier node) { |
1010 SimpleIdentifier variableName = node.identifier; | 1010 SimpleIdentifier variableName = node.identifier; |
1011 find3(_enclosingExecutable.localVariables, variableName); | 1011 find3(_enclosingExecutable.localVariables, variableName); |
1012 return super.visitDeclaredIdentifier(node); | 1012 return super.visitDeclaredIdentifier(node); |
1013 } | 1013 } |
1014 Object visitDefaultFormalParameter(DefaultFormalParameter node) { | 1014 Object visitDefaultFormalParameter(DefaultFormalParameter node) { |
1015 SimpleIdentifier parameterName = node.parameter.identifier; | 1015 SimpleIdentifier parameterName = node.parameter.identifier; |
1016 ParameterElement element = find3(_enclosingExecutable.parameters, parameterN ame); | 1016 ParameterElement element = null; |
1017 if (_enclosingExecutable != null) { | |
1018 element = find3(_enclosingExecutable.parameters, parameterName); | |
1019 } else { | |
1020 PrintStringWriter writer = new PrintStringWriter(); | |
1021 writer.println("Invalid state found in the Analysis Engine:"); | |
1022 writer.println("DeclarationResolver.visitDefaultFormalParameter() is visit ing a parameter that does not appear to be in a method or function."); | |
1023 writer.println("Ancestors:"); | |
1024 ASTNode parent14 = node.parent; | |
1025 while (parent14 != null) { | |
1026 writer.println(parent14.runtimeType.toString()); | |
1027 writer.println("---------"); | |
1028 parent14 = parent14.parent; | |
1029 } | |
1030 print(new AnalysisException()); | |
Brian Wilkerson
2013/04/17 18:59:42
Didn't this need to be "writer.print(...)"?
| |
1031 AnalysisEngine.instance.logger.logError(writer.toString()); | |
1032 } | |
1017 Expression defaultValue2 = node.defaultValue; | 1033 Expression defaultValue2 = node.defaultValue; |
1018 if (defaultValue2 != null) { | 1034 if (defaultValue2 != null) { |
1019 ExecutableElement outerExecutable = _enclosingExecutable; | 1035 ExecutableElement outerExecutable = _enclosingExecutable; |
1020 try { | 1036 try { |
1021 if (element == null) { | 1037 if (element == null) { |
1022 } else { | 1038 } else { |
1023 _enclosingExecutable = element.initializer; | 1039 _enclosingExecutable = element.initializer; |
1024 } | 1040 } |
1025 defaultValue2.accept(this); | 1041 defaultValue2.accept(this); |
1026 } finally { | 1042 } finally { |
(...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1493 if (fieldElement != null && !fieldElement.isSynthetic()) { | 1509 if (fieldElement != null && !fieldElement.isSynthetic()) { |
1494 recordResolution(fieldName2, fieldElement); | 1510 recordResolution(fieldName2, fieldElement); |
1495 } | 1511 } |
1496 return null; | 1512 return null; |
1497 } | 1513 } |
1498 Object visitConstructorName(ConstructorName node) { | 1514 Object visitConstructorName(ConstructorName node) { |
1499 Type2 type14 = node.type.type; | 1515 Type2 type14 = node.type.type; |
1500 if (type14 is DynamicTypeImpl) { | 1516 if (type14 is DynamicTypeImpl) { |
1501 return null; | 1517 return null; |
1502 } else if (type14 is! InterfaceType) { | 1518 } else if (type14 is! InterfaceType) { |
1503 ASTNode parent14 = node.parent; | 1519 ASTNode parent15 = node.parent; |
Brian Wilkerson
2013/04/17 18:59:42
Enhancement request: It would be nice if we could
| |
1504 if (parent14 is InstanceCreationExpression) { | 1520 if (parent15 is InstanceCreationExpression) { |
1505 if (((parent14 as InstanceCreationExpression)).isConst()) { | 1521 if (((parent15 as InstanceCreationExpression)).isConst()) { |
1506 } else { | 1522 } else { |
1507 } | 1523 } |
1508 } else { | 1524 } else { |
1509 } | 1525 } |
1510 return null; | 1526 return null; |
1511 } | 1527 } |
1512 ClassElement classElement = ((type14 as InterfaceType)).element; | 1528 ClassElement classElement = ((type14 as InterfaceType)).element; |
1513 ConstructorElement constructor; | 1529 ConstructorElement constructor; |
1514 SimpleIdentifier name17 = node.name; | 1530 SimpleIdentifier name17 = node.name; |
1515 if (name17 == null) { | 1531 if (name17 == null) { |
(...skipping 2155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3671 } | 3687 } |
3672 } | 3688 } |
3673 return overrides; | 3689 return overrides; |
3674 } | 3690 } |
3675 /** | 3691 /** |
3676 * Return {@code true} if the given expression terminates abruptly (that is, i f any expression | 3692 * Return {@code true} if the given expression terminates abruptly (that is, i f any expression |
3677 * following the given expression will not be reached). | 3693 * following the given expression will not be reached). |
3678 * @param expression the expression being tested | 3694 * @param expression the expression being tested |
3679 * @return {@code true} if the given expression terminates abruptly | 3695 * @return {@code true} if the given expression terminates abruptly |
3680 */ | 3696 */ |
3681 bool isAbruptTermination(Expression expression18) { | 3697 bool isAbruptTermination(Expression expression19) { |
3682 while (expression18 is ParenthesizedExpression) { | 3698 while (expression19 is ParenthesizedExpression) { |
3683 expression18 = ((expression18 as ParenthesizedExpression)).expression; | 3699 expression19 = ((expression19 as ParenthesizedExpression)).expression; |
3684 } | 3700 } |
3685 return expression18 is ThrowExpression || expression18 is RethrowExpression; | 3701 return expression19 is ThrowExpression || expression19 is RethrowExpression; |
3686 } | 3702 } |
3687 /** | 3703 /** |
3688 * Return {@code true} if the given statement terminates abruptly (that is, if any statement | 3704 * Return {@code true} if the given statement terminates abruptly (that is, if any statement |
3689 * following the given statement will not be reached). | 3705 * following the given statement will not be reached). |
3690 * @param statement the statement being tested | 3706 * @param statement the statement being tested |
3691 * @return {@code true} if the given statement terminates abruptly | 3707 * @return {@code true} if the given statement terminates abruptly |
3692 */ | 3708 */ |
3693 bool isAbruptTermination2(Statement statement) { | 3709 bool isAbruptTermination2(Statement statement) { |
3694 if (statement is ReturnStatement) { | 3710 if (statement is ReturnStatement) { |
3695 return true; | 3711 return true; |
(...skipping 1404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5100 * @param library the library being tested | 5116 * @param library the library being tested |
5101 * @return {@code true} if the library is 'dart:html' | 5117 * @return {@code true} if the library is 'dart:html' |
5102 */ | 5118 */ |
5103 bool isHtmlLibrary(LibraryElement library) => library.name == "dart.dom.html"; | 5119 bool isHtmlLibrary(LibraryElement library) => library.name == "dart.dom.html"; |
5104 /** | 5120 /** |
5105 * Return {@code true} if the given node is not a type literal. | 5121 * Return {@code true} if the given node is not a type literal. |
5106 * @param node the node being tested | 5122 * @param node the node being tested |
5107 * @return {@code true} if the given node is not a type literal | 5123 * @return {@code true} if the given node is not a type literal |
5108 */ | 5124 */ |
5109 bool isNotTypeLiteral(Identifier node) { | 5125 bool isNotTypeLiteral(Identifier node) { |
5110 ASTNode parent15 = node.parent; | 5126 ASTNode parent16 = node.parent; |
5111 return parent15 is TypeName || (parent15 is PrefixedIdentifier && (parent15. parent is TypeName || identical(((parent15 as PrefixedIdentifier)).prefix, node) )) || (parent15 is PropertyAccess && identical(((parent15 as PropertyAccess)).ta rget, node)) || (parent15 is MethodInvocation && identical(node, ((parent15 as M ethodInvocation)).target)); | 5127 return parent16 is TypeName || (parent16 is PrefixedIdentifier && (parent16. parent is TypeName || identical(((parent16 as PrefixedIdentifier)).prefix, node) )) || (parent16 is PropertyAccess && identical(((parent16 as PropertyAccess)).ta rget, node)) || (parent16 is MethodInvocation && identical(node, ((parent16 as M ethodInvocation)).target)); |
5112 } | 5128 } |
5113 /** | 5129 /** |
5114 * If it is appropriate to do so, override the type of the given element. Use the static type and | 5130 * If it is appropriate to do so, override the type of the given element. Use the static type and |
5115 * inferred type of the element to determine whether or not it is appropriate. | 5131 * inferred type of the element to determine whether or not it is appropriate. |
5116 * @param element the element whose type might be overridden | 5132 * @param element the element whose type might be overridden |
5117 * @param staticType the static type of the element | 5133 * @param staticType the static type of the element |
5118 * @param inferredType the inferred type of the element | 5134 * @param inferredType the inferred type of the element |
5119 */ | 5135 */ |
5120 void override(VariableElement element, Type2 staticType, Type2 inferredType) { | 5136 void override(VariableElement element, Type2 staticType, Type2 inferredType) { |
5121 if (identical(inferredType, BottomTypeImpl.instance) || element is! Variable Element) { | 5137 if (identical(inferredType, BottomTypeImpl.instance) || element is! Variable Element) { |
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5730 return null; | 5746 return null; |
5731 } | 5747 } |
5732 VoidTypeImpl voidType = VoidTypeImpl.instance; | 5748 VoidTypeImpl voidType = VoidTypeImpl.instance; |
5733 if (typeName.name == voidType.name) { | 5749 if (typeName.name == voidType.name) { |
5734 if (argumentList != null) { | 5750 if (argumentList != null) { |
5735 } | 5751 } |
5736 typeName.staticType = voidType; | 5752 typeName.staticType = voidType; |
5737 node.type = voidType; | 5753 node.type = voidType; |
5738 return null; | 5754 return null; |
5739 } | 5755 } |
5740 ASTNode parent16 = node.parent; | 5756 ASTNode parent17 = node.parent; |
5741 if (typeName is PrefixedIdentifier && parent16 is ConstructorName && argum entList == null) { | 5757 if (typeName is PrefixedIdentifier && parent17 is ConstructorName && argum entList == null) { |
5742 ConstructorName name = parent16 as ConstructorName; | 5758 ConstructorName name = parent17 as ConstructorName; |
5743 if (name.name == null) { | 5759 if (name.name == null) { |
5744 SimpleIdentifier prefix7 = ((typeName as PrefixedIdentifier)).prefix; | 5760 SimpleIdentifier prefix7 = ((typeName as PrefixedIdentifier)).prefix; |
5745 element = nameScope.lookup(prefix7, definingLibrary); | 5761 element = nameScope.lookup(prefix7, definingLibrary); |
5746 if (element is PrefixElement) { | 5762 if (element is PrefixElement) { |
5747 return null; | 5763 return null; |
5748 } else if (element != null) { | 5764 } else if (element != null) { |
5749 name.name = ((typeName as PrefixedIdentifier)).identifier; | 5765 name.name = ((typeName as PrefixedIdentifier)).identifier; |
5750 name.period = ((typeName as PrefixedIdentifier)).period; | 5766 name.period = ((typeName as PrefixedIdentifier)).period; |
5751 node.name = prefix7; | 5767 node.name = prefix7; |
5752 typeName = prefix7; | 5768 typeName = prefix7; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5900 } | 5916 } |
5901 /** | 5917 /** |
5902 * The number of type arguments in the given type name does not match the numb er of parameters in | 5918 * The number of type arguments in the given type name does not match the numb er of parameters in |
5903 * the corresponding class element. Return the error code that should be used to report this | 5919 * the corresponding class element. Return the error code that should be used to report this |
5904 * error. | 5920 * error. |
5905 * @param node the type name with the wrong number of type arguments | 5921 * @param node the type name with the wrong number of type arguments |
5906 * @return the error code that should be used to report that the wrong number of type arguments | 5922 * @return the error code that should be used to report that the wrong number of type arguments |
5907 * were provided | 5923 * were provided |
5908 */ | 5924 */ |
5909 ErrorCode getInvalidTypeParametersErrorCode(TypeName node) { | 5925 ErrorCode getInvalidTypeParametersErrorCode(TypeName node) { |
5910 ASTNode parent17 = node.parent; | 5926 ASTNode parent18 = node.parent; |
5911 if (parent17 is ConstructorName) { | 5927 if (parent18 is ConstructorName) { |
5912 parent17 = parent17.parent; | 5928 parent18 = parent18.parent; |
5913 if (parent17 is InstanceCreationExpression) { | 5929 if (parent18 is InstanceCreationExpression) { |
5914 if (((parent17 as InstanceCreationExpression)).isConst()) { | 5930 if (((parent18 as InstanceCreationExpression)).isConst()) { |
5915 return CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS; | 5931 return CompileTimeErrorCode.CONST_WITH_INVALID_TYPE_PARAMETERS; |
5916 } else { | 5932 } else { |
5917 return CompileTimeErrorCode.NEW_WITH_INVALID_TYPE_PARAMETERS; | 5933 return CompileTimeErrorCode.NEW_WITH_INVALID_TYPE_PARAMETERS; |
5918 } | 5934 } |
5919 } | 5935 } |
5920 } | 5936 } |
5921 return StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS; | 5937 return StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS; |
5922 } | 5938 } |
5923 /** | 5939 /** |
5924 * Given the multiple elements to which a single name could potentially be res olved, return the | 5940 * Given the multiple elements to which a single name could potentially be res olved, return the |
(...skipping 1208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7133 Object visitReturnStatement(ReturnStatement node) { | 7149 Object visitReturnStatement(ReturnStatement node) { |
7134 checkForReturnOfInvalidType(node); | 7150 checkForReturnOfInvalidType(node); |
7135 return super.visitReturnStatement(node); | 7151 return super.visitReturnStatement(node); |
7136 } | 7152 } |
7137 Object visitSimpleFormalParameter(SimpleFormalParameter node) { | 7153 Object visitSimpleFormalParameter(SimpleFormalParameter node) { |
7138 checkForConstFormalParameter(node); | 7154 checkForConstFormalParameter(node); |
7139 return super.visitSimpleFormalParameter(node); | 7155 return super.visitSimpleFormalParameter(node); |
7140 } | 7156 } |
7141 Object visitSwitchStatement(SwitchStatement node) { | 7157 Object visitSwitchStatement(SwitchStatement node) { |
7142 checkForCaseExpressionTypeImplementsEquals(node); | 7158 checkForCaseExpressionTypeImplementsEquals(node); |
7159 checkForInconsistentCaseExpressionTypes(node); | |
7143 return super.visitSwitchStatement(node); | 7160 return super.visitSwitchStatement(node); |
7144 } | 7161 } |
7145 Object visitThrowExpression(ThrowExpression node) { | 7162 Object visitThrowExpression(ThrowExpression node) { |
7146 checkForConstEvalThrowsException(node); | 7163 checkForConstEvalThrowsException(node); |
7147 return super.visitThrowExpression(node); | 7164 return super.visitThrowExpression(node); |
7148 } | 7165 } |
7149 Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) { | 7166 Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) { |
7150 checkForFinalNotInitialized2(node.variables); | 7167 checkForFinalNotInitialized2(node.variables); |
7151 return super.visitTopLevelVariableDeclaration(node); | 7168 return super.visitTopLevelVariableDeclaration(node); |
7152 } | 7169 } |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7487 } | 7504 } |
7488 return false; | 7505 return false; |
7489 } | 7506 } |
7490 /** | 7507 /** |
7491 * This verifies that the passed field formal parameter is in a constructor de claration. | 7508 * This verifies that the passed field formal parameter is in a constructor de claration. |
7492 * @param node the field formal parameter to test | 7509 * @param node the field formal parameter to test |
7493 * @return return {@code true} if and only if an error code is generated on th e passed node | 7510 * @return return {@code true} if and only if an error code is generated on th e passed node |
7494 * @see CompileTimeErrorCode#FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR | 7511 * @see CompileTimeErrorCode#FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR |
7495 */ | 7512 */ |
7496 bool checkForFieldInitializerOutsideConstructor(FieldFormalParameter node) { | 7513 bool checkForFieldInitializerOutsideConstructor(FieldFormalParameter node) { |
7497 ASTNode parent18 = node.parent; | 7514 ASTNode parent19 = node.parent; |
7498 if (parent18 != null) { | 7515 if (parent19 != null) { |
7499 ASTNode grandparent = parent18.parent; | 7516 ASTNode grandparent = parent19.parent; |
7500 if (grandparent != null && grandparent is! ConstructorDeclaration && grand parent.parent is! ConstructorDeclaration) { | 7517 if (grandparent != null && grandparent is! ConstructorDeclaration && grand parent.parent is! ConstructorDeclaration) { |
7501 _errorReporter.reportError(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSID E_CONSTRUCTOR, node, []); | 7518 _errorReporter.reportError(CompileTimeErrorCode.FIELD_INITIALIZER_OUTSID E_CONSTRUCTOR, node, []); |
7502 return true; | 7519 return true; |
7503 } | 7520 } |
7504 } | 7521 } |
7505 return false; | 7522 return false; |
7506 } | 7523 } |
7507 /** | 7524 /** |
7508 * This verifies that final fields that are declared, without any constructors in the enclosing | 7525 * This verifies that final fields that are declared, without any constructors in the enclosing |
7509 * class, are initialized. Cases in which there is at least one constructor ar e handled at the end | 7526 * class, are initialized. Cases in which there is at least one constructor ar e handled at the end |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7556 * @see CompileTimeErrorCode#IMPLEMENTS_DISALLOWED_CLASS | 7573 * @see CompileTimeErrorCode#IMPLEMENTS_DISALLOWED_CLASS |
7557 */ | 7574 */ |
7558 bool checkForImplementsDisallowedClass(ImplementsClause implementsClause) { | 7575 bool checkForImplementsDisallowedClass(ImplementsClause implementsClause) { |
7559 bool foundError = false; | 7576 bool foundError = false; |
7560 for (TypeName type in implementsClause.interfaces) { | 7577 for (TypeName type in implementsClause.interfaces) { |
7561 foundError = javaBooleanOr(foundError, checkForExtendsOrImplementsDisallow edClass(type, CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS)); | 7578 foundError = javaBooleanOr(foundError, checkForExtendsOrImplementsDisallow edClass(type, CompileTimeErrorCode.IMPLEMENTS_DISALLOWED_CLASS)); |
7562 } | 7579 } |
7563 return foundError; | 7580 return foundError; |
7564 } | 7581 } |
7565 /** | 7582 /** |
7583 * This verifies that the passed switch statement case expressions all have th e same type. | |
7584 * @param node the switch statement to evaluate | |
7585 * @return return {@code true} if and only if an error code is generated on th e passed node | |
7586 * @see CompileTimeErrorCode#INCONSISTENT_CASE_EXPRESSION_TYPES | |
7587 */ | |
7588 bool checkForInconsistentCaseExpressionTypes(SwitchStatement node) { | |
7589 NodeList<SwitchMember> switchMembers = node.members; | |
7590 bool foundError = false; | |
7591 Type2 firstType = null; | |
7592 for (SwitchMember switchMember in switchMembers) { | |
7593 if (switchMember is SwitchCase) { | |
7594 SwitchCase switchCase = switchMember as SwitchCase; | |
7595 Expression expression17 = switchCase.expression; | |
7596 if (firstType == null) { | |
7597 firstType = expression17.staticType; | |
7598 } else { | |
7599 Type2 nType = expression17.staticType; | |
7600 if (firstType != nType) { | |
7601 _errorReporter.reportError(CompileTimeErrorCode.INCONSISTENT_CASE_EX PRESSION_TYPES, expression17, [expression17.toSource(), firstType.name]); | |
7602 foundError = true; | |
7603 } | |
7604 } | |
7605 } | |
7606 } | |
7607 return foundError; | |
7608 } | |
7609 /** | |
7566 * This verifies that the passed assignment expression represents a valid assi gnment. | 7610 * This verifies that the passed assignment expression represents a valid assi gnment. |
7567 * @param node the assignment expression to evaluate | 7611 * @param node the assignment expression to evaluate |
7568 * @return return {@code true} if and only if an error code is generated on th e passed node | 7612 * @return return {@code true} if and only if an error code is generated on th e passed node |
7569 * @see StaticTypeWarningCode#INVALID_ASSIGNMENT | 7613 * @see StaticTypeWarningCode#INVALID_ASSIGNMENT |
7570 */ | 7614 */ |
7571 bool checkForInvalidAssignment(AssignmentExpression node) { | 7615 bool checkForInvalidAssignment(AssignmentExpression node) { |
7572 Expression lhs = node.leftHandSide; | 7616 Expression lhs = node.leftHandSide; |
7573 Expression rhs = node.rightHandSide; | 7617 Expression rhs = node.rightHandSide; |
7574 VariableElement leftElement = getVariableElement(lhs); | 7618 VariableElement leftElement = getVariableElement(lhs); |
7575 Type2 leftType = (leftElement == null) ? getType(lhs) : leftElement.type; | 7619 Type2 leftType = (leftElement == null) ? getType(lhs) : leftElement.type; |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7770 this._type = type; | 7814 this._type = type; |
7771 this._message = message; | 7815 this._message = message; |
7772 } | 7816 } |
7773 ErrorSeverity get errorSeverity => _type.severity; | 7817 ErrorSeverity get errorSeverity => _type.severity; |
7774 String get message => _message; | 7818 String get message => _message; |
7775 ErrorType get type => _type; | 7819 ErrorType get type => _type; |
7776 bool needsRecompilation() => true; | 7820 bool needsRecompilation() => true; |
7777 int compareTo(ResolverErrorCode other) => __ordinal - other.__ordinal; | 7821 int compareTo(ResolverErrorCode other) => __ordinal - other.__ordinal; |
7778 String toString() => __name; | 7822 String toString() => __name; |
7779 } | 7823 } |
OLD | NEW |