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

Side by Side Diff: pkg/analyzer/test/dart/element/builder_test.dart

Issue 2971893002: Remove other usages of ExecutableElement.localVariables. (Closed)
Patch Set: Created 3 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
« no previous file with comments | « no previous file | pkg/analyzer/test/generated/resolver_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 analyzer.test.dart.element.builder_test; 5 library analyzer.test.dart.element.builder_test;
6 6
7 import 'package:analyzer/dart/ast/ast.dart'; 7 import 'package:analyzer/dart/ast/ast.dart';
8 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; 8 import 'package:analyzer/dart/ast/standard_ast_factory.dart';
9 import 'package:analyzer/dart/ast/token.dart'; 9 import 'package:analyzer/dart/ast/token.dart';
10 import 'package:analyzer/dart/element/element.dart'; 10 import 'package:analyzer/dart/element/element.dart';
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 } 72 }
73 } 73 }
74 ''').types[0].methods[0]; 74 ''').types[0].methods[0];
75 { 75 {
76 expect(method.parameters, hasLength(2)); 76 expect(method.parameters, hasLength(2));
77 expect(method.parameters[0].displayName, 'a'); 77 expect(method.parameters[0].displayName, 'a');
78 expect(method.parameters[0].initializer, isNull); 78 expect(method.parameters[0].initializer, isNull);
79 expect(method.parameters[1].displayName, 'b'); 79 expect(method.parameters[1].displayName, 'b');
80 expect(method.parameters[1].initializer, isNull); 80 expect(method.parameters[1].initializer, isNull);
81 } 81 }
82 expect(method.localVariables, isEmpty);
83 expect(method.functions, isEmpty); 82 expect(method.functions, isEmpty);
84 } 83 }
85 84
86 void test_api_topLevelFunction_blockBody() { 85 void test_api_topLevelFunction_blockBody() {
87 FunctionElement function = buildElementsForText(r''' 86 FunctionElement function = buildElementsForText(r'''
88 void topLevelFunction() { 87 void topLevelFunction() {
89 int v = 0; 88 int v = 0;
90 localFunction() {} 89 localFunction() {}
91 } 90 }
92 ''').functions[0]; 91 ''').functions[0];
93 expect(function.localVariables, isEmpty);
94 expect(function.functions, isEmpty); 92 expect(function.functions, isEmpty);
95 } 93 }
96 94
97 void test_api_topLevelFunction_expressionBody() { 95 void test_api_topLevelFunction_expressionBody() {
98 FunctionElement function = buildElementsForText(r''' 96 FunctionElement function = buildElementsForText(r'''
99 topLevelFunction() => () { 97 topLevelFunction() => () {
100 int localVar = 0; 98 int localVar = 0;
101 }; 99 };
102 ''').functions[0]; 100 ''').functions[0];
103 expect(function.localVariables, isEmpty);
104 expect(function.functions, isEmpty); 101 expect(function.functions, isEmpty);
105 } 102 }
106 103
107 void test_api_topLevelFunction_parameters() { 104 void test_api_topLevelFunction_parameters() {
108 FunctionElement function = buildElementsForText(r''' 105 FunctionElement function = buildElementsForText(r'''
109 void topLevelFunction(int a, int b(double b2), {c: () {int c2; c3() {} }}) { 106 void topLevelFunction(int a, int b(double b2), {c: () {int c2; c3() {} }}) {
110 } 107 }
111 ''').functions[0]; 108 ''').functions[0];
112 List<ParameterElement> parameters = function.parameters; 109 List<ParameterElement> parameters = function.parameters;
113 expect(parameters, hasLength(3)); 110 expect(parameters, hasLength(3));
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 } 180 }
184 } 181 }
185 182
186 @override 183 @override
187 void setUp() { 184 void setUp() {
188 super.setUp(); 185 super.setUp();
189 compilationUnitElement = new CompilationUnitElementImpl('test.dart'); 186 compilationUnitElement = new CompilationUnitElementImpl('test.dart');
190 } 187 }
191 188
192 void test_metadata_localVariableDeclaration() { 189 void test_metadata_localVariableDeclaration() {
193 List<LocalVariableElement> localVariables = 190 var code = 'f() { @a int x, y; }';
194 buildElementsForText('f() { @a int x, y; }') 191 buildElementsForText(code);
195 .functions[0] 192 var x = findLocalVariable(code, 'x, ');
196 .localVariables; 193 var y = findLocalVariable(code, 'x, ');
197 checkMetadata(localVariables[0]); 194 checkMetadata(x);
198 checkMetadata(localVariables[1]); 195 checkMetadata(y);
199 expect(localVariables[0].metadata, same(localVariables[1].metadata)); 196 expect(x.metadata, same(y.metadata));
200 } 197 }
201 198
202 void test_metadata_visitDeclaredIdentifier() { 199 void test_metadata_visitDeclaredIdentifier() {
203 LocalVariableElement localVariableElement = 200 var code = 'f() { for (@a var x in y) {} }';
204 buildElementsForText('f() { for (@a var x in y) {} }') 201 buildElementsForText(code);
205 .functions[0] 202 var x = findLocalVariable(code, 'x in');
206 .localVariables[0]; 203 checkMetadata(x);
207 checkMetadata(localVariableElement);
208 } 204 }
209 205
210 void test_visitCatchClause() { 206 void test_visitCatchClause() {
211 List<LocalVariableElement> variables = 207 var code = 'f() { try {} catch (e, s) {} }';
212 buildElementsForText('f() { try {} catch (e, s) {} }') 208 buildElementsForText(code);
213 .functions[0] 209 var e = findLocalVariable(code, 'e, ');
214 .localVariables; 210 var s = findLocalVariable(code, 's) {}');
215 String exceptionParameterName = "e";
216 String stackParameterName = "s";
217 expect(variables, hasLength(2));
218 211
219 LocalVariableElement exceptionVariable = variables[0]; 212 expect(e, isNotNull);
220 expect(exceptionVariable, isNotNull); 213 expect(e.name, 'e');
221 expect(exceptionVariable.name, exceptionParameterName); 214 expect(e.hasImplicitType, isTrue);
222 expect(exceptionVariable.hasImplicitType, isTrue); 215 expect(e.isSynthetic, isFalse);
223 expect(exceptionVariable.isSynthetic, isFalse); 216 expect(e.isConst, isFalse);
224 expect(exceptionVariable.isConst, isFalse); 217 expect(e.isFinal, isFalse);
225 expect(exceptionVariable.isFinal, isFalse); 218 expect(e.initializer, isNull);
226 expect(exceptionVariable.initializer, isNull); 219 _assertVisibleRange(e, 13, 28);
227 _assertVisibleRange(exceptionVariable, 13, 28);
228 220
229 LocalVariableElement stackVariable = variables[1]; 221 expect(s, isNotNull);
230 expect(stackVariable, isNotNull); 222 expect(s.name, 's');
231 expect(stackVariable.name, stackParameterName); 223 expect(s.isSynthetic, isFalse);
232 expect(stackVariable.isSynthetic, isFalse); 224 expect(s.isConst, isFalse);
233 expect(stackVariable.isConst, isFalse); 225 expect(s.isFinal, isFalse);
234 expect(stackVariable.isFinal, isFalse); 226 expect(s.initializer, isNull);
235 expect(stackVariable.initializer, isNull); 227 _assertVisibleRange(s, 13, 28);
236 _assertVisibleRange(stackVariable, 13, 28);
237 } 228 }
238 229
239 void test_visitCatchClause_withType() { 230 void test_visitCatchClause_withType() {
240 List<LocalVariableElement> variables = 231 var code = 'f() { try {} on E catch (e) {} }';
241 buildElementsForText('f() { try {} on E catch (e) {} }') 232 buildElementsForText(code);
242 .functions[0] 233 var e = findLocalVariable(code, 'e) {}');
243 .localVariables; 234 expect(e, isNotNull);
244 String exceptionParameterName = "e"; 235 expect(e.name, 'e');
245 expect(variables, hasLength(1)); 236 expect(e.hasImplicitType, isFalse);
246 VariableElement exceptionVariable = variables[0];
247 expect(exceptionVariable, isNotNull);
248 expect(exceptionVariable.name, exceptionParameterName);
249 expect(exceptionVariable.hasImplicitType, isFalse);
250 } 237 }
251 238
252 void test_visitCompilationUnit_codeRange() { 239 void test_visitCompilationUnit_codeRange() {
253 TopLevelVariableDeclaration topLevelVariableDeclaration = AstTestFactory 240 TopLevelVariableDeclaration topLevelVariableDeclaration = AstTestFactory
254 .topLevelVariableDeclaration(null, AstTestFactory.typeName4('int'), 241 .topLevelVariableDeclaration(null, AstTestFactory.typeName4('int'),
255 [AstTestFactory.variableDeclaration('V')]); 242 [AstTestFactory.variableDeclaration('V')]);
256 CompilationUnit unit = astFactory.compilationUnit( 243 CompilationUnit unit = astFactory.compilationUnit(
257 topLevelVariableDeclaration.beginToken, 244 topLevelVariableDeclaration.beginToken,
258 null, 245 null,
259 [], 246 [],
260 [topLevelVariableDeclaration], 247 [topLevelVariableDeclaration],
261 topLevelVariableDeclaration.endToken); 248 topLevelVariableDeclaration.endToken);
262 ElementHolder holder = new ElementHolder(); 249 ElementHolder holder = new ElementHolder();
263 ElementBuilder builder = _makeBuilder(holder); 250 ElementBuilder builder = _makeBuilder(holder);
264 unit.beginToken.offset = 10; 251 unit.beginToken.offset = 10;
265 unit.endToken.offset = 40; 252 unit.endToken.offset = 40;
266 unit.accept(builder); 253 unit.accept(builder);
267 254
268 assertHasCodeRange(compilationUnitElement, 0, 41); 255 assertHasCodeRange(compilationUnitElement, 0, 41);
269 } 256 }
270 257
271 void test_visitDeclaredIdentifier_noType() { 258 void test_visitDeclaredIdentifier_noType() {
272 LocalVariableElement variable = 259 var code = 'f() { for (var i in []) {} }';
273 buildElementsForText('f() { for (var i in []) {} }') 260 buildElementsForText(code);
274 .functions[0] 261 var variable = findLocalVariable(code, 'i in');
275 .localVariables[0];
276 assertHasCodeRange(variable, 11, 5); 262 assertHasCodeRange(variable, 11, 5);
277 expect(variable, isNotNull); 263 expect(variable, isNotNull);
278 expect(variable.hasImplicitType, isTrue); 264 expect(variable.hasImplicitType, isTrue);
279 expect(variable.isConst, isFalse); 265 expect(variable.isConst, isFalse);
280 expect(variable.isDeprecated, isFalse); 266 expect(variable.isDeprecated, isFalse);
281 expect(variable.isFinal, isFalse); 267 expect(variable.isFinal, isFalse);
282 expect(variable.isOverride, isFalse); 268 expect(variable.isOverride, isFalse);
283 expect(variable.isPrivate, isFalse); 269 expect(variable.isPrivate, isFalse);
284 expect(variable.isPublic, isTrue); 270 expect(variable.isPublic, isTrue);
285 expect(variable.isSynthetic, isFalse); 271 expect(variable.isSynthetic, isFalse);
286 expect(variable.name, 'i'); 272 expect(variable.name, 'i');
287 } 273 }
288 274
289 void test_visitDeclaredIdentifier_type() { 275 void test_visitDeclaredIdentifier_type() {
290 LocalVariableElement variable = 276 var code = 'f() { for (int i in []) {} }';
291 buildElementsForText('f() { for (int i in []) {} }') 277 buildElementsForText(code);
292 .functions[0] 278 var variable = findLocalVariable(code, 'i in');
293 .localVariables[0];
294 assertHasCodeRange(variable, 11, 5); 279 assertHasCodeRange(variable, 11, 5);
295 expect(variable.hasImplicitType, isFalse); 280 expect(variable.hasImplicitType, isFalse);
296 expect(variable.isConst, isFalse); 281 expect(variable.isConst, isFalse);
297 expect(variable.isDeprecated, isFalse); 282 expect(variable.isDeprecated, isFalse);
298 expect(variable.isFinal, isFalse); 283 expect(variable.isFinal, isFalse);
299 expect(variable.isOverride, isFalse); 284 expect(variable.isOverride, isFalse);
300 expect(variable.isPrivate, isFalse); 285 expect(variable.isPrivate, isFalse);
301 expect(variable.isPublic, isTrue); 286 expect(variable.isPublic, isTrue);
302 expect(variable.isSynthetic, isFalse); 287 expect(variable.isSynthetic, isFalse);
303 expect(variable.name, 'i'); 288 expect(variable.name, 'i');
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 List<LabelElement> labels = 484 List<LabelElement> labels =
500 buildElementsForText('f() { l: print(42); }').functions[0].labels; 485 buildElementsForText('f() { l: print(42); }').functions[0].labels;
501 expect(labels, hasLength(1)); 486 expect(labels, hasLength(1));
502 LabelElement label = labels[0]; 487 LabelElement label = labels[0];
503 expect(label, isNotNull); 488 expect(label, isNotNull);
504 expect(label.name, 'l'); 489 expect(label.name, 'l');
505 expect(label.isSynthetic, isFalse); 490 expect(label.isSynthetic, isFalse);
506 } 491 }
507 492
508 void test_visitMethodDeclaration_withMembers() { 493 void test_visitMethodDeclaration_withMembers() {
509 MethodElement method = buildElementsForText( 494 var code = 'class C { m(p) { var v; try { l: return; } catch (e) {} } }';
510 'class C { m(p) { var v; try { l: return; } catch (e) {} } }') 495 MethodElement method = buildElementsForText(code).types[0].methods[0];
511 .types[0]
512 .methods[0];
513 String methodName = "m"; 496 String methodName = "m";
514 String parameterName = "p"; 497 String parameterName = "p";
515 String localVariableName = "v";
516 String labelName = "l"; 498 String labelName = "l";
517 String exceptionParameterName = "e";
518 expect(method, isNotNull); 499 expect(method, isNotNull);
519 expect(method.hasImplicitReturnType, isTrue); 500 expect(method.hasImplicitReturnType, isTrue);
520 expect(method.name, methodName); 501 expect(method.name, methodName);
521 expect(method.typeParameters, hasLength(0)); 502 expect(method.typeParameters, hasLength(0));
522 expect(method.isAbstract, isFalse); 503 expect(method.isAbstract, isFalse);
523 expect(method.isExternal, isFalse); 504 expect(method.isExternal, isFalse);
524 expect(method.isStatic, isFalse); 505 expect(method.isStatic, isFalse);
525 expect(method.isSynthetic, isFalse); 506 expect(method.isSynthetic, isFalse);
526 List<VariableElement> parameters = method.parameters; 507 List<VariableElement> parameters = method.parameters;
527 expect(parameters, hasLength(1)); 508 expect(parameters, hasLength(1));
528 VariableElement parameter = parameters[0]; 509 VariableElement parameter = parameters[0];
529 expect(parameter, isNotNull); 510 expect(parameter, isNotNull);
530 expect(parameter.name, parameterName); 511 expect(parameter.name, parameterName);
531 List<VariableElement> localVariables = method.localVariables; 512
532 expect(localVariables, hasLength(2)); 513 var v = findLocalVariable(code, 'v;');
533 VariableElement firstVariable = localVariables[0]; 514 expect(v.name, 'v');
534 VariableElement secondVariable = localVariables[1]; 515
535 expect(firstVariable, isNotNull); 516 var e = findLocalVariable(code, 'e) {}');
536 expect(secondVariable, isNotNull); 517 expect(e.name, 'e');
537 expect( 518
538 (firstVariable.name == localVariableName &&
539 secondVariable.name == exceptionParameterName) ||
540 (firstVariable.name == exceptionParameterName &&
541 secondVariable.name == localVariableName),
542 isTrue);
543 List<LabelElement> labels = method.labels; 519 List<LabelElement> labels = method.labels;
544 expect(labels, hasLength(1)); 520 expect(labels, hasLength(1));
545 LabelElement label = labels[0]; 521 LabelElement label = labels[0];
546 expect(label, isNotNull); 522 expect(label, isNotNull);
547 expect(label.name, labelName); 523 expect(label.name, labelName);
548 } 524 }
549 525
550 void test_visitNamedFormalParameter() { 526 void test_visitNamedFormalParameter() {
551 ElementHolder holder = new ElementHolder(); 527 ElementHolder holder = new ElementHolder();
552 ElementBuilder builder = _makeBuilder(holder); 528 ElementBuilder builder = _makeBuilder(holder);
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 List<FieldElement> fields = holder.fields; 703 List<FieldElement> fields = holder.fields;
728 expect(fields, hasLength(1)); 704 expect(fields, hasLength(1));
729 FieldElementImpl field = fields[0]; 705 FieldElementImpl field = fields[0];
730 expect(field, isNotNull); 706 expect(field, isNotNull);
731 PropertyAccessorElementImpl setter = field.setter; 707 PropertyAccessorElementImpl setter = field.setter;
732 expect(setter, isNotNull); 708 expect(setter, isNotNull);
733 expect(setter.parameters[0].isCovariant, isTrue); 709 expect(setter.parameters[0].isCovariant, isTrue);
734 } 710 }
735 711
736 void test_visitVariableDeclaration_inConstructor() { 712 void test_visitVariableDeclaration_inConstructor() {
737 List<ConstructorElement> constructors = 713 var code = 'class C { C() { var v = 1; } }';
738 buildElementsForText('class C { C() { var v = 1; } }') 714 buildElementsForText(code);
739 .types[0] 715 var v = findLocalVariable(code, 'v =');
740 .constructors; 716 assertHasCodeRange(v, 16, 10);
741 expect(constructors, hasLength(1)); 717 expect(v.hasImplicitType, isTrue);
742 List<LocalVariableElement> variableElements = 718 expect(v.name, 'v');
743 constructors[0].localVariables; 719 _assertVisibleRange(v, 14, 28);
744 expect(variableElements, hasLength(1));
745 LocalVariableElement variableElement = variableElements[0];
746 assertHasCodeRange(variableElement, 16, 10);
747 expect(variableElement.hasImplicitType, isTrue);
748 expect(variableElement.name, 'v');
749 _assertVisibleRange(variableElement, 14, 28);
750 } 720 }
751 721
752 void test_visitVariableDeclaration_inForEachStatement() { 722 void test_visitVariableDeclaration_inForEachStatement() {
753 ElementHolder holder = new ElementHolder(); 723 ElementHolder holder = new ElementHolder();
754 ElementBuilder builder = _makeBuilder(holder); 724 ElementBuilder builder = _makeBuilder(holder);
755 // 725 //
756 // m() { for (var v in []) } 726 // m() { for (var v in []) }
757 // 727 //
758 String variableName = "v"; 728 String variableName = "v";
759 Statement statement = AstTestFactory.forEachStatement( 729 DeclaredIdentifier variableIdentifier =
760 AstTestFactory.declaredIdentifier3('v'), 730 AstTestFactory.declaredIdentifier3('v');
761 AstTestFactory.listLiteral(), 731 Statement statement = AstTestFactory.forEachStatement(variableIdentifier,
762 AstTestFactory.block()); 732 AstTestFactory.listLiteral(), AstTestFactory.block());
763 _setNodeSourceRange(statement, 100, 110); 733 _setNodeSourceRange(statement, 100, 110);
764 MethodDeclaration method = AstTestFactory.methodDeclaration2( 734 MethodDeclaration method = AstTestFactory.methodDeclaration2(
765 null, 735 null,
766 null, 736 null,
767 null, 737 null,
768 null, 738 null,
769 AstTestFactory.identifier3("m"), 739 AstTestFactory.identifier3("m"),
770 AstTestFactory.formalParameterList(), 740 AstTestFactory.formalParameterList(),
771 AstTestFactory.blockFunctionBody2([statement])); 741 AstTestFactory.blockFunctionBody2([statement]));
772 _setBlockBodySourceRange(method.body, 200, 220); 742 _setBlockBodySourceRange(method.body, 200, 220);
773 method.accept(builder); 743 method.accept(builder);
774 744
775 List<MethodElement> methods = holder.methods; 745 List<MethodElement> methods = holder.methods;
776 expect(methods, hasLength(1)); 746 expect(methods, hasLength(1));
777 List<LocalVariableElement> variableElements = methods[0].localVariables; 747 LocalVariableElement variableElement = variableIdentifier.element;
778 expect(variableElements, hasLength(1));
779 LocalVariableElement variableElement = variableElements[0];
780 expect(variableElement.name, variableName); 748 expect(variableElement.name, variableName);
781 _assertVisibleRange(variableElement, 100, 110); 749 _assertVisibleRange(variableElement, 100, 110);
782 } 750 }
783 751
784 void test_visitVariableDeclaration_inForStatement() { 752 void test_visitVariableDeclaration_inForStatement() {
785 ElementHolder holder = new ElementHolder(); 753 ElementHolder holder = new ElementHolder();
786 ElementBuilder builder = _makeBuilder(holder); 754 ElementBuilder builder = _makeBuilder(holder);
787 // 755 //
788 // m() { for (T v;;) } 756 // m() { for (T v;;) }
789 // 757 //
790 String variableName = "v"; 758 String variableName = "v";
759 VariableDeclaration variableIdentifier =
760 AstTestFactory.variableDeclaration('v');
791 ForStatement statement = AstTestFactory.forStatement2( 761 ForStatement statement = AstTestFactory.forStatement2(
792 AstTestFactory.variableDeclarationList( 762 AstTestFactory.variableDeclarationList(
793 null, 763 null, AstTestFactory.typeName4('T'), [variableIdentifier]),
794 AstTestFactory.typeName4('T'),
795 [AstTestFactory.variableDeclaration('v')]),
796 null, 764 null,
797 null, 765 null,
798 AstTestFactory.block()); 766 AstTestFactory.block());
799 _setNodeSourceRange(statement, 100, 110); 767 _setNodeSourceRange(statement, 100, 110);
800 MethodDeclaration method = AstTestFactory.methodDeclaration2( 768 MethodDeclaration method = AstTestFactory.methodDeclaration2(
801 null, 769 null,
802 null, 770 null,
803 null, 771 null,
804 null, 772 null,
805 AstTestFactory.identifier3("m"), 773 AstTestFactory.identifier3("m"),
806 AstTestFactory.formalParameterList(), 774 AstTestFactory.formalParameterList(),
807 AstTestFactory.blockFunctionBody2([statement])); 775 AstTestFactory.blockFunctionBody2([statement]));
808 _setBlockBodySourceRange(method.body, 200, 220); 776 _setBlockBodySourceRange(method.body, 200, 220);
809 method.accept(builder); 777 method.accept(builder);
810 778
811 List<MethodElement> methods = holder.methods; 779 List<MethodElement> methods = holder.methods;
812 expect(methods, hasLength(1)); 780 expect(methods, hasLength(1));
813 List<LocalVariableElement> variableElements = methods[0].localVariables; 781 LocalVariableElement variableElement = variableIdentifier.element;
814 expect(variableElements, hasLength(1));
815 LocalVariableElement variableElement = variableElements[0];
816 expect(variableElement.name, variableName); 782 expect(variableElement.name, variableName);
817 _assertVisibleRange(variableElement, 100, 110); 783 _assertVisibleRange(variableElement, 100, 110);
818 } 784 }
819 785
820 void test_visitVariableDeclaration_inMethod() { 786 void test_visitVariableDeclaration_inMethod() {
821 ElementHolder holder = new ElementHolder(); 787 ElementHolder holder = new ElementHolder();
822 ElementBuilder builder = _makeBuilder(holder); 788 ElementBuilder builder = _makeBuilder(holder);
823 // 789 //
824 // m() {T v;} 790 // m() {T v;}
825 // 791 //
826 String variableName = "v"; 792 String variableName = "v";
827 VariableDeclaration variable = 793 VariableDeclaration variable =
828 AstTestFactory.variableDeclaration2(variableName, null); 794 AstTestFactory.variableDeclaration2(variableName, null);
829 Statement statement = AstTestFactory.variableDeclarationStatement( 795 Statement statement = AstTestFactory.variableDeclarationStatement(
830 null, AstTestFactory.typeName4('T'), [variable]); 796 null, AstTestFactory.typeName4('T'), [variable]);
831 MethodDeclaration method = AstTestFactory.methodDeclaration2( 797 MethodDeclaration method = AstTestFactory.methodDeclaration2(
832 null, 798 null,
833 null, 799 null,
834 null, 800 null,
835 null, 801 null,
836 AstTestFactory.identifier3("m"), 802 AstTestFactory.identifier3("m"),
837 AstTestFactory.formalParameterList(), 803 AstTestFactory.formalParameterList(),
838 AstTestFactory.blockFunctionBody2([statement])); 804 AstTestFactory.blockFunctionBody2([statement]));
839 _setBlockBodySourceRange(method.body, 100, 110); 805 _setBlockBodySourceRange(method.body, 100, 110);
840 method.accept(builder); 806 method.accept(builder);
841 807
842 List<MethodElement> methods = holder.methods; 808 List<MethodElement> methods = holder.methods;
843 expect(methods, hasLength(1)); 809 expect(methods, hasLength(1));
844 List<LocalVariableElement> variableElements = methods[0].localVariables; 810 LocalVariableElement variableElement = variable.element;
845 expect(variableElements, hasLength(1));
846 LocalVariableElement variableElement = variableElements[0];
847 expect(variableElement.hasImplicitType, isFalse); 811 expect(variableElement.hasImplicitType, isFalse);
848 expect(variableElement.name, variableName); 812 expect(variableElement.name, variableName);
849 _assertVisibleRange(variableElement, 100, 110); 813 _assertVisibleRange(variableElement, 100, 110);
850 } 814 }
851 815
852 void test_visitVariableDeclaration_localNestedInFunction() { 816 void test_visitVariableDeclaration_localNestedInFunction() {
853 ElementHolder holder = new ElementHolder(); 817 ElementHolder holder = new ElementHolder();
854 ElementBuilder builder = _makeBuilder(holder); 818 ElementBuilder builder = _makeBuilder(holder);
855 // 819 //
856 // var f = () {var v;}; 820 // var f = () {var v;};
(...skipping 15 matching lines...) Expand all
872 836
873 List<FieldElement> variables = holder.fields; 837 List<FieldElement> variables = holder.fields;
874 expect(variables, hasLength(1)); 838 expect(variables, hasLength(1));
875 FieldElement fieldElement = variables[0]; 839 FieldElement fieldElement = variables[0];
876 expect(fieldElement, isNotNull); 840 expect(fieldElement, isNotNull);
877 FunctionElement initializerElement = fieldElement.initializer; 841 FunctionElement initializerElement = fieldElement.initializer;
878 expect(initializerElement, isNotNull); 842 expect(initializerElement, isNotNull);
879 expect(initializerElement.hasImplicitReturnType, isTrue); 843 expect(initializerElement.hasImplicitReturnType, isTrue);
880 List<FunctionElement> functionElements = initializerElement.functions; 844 List<FunctionElement> functionElements = initializerElement.functions;
881 expect(functionElements, hasLength(1)); 845 expect(functionElements, hasLength(1));
882 List<LocalVariableElement> variableElements = 846 LocalVariableElement variableElement = variable.element;
883 functionElements[0].localVariables;
884 expect(variableElements, hasLength(1));
885 LocalVariableElement variableElement = variableElements[0];
886 expect(variableElement.hasImplicitType, isTrue); 847 expect(variableElement.hasImplicitType, isTrue);
887 expect(variableElement.isConst, isFalse); 848 expect(variableElement.isConst, isFalse);
888 expect(variableElement.isFinal, isFalse); 849 expect(variableElement.isFinal, isFalse);
889 expect(variableElement.isSynthetic, isFalse); 850 expect(variableElement.isSynthetic, isFalse);
890 expect(variableElement.name, variableName); 851 expect(variableElement.name, variableName);
891 } 852 }
892 853
893 void test_visitVariableDeclaration_noInitializer() { 854 void test_visitVariableDeclaration_noInitializer() {
894 // var v; 855 // var v;
895 ElementHolder holder = new ElementHolder(); 856 ElementHolder holder = new ElementHolder();
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 } 985 }
1025 986
1026 @reflectiveTest 987 @reflectiveTest
1027 class LocalElementBuilderTest extends _BaseTest { 988 class LocalElementBuilderTest extends _BaseTest {
1028 @override 989 @override
1029 AstVisitor createElementBuilder(ElementHolder holder) { 990 AstVisitor createElementBuilder(ElementHolder holder) {
1030 return new LocalElementBuilder(holder, compilationUnitElement); 991 return new LocalElementBuilder(holder, compilationUnitElement);
1031 } 992 }
1032 993
1033 void test_buildLocalElements() { 994 void test_buildLocalElements() {
1034 CompilationUnit unit = parseCompilationUnit(r''' 995 var code = r'''
1035 main() { 996 main() {
1036 int v1; 997 int v1;
1037 f1() { 998 f1() {
1038 int v2; 999 int v2;
1039 f2() { 1000 f2() {
1040 int v3; 1001 int v3;
1041 } 1002 }
1042 } 1003 }
1043 } 1004 }
1044 '''); 1005 ''';
1045 var mainAst = unit.declarations.single as FunctionDeclaration; 1006 _compilationUnit = parseCompilationUnit(code);
1007 var mainAst = _compilationUnit.declarations.single as FunctionDeclaration;
1008
1046 // Build API elements. 1009 // Build API elements.
1047 FunctionElementImpl main; 1010 FunctionElementImpl main;
1048 { 1011 {
1049 ElementHolder holder = new ElementHolder(); 1012 ElementHolder holder = new ElementHolder();
1050 unit.accept(new ApiElementBuilder(holder, compilationUnitElement)); 1013 _compilationUnit
1014 .accept(new ApiElementBuilder(holder, compilationUnitElement));
1051 main = holder.functions.single as FunctionElementImpl; 1015 main = holder.functions.single as FunctionElementImpl;
1052 } 1016 }
1053 expect(main.localVariables, isEmpty);
1054 expect(main.functions, isEmpty); 1017 expect(main.functions, isEmpty);
1018
1055 // Build local elements in body. 1019 // Build local elements in body.
1056 ElementHolder holder = new ElementHolder(); 1020 ElementHolder holder = new ElementHolder();
1057 FunctionBody mainBody = mainAst.functionExpression.body; 1021 FunctionBody mainBody = mainAst.functionExpression.body;
1058 mainBody.accept(new LocalElementBuilder(holder, compilationUnitElement)); 1022 mainBody.accept(new LocalElementBuilder(holder, compilationUnitElement));
1059 main.functions = holder.functions; 1023 main.functions = holder.functions;
1060 main.localVariables = holder.localVariables; 1024 main.localVariables = holder.localVariables;
1061 expect(main.localVariables.map((v) => v.name), ['v1']); 1025
1026 var v1 = findLocalVariable(code, 'v1;');
1027 var v2 = findLocalVariable(code, 'v2;');
1028 var v3 = findLocalVariable(code, 'v3;');
1029
1030 expect(v1.enclosingElement, main);
1062 expect(main.functions, hasLength(1)); 1031 expect(main.functions, hasLength(1));
1063 { 1032 {
1064 FunctionElement f1 = main.functions[0]; 1033 FunctionElement f1 = main.functions[0];
1065 expect(f1.name, 'f1'); 1034 expect(f1.name, 'f1');
1066 expect(f1.localVariables.map((v) => v.name), ['v2']); 1035 expect(v2.enclosingElement, f1);
1067 expect(f1.functions, hasLength(1)); 1036 expect(f1.functions, hasLength(1));
1068 { 1037 {
1069 FunctionElement f2 = f1.functions[0]; 1038 FunctionElement f2 = f1.functions[0];
1070 expect(f2.name, 'f2'); 1039 expect(f2.name, 'f2');
1071 expect(f2.localVariables.map((v) => v.name), ['v3']); 1040 expect(v3.enclosingElement, f2);
1072 expect(f2.functions, isEmpty); 1041 expect(f2.functions, isEmpty);
1073 } 1042 }
1074 } 1043 }
1075 } 1044 }
1076 1045
1077 void test_buildParameterInitializer() { 1046 void test_buildParameterInitializer() {
1078 CompilationUnit unit = parseCompilationUnit('f({p: 42}) {}'); 1047 CompilationUnit unit = parseCompilationUnit('f({p: 42}) {}');
1079 var function = unit.declarations.single as FunctionDeclaration; 1048 var function = unit.declarations.single as FunctionDeclaration;
1080 var parameter = function.functionExpression.parameters.parameters.single 1049 var parameter = function.functionExpression.parameters.parameters.single
1081 as DefaultFormalParameter; 1050 as DefaultFormalParameter;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1139 { 1108 {
1140 ElementHolder holder = new ElementHolder(); 1109 ElementHolder holder = new ElementHolder();
1141 unit.accept(new ApiElementBuilder(holder, compilationUnitElement)); 1110 unit.accept(new ApiElementBuilder(holder, compilationUnitElement));
1142 main = holder.functions.single as FunctionElementImpl; 1111 main = holder.functions.single as FunctionElementImpl;
1143 } 1112 }
1144 // Build local elements in body. 1113 // Build local elements in body.
1145 ElementHolder holder = new ElementHolder(); 1114 ElementHolder holder = new ElementHolder();
1146 FunctionBody mainBody = mainAst.functionExpression.body; 1115 FunctionBody mainBody = mainAst.functionExpression.body;
1147 mainBody.accept(new LocalElementBuilder(holder, compilationUnitElement)); 1116 mainBody.accept(new LocalElementBuilder(holder, compilationUnitElement));
1148 main.functions = holder.functions; 1117 main.functions = holder.functions;
1149 main.localVariables = holder.localVariables;
1150 expect(main.functions, hasLength(1)); 1118 expect(main.functions, hasLength(1));
1151 FunctionElement f = main.functions[0]; 1119 FunctionElement f = main.functions[0];
1152 expect(f.parameters, hasLength(1)); 1120 expect(f.parameters, hasLength(1));
1153 expect(f.parameters[0].initializer, isNotNull); 1121 expect(f.parameters[0].initializer, isNotNull);
1154 } 1122 }
1155 1123
1156 void test_visitFieldFormalParameter() { 1124 void test_visitFieldFormalParameter() {
1157 CompilationUnit unit = parseCompilationUnit( 1125 CompilationUnit unit = parseCompilationUnit(
1158 r''' 1126 r'''
1159 main() { 1127 main() {
(...skipping 24 matching lines...) Expand all
1184 ParameterElement a = parameters[0].element; 1152 ParameterElement a = parameters[0].element;
1185 expect(a, isNotNull); 1153 expect(a, isNotNull);
1186 expect(a.name, 'a'); 1154 expect(a.name, 'a');
1187 1155
1188 ParameterElement b = parameters[1].element; 1156 ParameterElement b = parameters[1].element;
1189 expect(b, isNotNull); 1157 expect(b, isNotNull);
1190 expect(b.name, 'b'); 1158 expect(b.name, 'b');
1191 } 1159 }
1192 1160
1193 void test_visitVariableDeclaration_local() { 1161 void test_visitVariableDeclaration_local() {
1194 var holder = buildElementsForText('class C { m() { T v = null; } }'); 1162 var code = 'class C { m() { T v = null; } }';
1195 List<LocalVariableElement> variableElements = holder.localVariables; 1163 buildElementsForText(code);
1196 expect(variableElements, hasLength(1)); 1164 LocalVariableElement element = findIdentifier(code, 'v =').staticElement;
1197 LocalVariableElement variableElement = variableElements[0]; 1165 expect(element.hasImplicitType, isFalse);
1198 expect(variableElement.hasImplicitType, isFalse); 1166 expect(element.name, 'v');
1199 expect(variableElement.name, 'v'); 1167 expect(element.initializer, isNotNull);
1200 expect(variableElement.initializer, isNotNull); 1168 _assertVisibleRange(element, 14, 29);
1201 _assertVisibleRange(variableElement, 14, 29);
1202 } 1169 }
1203 } 1170 }
1204 1171
1205 /** 1172 /**
1206 * Mixin with test methods for testing element building in [ApiElementBuilder]. 1173 * Mixin with test methods for testing element building in [ApiElementBuilder].
1207 * It is used to test the [ApiElementBuilder] itself, and its usage by 1174 * It is used to test the [ApiElementBuilder] itself, and its usage by
1208 * [ElementBuilder]. 1175 * [ElementBuilder].
1209 */ 1176 */
1210 abstract class _ApiElementBuilderTestMixin { 1177 abstract class _ApiElementBuilderTestMixin {
1211 CompilationUnit get compilationUnit; 1178 CompilationUnit get compilationUnit;
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
1667 ElementHolder holder = buildElementsForAst(constructorDeclaration); 1634 ElementHolder holder = buildElementsForAst(constructorDeclaration);
1668 List<ConstructorElement> constructors = holder.constructors; 1635 List<ConstructorElement> constructors = holder.constructors;
1669 expect(constructors, hasLength(1)); 1636 expect(constructors, hasLength(1));
1670 ConstructorElement constructor = constructors[0]; 1637 ConstructorElement constructor = constructors[0];
1671 expect(constructor, isNotNull); 1638 expect(constructor, isNotNull);
1672 expect(constructor.isExternal, isTrue); 1639 expect(constructor.isExternal, isTrue);
1673 expect(constructor.isFactory, isFalse); 1640 expect(constructor.isFactory, isFalse);
1674 expect(constructor.name, ""); 1641 expect(constructor.name, "");
1675 expect(constructor.functions, hasLength(0)); 1642 expect(constructor.functions, hasLength(0));
1676 expect(constructor.labels, hasLength(0)); 1643 expect(constructor.labels, hasLength(0));
1677 expect(constructor.localVariables, hasLength(0));
1678 expect(constructor.parameters, hasLength(0)); 1644 expect(constructor.parameters, hasLength(0));
1679 } 1645 }
1680 1646
1681 void test_visitConstructorDeclaration_factory() { 1647 void test_visitConstructorDeclaration_factory() {
1682 String className = "A"; 1648 String className = "A";
1683 ConstructorDeclaration constructorDeclaration = 1649 ConstructorDeclaration constructorDeclaration =
1684 AstTestFactory.constructorDeclaration2( 1650 AstTestFactory.constructorDeclaration2(
1685 null, 1651 null,
1686 Keyword.FACTORY, 1652 Keyword.FACTORY,
1687 AstTestFactory.identifier3(className), 1653 AstTestFactory.identifier3(className),
1688 null, 1654 null,
1689 AstTestFactory.formalParameterList(), 1655 AstTestFactory.formalParameterList(),
1690 null, 1656 null,
1691 AstTestFactory.blockFunctionBody2()); 1657 AstTestFactory.blockFunctionBody2());
1692 1658
1693 ElementHolder holder = buildElementsForAst(constructorDeclaration); 1659 ElementHolder holder = buildElementsForAst(constructorDeclaration);
1694 List<ConstructorElement> constructors = holder.constructors; 1660 List<ConstructorElement> constructors = holder.constructors;
1695 expect(constructors, hasLength(1)); 1661 expect(constructors, hasLength(1));
1696 ConstructorElement constructor = constructors[0]; 1662 ConstructorElement constructor = constructors[0];
1697 expect(constructor, isNotNull); 1663 expect(constructor, isNotNull);
1698 expect(constructor.isExternal, isFalse); 1664 expect(constructor.isExternal, isFalse);
1699 expect(constructor.isFactory, isTrue); 1665 expect(constructor.isFactory, isTrue);
1700 expect(constructor.name, ""); 1666 expect(constructor.name, "");
1701 expect(constructor.functions, hasLength(0)); 1667 expect(constructor.functions, hasLength(0));
1702 expect(constructor.labels, hasLength(0)); 1668 expect(constructor.labels, hasLength(0));
1703 expect(constructor.localVariables, hasLength(0));
1704 expect(constructor.parameters, hasLength(0)); 1669 expect(constructor.parameters, hasLength(0));
1705 } 1670 }
1706 1671
1707 void test_visitConstructorDeclaration_minimal() { 1672 void test_visitConstructorDeclaration_minimal() {
1708 String className = "A"; 1673 String className = "A";
1709 ConstructorDeclaration constructorDeclaration = 1674 ConstructorDeclaration constructorDeclaration =
1710 AstTestFactory.constructorDeclaration2( 1675 AstTestFactory.constructorDeclaration2(
1711 null, 1676 null,
1712 null, 1677 null,
1713 AstTestFactory.identifier3(className), 1678 AstTestFactory.identifier3(className),
(...skipping 11 matching lines...) Expand all
1725 expect(constructors, hasLength(1)); 1690 expect(constructors, hasLength(1));
1726 ConstructorElement constructor = constructors[0]; 1691 ConstructorElement constructor = constructors[0];
1727 expect(constructor, isNotNull); 1692 expect(constructor, isNotNull);
1728 assertHasCodeRange(constructor, 50, 31); 1693 assertHasCodeRange(constructor, 50, 31);
1729 expect(constructor.documentationComment, '/// aaa'); 1694 expect(constructor.documentationComment, '/// aaa');
1730 expect(constructor.isExternal, isFalse); 1695 expect(constructor.isExternal, isFalse);
1731 expect(constructor.isFactory, isFalse); 1696 expect(constructor.isFactory, isFalse);
1732 expect(constructor.name, ""); 1697 expect(constructor.name, "");
1733 expect(constructor.functions, hasLength(0)); 1698 expect(constructor.functions, hasLength(0));
1734 expect(constructor.labels, hasLength(0)); 1699 expect(constructor.labels, hasLength(0));
1735 expect(constructor.localVariables, hasLength(0));
1736 expect(constructor.parameters, hasLength(0)); 1700 expect(constructor.parameters, hasLength(0));
1737 } 1701 }
1738 1702
1739 void test_visitConstructorDeclaration_named() { 1703 void test_visitConstructorDeclaration_named() {
1740 String className = "A"; 1704 String className = "A";
1741 String constructorName = "c"; 1705 String constructorName = "c";
1742 ConstructorDeclaration constructorDeclaration = 1706 ConstructorDeclaration constructorDeclaration =
1743 AstTestFactory.constructorDeclaration2( 1707 AstTestFactory.constructorDeclaration2(
1744 null, 1708 null,
1745 null, 1709 null,
1746 AstTestFactory.identifier3(className), 1710 AstTestFactory.identifier3(className),
1747 constructorName, 1711 constructorName,
1748 AstTestFactory.formalParameterList(), 1712 AstTestFactory.formalParameterList(),
1749 null, 1713 null,
1750 AstTestFactory.blockFunctionBody2()); 1714 AstTestFactory.blockFunctionBody2());
1751 1715
1752 ElementHolder holder = buildElementsForAst(constructorDeclaration); 1716 ElementHolder holder = buildElementsForAst(constructorDeclaration);
1753 List<ConstructorElement> constructors = holder.constructors; 1717 List<ConstructorElement> constructors = holder.constructors;
1754 expect(constructors, hasLength(1)); 1718 expect(constructors, hasLength(1));
1755 ConstructorElement constructor = constructors[0]; 1719 ConstructorElement constructor = constructors[0];
1756 expect(constructor, isNotNull); 1720 expect(constructor, isNotNull);
1757 expect(constructor.isExternal, isFalse); 1721 expect(constructor.isExternal, isFalse);
1758 expect(constructor.isFactory, isFalse); 1722 expect(constructor.isFactory, isFalse);
1759 expect(constructor.name, constructorName); 1723 expect(constructor.name, constructorName);
1760 expect(constructor.functions, hasLength(0)); 1724 expect(constructor.functions, hasLength(0));
1761 expect(constructor.labels, hasLength(0)); 1725 expect(constructor.labels, hasLength(0));
1762 expect(constructor.localVariables, hasLength(0));
1763 expect(constructor.parameters, hasLength(0)); 1726 expect(constructor.parameters, hasLength(0));
1764 expect(constructorDeclaration.name.staticElement, same(constructor)); 1727 expect(constructorDeclaration.name.staticElement, same(constructor));
1765 expect(constructorDeclaration.element, same(constructor)); 1728 expect(constructorDeclaration.element, same(constructor));
1766 } 1729 }
1767 1730
1768 void test_visitConstructorDeclaration_unnamed() { 1731 void test_visitConstructorDeclaration_unnamed() {
1769 String className = "A"; 1732 String className = "A";
1770 ConstructorDeclaration constructorDeclaration = 1733 ConstructorDeclaration constructorDeclaration =
1771 AstTestFactory.constructorDeclaration2( 1734 AstTestFactory.constructorDeclaration2(
1772 null, 1735 null,
1773 null, 1736 null,
1774 AstTestFactory.identifier3(className), 1737 AstTestFactory.identifier3(className),
1775 null, 1738 null,
1776 AstTestFactory.formalParameterList(), 1739 AstTestFactory.formalParameterList(),
1777 null, 1740 null,
1778 AstTestFactory.blockFunctionBody2()); 1741 AstTestFactory.blockFunctionBody2());
1779 1742
1780 ElementHolder holder = buildElementsForAst(constructorDeclaration); 1743 ElementHolder holder = buildElementsForAst(constructorDeclaration);
1781 List<ConstructorElement> constructors = holder.constructors; 1744 List<ConstructorElement> constructors = holder.constructors;
1782 expect(constructors, hasLength(1)); 1745 expect(constructors, hasLength(1));
1783 ConstructorElement constructor = constructors[0]; 1746 ConstructorElement constructor = constructors[0];
1784 expect(constructor, isNotNull); 1747 expect(constructor, isNotNull);
1785 expect(constructor.isExternal, isFalse); 1748 expect(constructor.isExternal, isFalse);
1786 expect(constructor.isFactory, isFalse); 1749 expect(constructor.isFactory, isFalse);
1787 expect(constructor.name, ""); 1750 expect(constructor.name, "");
1788 expect(constructor.functions, hasLength(0)); 1751 expect(constructor.functions, hasLength(0));
1789 expect(constructor.labels, hasLength(0)); 1752 expect(constructor.labels, hasLength(0));
1790 expect(constructor.localVariables, hasLength(0));
1791 expect(constructor.parameters, hasLength(0)); 1753 expect(constructor.parameters, hasLength(0));
1792 expect(constructorDeclaration.element, same(constructor)); 1754 expect(constructorDeclaration.element, same(constructor));
1793 } 1755 }
1794 1756
1795 void test_visitEnumDeclaration() { 1757 void test_visitEnumDeclaration() {
1796 String enumName = "E"; 1758 String enumName = "E";
1797 EnumDeclaration enumDeclaration = 1759 EnumDeclaration enumDeclaration =
1798 AstTestFactory.enumDeclaration2(enumName, ["ONE"]); 1760 AstTestFactory.enumDeclaration2(enumName, ["ONE"]);
1799 enumDeclaration.documentationComment = AstTestFactory.documentationComment( 1761 enumDeclaration.documentationComment = AstTestFactory.documentationComment(
1800 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []); 1762 [TokenFactory.tokenFromString('/// aaa')..offset = 50], []);
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
2071 2033
2072 ElementHolder holder = buildElementsForAst(methodDeclaration); 2034 ElementHolder holder = buildElementsForAst(methodDeclaration);
2073 List<MethodElement> methods = holder.methods; 2035 List<MethodElement> methods = holder.methods;
2074 expect(methods, hasLength(1)); 2036 expect(methods, hasLength(1));
2075 MethodElement method = methods[0]; 2037 MethodElement method = methods[0];
2076 expect(method, isNotNull); 2038 expect(method, isNotNull);
2077 expect(method.hasImplicitReturnType, isTrue); 2039 expect(method.hasImplicitReturnType, isTrue);
2078 expect(method.name, methodName); 2040 expect(method.name, methodName);
2079 expect(method.functions, hasLength(0)); 2041 expect(method.functions, hasLength(0));
2080 expect(method.labels, hasLength(0)); 2042 expect(method.labels, hasLength(0));
2081 expect(method.localVariables, hasLength(0));
2082 expect(method.parameters, hasLength(0)); 2043 expect(method.parameters, hasLength(0));
2083 expect(method.typeParameters, hasLength(0)); 2044 expect(method.typeParameters, hasLength(0));
2084 expect(method.isAbstract, isTrue); 2045 expect(method.isAbstract, isTrue);
2085 expect(method.isExternal, isFalse); 2046 expect(method.isExternal, isFalse);
2086 expect(method.isStatic, isFalse); 2047 expect(method.isStatic, isFalse);
2087 expect(method.isSynthetic, isFalse); 2048 expect(method.isSynthetic, isFalse);
2088 } 2049 }
2089 2050
2090 void test_visitMethodDeclaration_duplicateField_synthetic() { 2051 void test_visitMethodDeclaration_duplicateField_synthetic() {
2091 buildElementsForText(r''' 2052 buildElementsForText(r'''
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
2140 2101
2141 ElementHolder holder = buildElementsForAst(methodDeclaration); 2102 ElementHolder holder = buildElementsForAst(methodDeclaration);
2142 List<MethodElement> methods = holder.methods; 2103 List<MethodElement> methods = holder.methods;
2143 expect(methods, hasLength(1)); 2104 expect(methods, hasLength(1));
2144 MethodElement method = methods[0]; 2105 MethodElement method = methods[0];
2145 expect(method, isNotNull); 2106 expect(method, isNotNull);
2146 expect(method.hasImplicitReturnType, isTrue); 2107 expect(method.hasImplicitReturnType, isTrue);
2147 expect(method.name, methodName); 2108 expect(method.name, methodName);
2148 expect(method.functions, hasLength(0)); 2109 expect(method.functions, hasLength(0));
2149 expect(method.labels, hasLength(0)); 2110 expect(method.labels, hasLength(0));
2150 expect(method.localVariables, hasLength(0));
2151 expect(method.parameters, hasLength(0)); 2111 expect(method.parameters, hasLength(0));
2152 expect(method.typeParameters, hasLength(0)); 2112 expect(method.typeParameters, hasLength(0));
2153 expect(method.isAbstract, isFalse); 2113 expect(method.isAbstract, isFalse);
2154 expect(method.isExternal, isTrue); 2114 expect(method.isExternal, isTrue);
2155 expect(method.isStatic, isFalse); 2115 expect(method.isStatic, isFalse);
2156 expect(method.isSynthetic, isFalse); 2116 expect(method.isSynthetic, isFalse);
2157 } 2117 }
2158 2118
2159 void test_visitMethodDeclaration_getter() { 2119 void test_visitMethodDeclaration_getter() {
2160 // get m() {} 2120 // get m() {}
(...skipping 25 matching lines...) Expand all
2186 expect(getter.documentationComment, '/// aaa'); 2146 expect(getter.documentationComment, '/// aaa');
2187 expect(getter.hasImplicitReturnType, isTrue); 2147 expect(getter.hasImplicitReturnType, isTrue);
2188 expect(getter.isAbstract, isFalse); 2148 expect(getter.isAbstract, isFalse);
2189 expect(getter.isExternal, isFalse); 2149 expect(getter.isExternal, isFalse);
2190 expect(getter.isGetter, isTrue); 2150 expect(getter.isGetter, isTrue);
2191 expect(getter.isSynthetic, isFalse); 2151 expect(getter.isSynthetic, isFalse);
2192 expect(getter.name, methodName); 2152 expect(getter.name, methodName);
2193 expect(getter.variable, field); 2153 expect(getter.variable, field);
2194 expect(getter.functions, hasLength(0)); 2154 expect(getter.functions, hasLength(0));
2195 expect(getter.labels, hasLength(0)); 2155 expect(getter.labels, hasLength(0));
2196 expect(getter.localVariables, hasLength(0));
2197 expect(getter.parameters, hasLength(0)); 2156 expect(getter.parameters, hasLength(0));
2198 } 2157 }
2199 2158
2200 void test_visitMethodDeclaration_getter_abstract() { 2159 void test_visitMethodDeclaration_getter_abstract() {
2201 // get m(); 2160 // get m();
2202 String methodName = "m"; 2161 String methodName = "m";
2203 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration2( 2162 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration2(
2204 null, 2163 null,
2205 null, 2164 null,
2206 Keyword.GET, 2165 Keyword.GET,
(...skipping 14 matching lines...) Expand all
2221 expect(getter, isNotNull); 2180 expect(getter, isNotNull);
2222 expect(getter.hasImplicitReturnType, isTrue); 2181 expect(getter.hasImplicitReturnType, isTrue);
2223 expect(getter.isAbstract, isTrue); 2182 expect(getter.isAbstract, isTrue);
2224 expect(getter.isExternal, isFalse); 2183 expect(getter.isExternal, isFalse);
2225 expect(getter.isGetter, isTrue); 2184 expect(getter.isGetter, isTrue);
2226 expect(getter.isSynthetic, isFalse); 2185 expect(getter.isSynthetic, isFalse);
2227 expect(getter.name, methodName); 2186 expect(getter.name, methodName);
2228 expect(getter.variable, field); 2187 expect(getter.variable, field);
2229 expect(getter.functions, hasLength(0)); 2188 expect(getter.functions, hasLength(0));
2230 expect(getter.labels, hasLength(0)); 2189 expect(getter.labels, hasLength(0));
2231 expect(getter.localVariables, hasLength(0));
2232 expect(getter.parameters, hasLength(0)); 2190 expect(getter.parameters, hasLength(0));
2233 } 2191 }
2234 2192
2235 void test_visitMethodDeclaration_getter_external() { 2193 void test_visitMethodDeclaration_getter_external() {
2236 // external get m(); 2194 // external get m();
2237 String methodName = "m"; 2195 String methodName = "m";
2238 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration( 2196 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration(
2239 null, 2197 null,
2240 null, 2198 null,
2241 Keyword.GET, 2199 Keyword.GET,
(...skipping 15 matching lines...) Expand all
2257 expect(getter, isNotNull); 2215 expect(getter, isNotNull);
2258 expect(getter.hasImplicitReturnType, isTrue); 2216 expect(getter.hasImplicitReturnType, isTrue);
2259 expect(getter.isAbstract, isFalse); 2217 expect(getter.isAbstract, isFalse);
2260 expect(getter.isExternal, isTrue); 2218 expect(getter.isExternal, isTrue);
2261 expect(getter.isGetter, isTrue); 2219 expect(getter.isGetter, isTrue);
2262 expect(getter.isSynthetic, isFalse); 2220 expect(getter.isSynthetic, isFalse);
2263 expect(getter.name, methodName); 2221 expect(getter.name, methodName);
2264 expect(getter.variable, field); 2222 expect(getter.variable, field);
2265 expect(getter.functions, hasLength(0)); 2223 expect(getter.functions, hasLength(0));
2266 expect(getter.labels, hasLength(0)); 2224 expect(getter.labels, hasLength(0));
2267 expect(getter.localVariables, hasLength(0));
2268 expect(getter.parameters, hasLength(0)); 2225 expect(getter.parameters, hasLength(0));
2269 } 2226 }
2270 2227
2271 void test_visitMethodDeclaration_minimal() { 2228 void test_visitMethodDeclaration_minimal() {
2272 // T m() {} 2229 // T m() {}
2273 String methodName = "m"; 2230 String methodName = "m";
2274 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration2( 2231 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration2(
2275 null, 2232 null,
2276 AstTestFactory.typeName4('T'), 2233 AstTestFactory.typeName4('T'),
2277 null, 2234 null,
(...skipping 10 matching lines...) Expand all
2288 List<MethodElement> methods = holder.methods; 2245 List<MethodElement> methods = holder.methods;
2289 expect(methods, hasLength(1)); 2246 expect(methods, hasLength(1));
2290 MethodElement method = methods[0]; 2247 MethodElement method = methods[0];
2291 expect(method, isNotNull); 2248 expect(method, isNotNull);
2292 assertHasCodeRange(method, 50, 31); 2249 assertHasCodeRange(method, 50, 31);
2293 expect(method.documentationComment, '/// aaa'); 2250 expect(method.documentationComment, '/// aaa');
2294 expect(method.hasImplicitReturnType, isFalse); 2251 expect(method.hasImplicitReturnType, isFalse);
2295 expect(method.name, methodName); 2252 expect(method.name, methodName);
2296 expect(method.functions, hasLength(0)); 2253 expect(method.functions, hasLength(0));
2297 expect(method.labels, hasLength(0)); 2254 expect(method.labels, hasLength(0));
2298 expect(method.localVariables, hasLength(0));
2299 expect(method.parameters, hasLength(0)); 2255 expect(method.parameters, hasLength(0));
2300 expect(method.typeParameters, hasLength(0)); 2256 expect(method.typeParameters, hasLength(0));
2301 expect(method.isAbstract, isFalse); 2257 expect(method.isAbstract, isFalse);
2302 expect(method.isExternal, isFalse); 2258 expect(method.isExternal, isFalse);
2303 expect(method.isStatic, isFalse); 2259 expect(method.isStatic, isFalse);
2304 expect(method.isSynthetic, isFalse); 2260 expect(method.isSynthetic, isFalse);
2305 } 2261 }
2306 2262
2307 void test_visitMethodDeclaration_operator() { 2263 void test_visitMethodDeclaration_operator() {
2308 // operator +(addend) {} 2264 // operator +(addend) {}
(...skipping 10 matching lines...) Expand all
2319 2275
2320 ElementHolder holder = buildElementsForAst(methodDeclaration); 2276 ElementHolder holder = buildElementsForAst(methodDeclaration);
2321 List<MethodElement> methods = holder.methods; 2277 List<MethodElement> methods = holder.methods;
2322 expect(methods, hasLength(1)); 2278 expect(methods, hasLength(1));
2323 MethodElement method = methods[0]; 2279 MethodElement method = methods[0];
2324 expect(method, isNotNull); 2280 expect(method, isNotNull);
2325 expect(method.hasImplicitReturnType, isTrue); 2281 expect(method.hasImplicitReturnType, isTrue);
2326 expect(method.name, methodName); 2282 expect(method.name, methodName);
2327 expect(method.functions, hasLength(0)); 2283 expect(method.functions, hasLength(0));
2328 expect(method.labels, hasLength(0)); 2284 expect(method.labels, hasLength(0));
2329 expect(method.localVariables, hasLength(0));
2330 expect(method.parameters, hasLength(1)); 2285 expect(method.parameters, hasLength(1));
2331 expect(method.typeParameters, hasLength(0)); 2286 expect(method.typeParameters, hasLength(0));
2332 expect(method.isAbstract, isFalse); 2287 expect(method.isAbstract, isFalse);
2333 expect(method.isExternal, isFalse); 2288 expect(method.isExternal, isFalse);
2334 expect(method.isStatic, isFalse); 2289 expect(method.isStatic, isFalse);
2335 expect(method.isSynthetic, isFalse); 2290 expect(method.isSynthetic, isFalse);
2336 } 2291 }
2337 2292
2338 void test_visitMethodDeclaration_setter() { 2293 void test_visitMethodDeclaration_setter() {
2339 // set m() {} 2294 // set m() {}
(...skipping 27 matching lines...) Expand all
2367 expect(setter.hasImplicitReturnType, isTrue); 2322 expect(setter.hasImplicitReturnType, isTrue);
2368 expect(setter.isAbstract, isFalse); 2323 expect(setter.isAbstract, isFalse);
2369 expect(setter.isExternal, isFalse); 2324 expect(setter.isExternal, isFalse);
2370 expect(setter.isSetter, isTrue); 2325 expect(setter.isSetter, isTrue);
2371 expect(setter.isSynthetic, isFalse); 2326 expect(setter.isSynthetic, isFalse);
2372 expect(setter.name, "$methodName="); 2327 expect(setter.name, "$methodName=");
2373 expect(setter.displayName, methodName); 2328 expect(setter.displayName, methodName);
2374 expect(setter.variable, field); 2329 expect(setter.variable, field);
2375 expect(setter.functions, hasLength(0)); 2330 expect(setter.functions, hasLength(0));
2376 expect(setter.labels, hasLength(0)); 2331 expect(setter.labels, hasLength(0));
2377 expect(setter.localVariables, hasLength(0));
2378 expect(setter.parameters, hasLength(0)); 2332 expect(setter.parameters, hasLength(0));
2379 } 2333 }
2380 2334
2381 void test_visitMethodDeclaration_setter_abstract() { 2335 void test_visitMethodDeclaration_setter_abstract() {
2382 // set m(); 2336 // set m();
2383 String methodName = "m"; 2337 String methodName = "m";
2384 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration2( 2338 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration2(
2385 null, 2339 null,
2386 null, 2340 null,
2387 Keyword.SET, 2341 Keyword.SET,
(...skipping 15 matching lines...) Expand all
2403 expect(setter.hasImplicitReturnType, isTrue); 2357 expect(setter.hasImplicitReturnType, isTrue);
2404 expect(setter.isAbstract, isTrue); 2358 expect(setter.isAbstract, isTrue);
2405 expect(setter.isExternal, isFalse); 2359 expect(setter.isExternal, isFalse);
2406 expect(setter.isSetter, isTrue); 2360 expect(setter.isSetter, isTrue);
2407 expect(setter.isSynthetic, isFalse); 2361 expect(setter.isSynthetic, isFalse);
2408 expect(setter.name, "$methodName="); 2362 expect(setter.name, "$methodName=");
2409 expect(setter.displayName, methodName); 2363 expect(setter.displayName, methodName);
2410 expect(setter.variable, field); 2364 expect(setter.variable, field);
2411 expect(setter.functions, hasLength(0)); 2365 expect(setter.functions, hasLength(0));
2412 expect(setter.labels, hasLength(0)); 2366 expect(setter.labels, hasLength(0));
2413 expect(setter.localVariables, hasLength(0));
2414 expect(setter.parameters, hasLength(0)); 2367 expect(setter.parameters, hasLength(0));
2415 } 2368 }
2416 2369
2417 void test_visitMethodDeclaration_setter_external() { 2370 void test_visitMethodDeclaration_setter_external() {
2418 // external m(); 2371 // external m();
2419 String methodName = "m"; 2372 String methodName = "m";
2420 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration( 2373 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration(
2421 null, 2374 null,
2422 null, 2375 null,
2423 Keyword.SET, 2376 Keyword.SET,
(...skipping 16 matching lines...) Expand all
2440 expect(setter.hasImplicitReturnType, isTrue); 2393 expect(setter.hasImplicitReturnType, isTrue);
2441 expect(setter.isAbstract, isFalse); 2394 expect(setter.isAbstract, isFalse);
2442 expect(setter.isExternal, isTrue); 2395 expect(setter.isExternal, isTrue);
2443 expect(setter.isSetter, isTrue); 2396 expect(setter.isSetter, isTrue);
2444 expect(setter.isSynthetic, isFalse); 2397 expect(setter.isSynthetic, isFalse);
2445 expect(setter.name, "$methodName="); 2398 expect(setter.name, "$methodName=");
2446 expect(setter.displayName, methodName); 2399 expect(setter.displayName, methodName);
2447 expect(setter.variable, field); 2400 expect(setter.variable, field);
2448 expect(setter.functions, hasLength(0)); 2401 expect(setter.functions, hasLength(0));
2449 expect(setter.labels, hasLength(0)); 2402 expect(setter.labels, hasLength(0));
2450 expect(setter.localVariables, hasLength(0));
2451 expect(setter.parameters, hasLength(0)); 2403 expect(setter.parameters, hasLength(0));
2452 } 2404 }
2453 2405
2454 void test_visitMethodDeclaration_static() { 2406 void test_visitMethodDeclaration_static() {
2455 // static m() {} 2407 // static m() {}
2456 String methodName = "m"; 2408 String methodName = "m";
2457 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration2( 2409 MethodDeclaration methodDeclaration = AstTestFactory.methodDeclaration2(
2458 Keyword.STATIC, 2410 Keyword.STATIC,
2459 null, 2411 null,
2460 null, 2412 null,
2461 null, 2413 null,
2462 AstTestFactory.identifier3(methodName), 2414 AstTestFactory.identifier3(methodName),
2463 AstTestFactory.formalParameterList(), 2415 AstTestFactory.formalParameterList(),
2464 AstTestFactory.blockFunctionBody2()); 2416 AstTestFactory.blockFunctionBody2());
2465 ElementHolder holder = buildElementsForAst(methodDeclaration); 2417 ElementHolder holder = buildElementsForAst(methodDeclaration);
2466 List<MethodElement> methods = holder.methods; 2418 List<MethodElement> methods = holder.methods;
2467 expect(methods, hasLength(1)); 2419 expect(methods, hasLength(1));
2468 MethodElement method = methods[0]; 2420 MethodElement method = methods[0];
2469 expect(method, isNotNull); 2421 expect(method, isNotNull);
2470 expect(method.hasImplicitReturnType, isTrue); 2422 expect(method.hasImplicitReturnType, isTrue);
2471 expect(method.name, methodName); 2423 expect(method.name, methodName);
2472 expect(method.functions, hasLength(0)); 2424 expect(method.functions, hasLength(0));
2473 expect(method.labels, hasLength(0)); 2425 expect(method.labels, hasLength(0));
2474 expect(method.localVariables, hasLength(0));
2475 expect(method.parameters, hasLength(0)); 2426 expect(method.parameters, hasLength(0));
2476 expect(method.typeParameters, hasLength(0)); 2427 expect(method.typeParameters, hasLength(0));
2477 expect(method.isAbstract, isFalse); 2428 expect(method.isAbstract, isFalse);
2478 expect(method.isExternal, isFalse); 2429 expect(method.isExternal, isFalse);
2479 expect(method.isStatic, isTrue); 2430 expect(method.isStatic, isTrue);
2480 expect(method.isSynthetic, isFalse); 2431 expect(method.isSynthetic, isFalse);
2481 } 2432 }
2482 2433
2483 void test_visitMethodDeclaration_typeParameters() { 2434 void test_visitMethodDeclaration_typeParameters() {
2484 // m<E>() {} 2435 // m<E>() {}
(...skipping 10 matching lines...) Expand all
2495 2446
2496 ElementHolder holder = buildElementsForAst(methodDeclaration); 2447 ElementHolder holder = buildElementsForAst(methodDeclaration);
2497 List<MethodElement> methods = holder.methods; 2448 List<MethodElement> methods = holder.methods;
2498 expect(methods, hasLength(1)); 2449 expect(methods, hasLength(1));
2499 MethodElement method = methods[0]; 2450 MethodElement method = methods[0];
2500 expect(method, isNotNull); 2451 expect(method, isNotNull);
2501 expect(method.hasImplicitReturnType, isTrue); 2452 expect(method.hasImplicitReturnType, isTrue);
2502 expect(method.name, methodName); 2453 expect(method.name, methodName);
2503 expect(method.functions, hasLength(0)); 2454 expect(method.functions, hasLength(0));
2504 expect(method.labels, hasLength(0)); 2455 expect(method.labels, hasLength(0));
2505 expect(method.localVariables, hasLength(0));
2506 expect(method.parameters, hasLength(0)); 2456 expect(method.parameters, hasLength(0));
2507 expect(method.typeParameters, hasLength(1)); 2457 expect(method.typeParameters, hasLength(1));
2508 expect(method.isAbstract, isFalse); 2458 expect(method.isAbstract, isFalse);
2509 expect(method.isExternal, isFalse); 2459 expect(method.isExternal, isFalse);
2510 expect(method.isStatic, isFalse); 2460 expect(method.isStatic, isFalse);
2511 expect(method.isSynthetic, isFalse); 2461 expect(method.isSynthetic, isFalse);
2512 } 2462 }
2513 2463
2514 void test_visitTypeAlias_minimal() { 2464 void test_visitTypeAlias_minimal() {
2515 String aliasName = "F"; 2465 String aliasName = "F";
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
2655 expect(element.metadata, hasLength(1)); 2605 expect(element.metadata, hasLength(1));
2656 expect(element.metadata[0], new isInstanceOf<ElementAnnotationImpl>()); 2606 expect(element.metadata[0], new isInstanceOf<ElementAnnotationImpl>());
2657 ElementAnnotationImpl elementAnnotation = element.metadata[0]; 2607 ElementAnnotationImpl elementAnnotation = element.metadata[0];
2658 expect(elementAnnotation.element, isNull); // Not yet resolved 2608 expect(elementAnnotation.element, isNull); // Not yet resolved
2659 expect(elementAnnotation.compilationUnit, isNotNull); 2609 expect(elementAnnotation.compilationUnit, isNotNull);
2660 expect(elementAnnotation.compilationUnit, compilationUnitElement); 2610 expect(elementAnnotation.compilationUnit, compilationUnitElement);
2661 } 2611 }
2662 2612
2663 AstVisitor createElementBuilder(ElementHolder holder); 2613 AstVisitor createElementBuilder(ElementHolder holder);
2664 2614
2615 SimpleIdentifier findIdentifier(String code, String prefix) {
2616 return EngineTestCase.findSimpleIdentifier(compilationUnit, code, prefix);
2617 }
2618
2619 LocalVariableElement findLocalVariable(String code, String prefix) {
2620 return findIdentifier(code, prefix).staticElement;
2621 }
2622
2665 void setUp() { 2623 void setUp() {
2666 compilationUnitElement = new CompilationUnitElementImpl('test.dart'); 2624 compilationUnitElement = new CompilationUnitElementImpl('test.dart');
2667 } 2625 }
2668 2626
2669 void _assertVisibleRange(LocalElement element, int offset, int end) { 2627 void _assertVisibleRange(LocalElement element, int offset, int end) {
2670 SourceRange visibleRange = element.visibleRange; 2628 SourceRange visibleRange = element.visibleRange;
2671 expect(visibleRange.offset, offset); 2629 expect(visibleRange.offset, offset);
2672 expect(visibleRange.end, end); 2630 expect(visibleRange.end, end);
2673 } 2631 }
2674 2632
2675 /** 2633 /**
2676 * Parse the given [code], and visit it with the given [visitor]. 2634 * Parse the given [code], and visit it with the given [visitor].
2677 * Fail if any error is logged. 2635 * Fail if any error is logged.
2678 */ 2636 */
2679 void _visitAstOfCode(String code, AstVisitor visitor) { 2637 void _visitAstOfCode(String code, AstVisitor visitor) {
2680 TestLogger logger = new TestLogger(); 2638 TestLogger logger = new TestLogger();
2681 AnalysisEngine.instance.logger = logger; 2639 AnalysisEngine.instance.logger = logger;
2682 try { 2640 try {
2683 _compilationUnit = parseCompilationUnit(code); 2641 _compilationUnit = parseCompilationUnit(code);
2684 compilationUnit.accept(visitor); 2642 compilationUnit.accept(visitor);
2685 } finally { 2643 } finally {
2686 expect(logger.log, hasLength(0)); 2644 expect(logger.log, hasLength(0));
2687 AnalysisEngine.instance.logger = Logger.NULL; 2645 AnalysisEngine.instance.logger = Logger.NULL;
2688 } 2646 }
2689 } 2647 }
2690 } 2648 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/generated/resolver_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698