Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: pkg/analyzer/test/generated/resolver_test.dart

Issue 1217373005: Generic method support in element model (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698