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_test; | 5 library engine.resolver_test; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 | 8 |
9 import 'package:analyzer/src/context/context.dart' as newContext; | 9 import 'package:analyzer/src/context/context.dart' as newContext; |
10 import 'package:analyzer/src/generated/ast.dart'; | 10 import 'package:analyzer/src/generated/ast.dart'; |
(...skipping 13358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13369 /** | 13369 /** |
13370 * The visitor used to resolve types needed to form the type hierarchy. | 13370 * The visitor used to resolve types needed to form the type hierarchy. |
13371 */ | 13371 */ |
13372 TypeResolverVisitor _visitor; | 13372 TypeResolverVisitor _visitor; |
13373 | 13373 |
13374 void fail_visitConstructorDeclaration() { | 13374 void fail_visitConstructorDeclaration() { |
13375 fail("Not yet tested"); | 13375 fail("Not yet tested"); |
13376 _listener.assertNoErrors(); | 13376 _listener.assertNoErrors(); |
13377 } | 13377 } |
13378 | 13378 |
13379 void fail_visitFunctionDeclaration() { | |
13380 fail("Not yet tested"); | |
13381 _listener.assertNoErrors(); | |
13382 } | |
13383 | |
13384 void fail_visitFunctionTypeAlias() { | 13379 void fail_visitFunctionTypeAlias() { |
13385 fail("Not yet tested"); | 13380 fail("Not yet tested"); |
13386 _listener.assertNoErrors(); | 13381 _listener.assertNoErrors(); |
13387 } | 13382 } |
13388 | 13383 |
13389 void fail_visitFunctionTypedFormalParameter() { | |
13390 fail("Not yet tested"); | |
13391 _listener.assertNoErrors(); | |
13392 } | |
13393 | |
13394 void fail_visitMethodDeclaration() { | |
13395 fail("Not yet tested"); | |
13396 _listener.assertNoErrors(); | |
13397 } | |
13398 | |
13399 void fail_visitVariableDeclaration() { | 13384 void fail_visitVariableDeclaration() { |
13400 fail("Not yet tested"); | 13385 fail("Not yet tested"); |
13401 ClassElement type = ElementFactory.classElement2("A"); | 13386 ClassElement type = ElementFactory.classElement2("A"); |
13402 VariableDeclaration node = AstFactory.variableDeclaration("a"); | 13387 VariableDeclaration node = AstFactory.variableDeclaration("a"); |
13403 AstFactory.variableDeclarationList(null, AstFactory.typeName(type), [node]); | 13388 AstFactory.variableDeclarationList(null, AstFactory.typeName(type), [node]); |
13404 //resolve(node); | 13389 //resolve(node); |
13405 expect(node.name.staticType, same(type.type)); | 13390 expect(node.name.staticType, same(type.type)); |
13406 _listener.assertNoErrors(); | 13391 _listener.assertNoErrors(); |
13407 } | 13392 } |
13408 | 13393 |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13691 TypeName intTypeName = AstFactory.typeName4("int"); | 13676 TypeName intTypeName = AstFactory.typeName4("int"); |
13692 String parameterName = "p"; | 13677 String parameterName = "p"; |
13693 FormalParameter node = | 13678 FormalParameter node = |
13694 AstFactory.fieldFormalParameter(null, intTypeName, parameterName); | 13679 AstFactory.fieldFormalParameter(null, intTypeName, parameterName); |
13695 node.identifier.staticElement = | 13680 node.identifier.staticElement = |
13696 ElementFactory.requiredParameter(parameterName); | 13681 ElementFactory.requiredParameter(parameterName); |
13697 expect(_resolveFormalParameter(node, [intType.element]), same(intType)); | 13682 expect(_resolveFormalParameter(node, [intType.element]), same(intType)); |
13698 _listener.assertNoErrors(); | 13683 _listener.assertNoErrors(); |
13699 } | 13684 } |
13700 | 13685 |
| 13686 void test_visitFunctionDeclaration() { |
| 13687 // R f(P p) {} |
| 13688 // class R {} |
| 13689 // class P {} |
| 13690 ClassElement elementR = ElementFactory.classElement2('R'); |
| 13691 ClassElement elementP = ElementFactory.classElement2('P'); |
| 13692 FunctionElement elementF = ElementFactory.functionElement('f'); |
| 13693 FunctionDeclaration declaration = AstFactory.functionDeclaration( |
| 13694 AstFactory.typeName4('R'), null, 'f', AstFactory.functionExpression2( |
| 13695 AstFactory.formalParameterList([ |
| 13696 AstFactory.simpleFormalParameter4(AstFactory.typeName4('P'), 'p') |
| 13697 ]), null)); |
| 13698 declaration.name.staticElement = elementF; |
| 13699 _resolveNode(declaration, [elementR, elementP]); |
| 13700 expect(declaration.returnType.type, elementR.type); |
| 13701 SimpleFormalParameter parameter = |
| 13702 declaration.functionExpression.parameters.parameters[0]; |
| 13703 expect(parameter.type.type, elementP.type); |
| 13704 _listener.assertNoErrors(); |
| 13705 } |
| 13706 |
| 13707 void test_visitFunctionDeclaration_typeParameter() { |
| 13708 // E f<E>(E e) {} |
| 13709 TypeParameterElement elementE = ElementFactory.typeParameterElement('E'); |
| 13710 FunctionElementImpl elementF = ElementFactory.functionElement('f'); |
| 13711 elementF.typeParameters = <TypeParameterElement>[elementE]; |
| 13712 FunctionDeclaration declaration = AstFactory.functionDeclaration( |
| 13713 AstFactory.typeName4('E'), null, 'f', AstFactory.functionExpression2( |
| 13714 AstFactory.formalParameterList([ |
| 13715 AstFactory.simpleFormalParameter4(AstFactory.typeName4('E'), 'e') |
| 13716 ]), null)); |
| 13717 declaration.name.staticElement = elementF; |
| 13718 _resolveNode(declaration, []); |
| 13719 expect(declaration.returnType.type, elementE.type); |
| 13720 SimpleFormalParameter parameter = |
| 13721 declaration.functionExpression.parameters.parameters[0]; |
| 13722 expect(parameter.type.type, elementE.type); |
| 13723 _listener.assertNoErrors(); |
| 13724 } |
| 13725 |
| 13726 void test_visitFunctionTypedFormalParameter() { |
| 13727 // R f(R g(P p)) {} |
| 13728 // class R {} |
| 13729 // class P {} |
| 13730 ClassElement elementR = ElementFactory.classElement2('R'); |
| 13731 ClassElement elementP = ElementFactory.classElement2('P'); |
| 13732 FunctionElement elementF = ElementFactory.functionElement('f'); |
| 13733 ParameterElementImpl requiredParameter = |
| 13734 ElementFactory.requiredParameter('p'); |
| 13735 FunctionTypedFormalParameter parameterDeclaration = AstFactory |
| 13736 .functionTypedFormalParameter(AstFactory.typeName4('R'), 'g', [ |
| 13737 AstFactory.simpleFormalParameter4(AstFactory.typeName4('P'), 'p') |
| 13738 ]); |
| 13739 parameterDeclaration.identifier.staticElement = requiredParameter; |
| 13740 FunctionDeclaration declaration = AstFactory.functionDeclaration( |
| 13741 AstFactory.typeName4('R'), null, 'f', AstFactory.functionExpression2( |
| 13742 AstFactory.formalParameterList([parameterDeclaration]), null)); |
| 13743 declaration.name.staticElement = elementF; |
| 13744 _resolveNode(declaration, [elementR, elementP]); |
| 13745 expect(declaration.returnType.type, elementR.type); |
| 13746 FunctionTypedFormalParameter parameter = |
| 13747 declaration.functionExpression.parameters.parameters[0]; |
| 13748 expect(parameter.returnType.type, elementR.type); |
| 13749 SimpleFormalParameter innerParameter = parameter.parameters.parameters[0]; |
| 13750 expect(innerParameter.type.type, elementP.type); |
| 13751 _listener.assertNoErrors(); |
| 13752 } |
| 13753 |
| 13754 void test_visitFunctionTypedFormalParameter_typeParameter() { |
| 13755 // R f(R g<E>(E e)) {} |
| 13756 // class R {} |
| 13757 ClassElement elementR = ElementFactory.classElement2('R'); |
| 13758 TypeParameterElement elementE = ElementFactory.typeParameterElement('E'); |
| 13759 FunctionElement elementF = ElementFactory.functionElement('f'); |
| 13760 ParameterElementImpl requiredParameter = |
| 13761 ElementFactory.requiredParameter('g'); |
| 13762 requiredParameter.typeParameters = <TypeParameterElement>[elementE]; |
| 13763 FunctionTypedFormalParameter parameterDeclaration = AstFactory |
| 13764 .functionTypedFormalParameter(AstFactory.typeName4('R'), 'g', [ |
| 13765 AstFactory.simpleFormalParameter4(AstFactory.typeName4('E'), 'e') |
| 13766 ]); |
| 13767 parameterDeclaration.identifier.staticElement = requiredParameter; |
| 13768 FunctionDeclaration declaration = AstFactory.functionDeclaration( |
| 13769 AstFactory.typeName4('R'), null, 'f', AstFactory.functionExpression2( |
| 13770 AstFactory.formalParameterList([parameterDeclaration]), null)); |
| 13771 declaration.name.staticElement = elementF; |
| 13772 _resolveNode(declaration, [elementR]); |
| 13773 expect(declaration.returnType.type, elementR.type); |
| 13774 FunctionTypedFormalParameter parameter = |
| 13775 declaration.functionExpression.parameters.parameters[0]; |
| 13776 expect(parameter.returnType.type, elementR.type); |
| 13777 SimpleFormalParameter innerParameter = parameter.parameters.parameters[0]; |
| 13778 expect(innerParameter.type.type, elementE.type); |
| 13779 _listener.assertNoErrors(); |
| 13780 } |
| 13781 |
| 13782 void test_visitMethodDeclaration() { |
| 13783 // class A { |
| 13784 // R m(P p) {} |
| 13785 // } |
| 13786 // class R {} |
| 13787 // class P {} |
| 13788 ClassElementImpl elementA = ElementFactory.classElement2('A'); |
| 13789 ClassElement elementR = ElementFactory.classElement2('R'); |
| 13790 ClassElement elementP = ElementFactory.classElement2('P'); |
| 13791 MethodElement elementM = ElementFactory.methodElement('m', null); |
| 13792 elementA.methods = <MethodElement>[elementM]; |
| 13793 MethodDeclaration declaration = AstFactory.methodDeclaration(null, |
| 13794 AstFactory.typeName4('R'), null, null, AstFactory.identifier3('m'), |
| 13795 AstFactory.formalParameterList([ |
| 13796 AstFactory.simpleFormalParameter4(AstFactory.typeName4('P'), 'p') |
| 13797 ])); |
| 13798 declaration.name.staticElement = elementM; |
| 13799 _resolveNode(declaration, [elementA, elementR, elementP]); |
| 13800 expect(declaration.returnType.type, elementR.type); |
| 13801 SimpleFormalParameter parameter = declaration.parameters.parameters[0]; |
| 13802 expect(parameter.type.type, elementP.type); |
| 13803 _listener.assertNoErrors(); |
| 13804 } |
| 13805 |
| 13806 void test_visitMethodDeclaration_typeParameter() { |
| 13807 // class A { |
| 13808 // E m<E>(E e) {} |
| 13809 // } |
| 13810 ClassElementImpl elementA = ElementFactory.classElement2('A'); |
| 13811 TypeParameterElement elementE = ElementFactory.typeParameterElement('E'); |
| 13812 MethodElementImpl elementM = ElementFactory.methodElement('m', null); |
| 13813 elementM.typeParameters = <TypeParameterElement>[elementE]; |
| 13814 elementA.methods = <MethodElement>[elementM]; |
| 13815 MethodDeclaration declaration = AstFactory.methodDeclaration(null, |
| 13816 AstFactory.typeName4('E'), null, null, AstFactory.identifier3('m'), |
| 13817 AstFactory.formalParameterList([ |
| 13818 AstFactory.simpleFormalParameter4(AstFactory.typeName4('E'), 'e') |
| 13819 ])); |
| 13820 declaration.name.staticElement = elementM; |
| 13821 _resolveNode(declaration, [elementA]); |
| 13822 expect(declaration.returnType.type, elementE.type); |
| 13823 SimpleFormalParameter parameter = declaration.parameters.parameters[0]; |
| 13824 expect(parameter.type.type, elementE.type); |
| 13825 _listener.assertNoErrors(); |
| 13826 } |
| 13827 |
13701 void test_visitSimpleFormalParameter_noType() { | 13828 void test_visitSimpleFormalParameter_noType() { |
13702 // p | 13829 // p |
13703 FormalParameter node = AstFactory.simpleFormalParameter3("p"); | 13830 FormalParameter node = AstFactory.simpleFormalParameter3("p"); |
13704 node.identifier.staticElement = | 13831 node.identifier.staticElement = |
13705 new ParameterElementImpl.forNode(AstFactory.identifier3("p")); | 13832 new ParameterElementImpl.forNode(AstFactory.identifier3("p")); |
13706 expect(_resolveFormalParameter(node), same(_typeProvider.dynamicType)); | 13833 expect(_resolveFormalParameter(node), same(_typeProvider.dynamicType)); |
13707 _listener.assertNoErrors(); | 13834 _listener.assertNoErrors(); |
13708 } | 13835 } |
13709 | 13836 |
13710 void test_visitSimpleFormalParameter_type() { | 13837 void test_visitSimpleFormalParameter_type() { |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13875 // check propagated type | 14002 // check propagated type |
13876 FunctionType propagatedType = node.propagatedType as FunctionType; | 14003 FunctionType propagatedType = node.propagatedType as FunctionType; |
13877 expect(propagatedType.returnType, test.typeProvider.stringType); | 14004 expect(propagatedType.returnType, test.typeProvider.stringType); |
13878 } on AnalysisException catch (e, stackTrace) { | 14005 } on AnalysisException catch (e, stackTrace) { |
13879 thrownException[0] = new CaughtException(e, stackTrace); | 14006 thrownException[0] = new CaughtException(e, stackTrace); |
13880 } | 14007 } |
13881 } | 14008 } |
13882 return null; | 14009 return null; |
13883 } | 14010 } |
13884 } | 14011 } |
OLD | NEW |