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

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

Issue 2800443002: Build elements for FieldFormalParameter(s) even for local functions. (Closed)
Patch Set: Created 3 years, 8 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 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';
11 import 'package:analyzer/src/dart/ast/ast.dart'; 11 import 'package:analyzer/src/dart/ast/ast.dart';
12 import 'package:analyzer/src/dart/element/builder.dart'; 12 import 'package:analyzer/src/dart/element/builder.dart';
13 import 'package:analyzer/src/dart/element/element.dart'; 13 import 'package:analyzer/src/dart/element/element.dart';
14 import 'package:analyzer/src/dart/error/syntactic_errors.dart';
14 import 'package:analyzer/src/generated/engine.dart'; 15 import 'package:analyzer/src/generated/engine.dart';
15 import 'package:analyzer/src/generated/resolver.dart'; 16 import 'package:analyzer/src/generated/resolver.dart';
16 import 'package:analyzer/src/generated/source.dart'; 17 import 'package:analyzer/src/generated/source.dart';
17 import 'package:analyzer/src/generated/testing/ast_test_factory.dart'; 18 import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
18 import 'package:analyzer/src/generated/testing/element_factory.dart'; 19 import 'package:analyzer/src/generated/testing/element_factory.dart';
19 import 'package:analyzer/src/generated/testing/token_factory.dart'; 20 import 'package:analyzer/src/generated/testing/token_factory.dart';
20 import 'package:analyzer/src/generated/utilities_dart.dart'; 21 import 'package:analyzer/src/generated/utilities_dart.dart';
21 import 'package:test/test.dart'; 22 import 'package:test/test.dart';
22 import 'package:test_reflective_loader/test_reflective_loader.dart'; 23 import 'package:test_reflective_loader/test_reflective_loader.dart';
23 24
(...skipping 1108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 FunctionBody mainBody = mainAst.functionExpression.body; 1133 FunctionBody mainBody = mainAst.functionExpression.body;
1133 mainBody.accept(new LocalElementBuilder(holder, compilationUnitElement)); 1134 mainBody.accept(new LocalElementBuilder(holder, compilationUnitElement));
1134 main.functions = holder.functions; 1135 main.functions = holder.functions;
1135 main.localVariables = holder.localVariables; 1136 main.localVariables = holder.localVariables;
1136 expect(main.functions, hasLength(1)); 1137 expect(main.functions, hasLength(1));
1137 FunctionElement f = main.functions[0]; 1138 FunctionElement f = main.functions[0];
1138 expect(f.parameters, hasLength(1)); 1139 expect(f.parameters, hasLength(1));
1139 expect(f.parameters[0].initializer, isNotNull); 1140 expect(f.parameters[0].initializer, isNotNull);
1140 } 1141 }
1141 1142
1143 void test_visitFieldFormalParameter() {
1144 CompilationUnit unit = parseCompilationUnit(
1145 r'''
1146 main() {
1147 f(a, this.b) {}
1148 }
1149 ''',
1150 [ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR]);
1151 var main = unit.declarations[0] as FunctionDeclaration;
1152 var mainBody = main.functionExpression.body as BlockFunctionBody;
1153 var mainBlock = mainBody.block;
1154 var statement = mainBlock.statements[0] as FunctionDeclarationStatement;
1155 FunctionDeclaration f = statement.functionDeclaration;
1156
1157 // Build API elements.
1158 {
1159 ElementHolder holder = new ElementHolder();
1160 unit.accept(new ApiElementBuilder(holder, compilationUnitElement));
1161 }
1162
1163 // Build local elements.
1164 ElementHolder holder = new ElementHolder();
1165 var builder = new LocalElementBuilder(holder, compilationUnitElement);
1166 f.accept(builder);
1167
1168 List<FormalParameter> parameters =
1169 f.functionExpression.parameters.parameters;
1170
1171 ParameterElement a = parameters[0].element;
1172 expect(a, isNotNull);
1173 expect(a.name, 'a');
1174
1175 ParameterElement b = parameters[1].element;
1176 expect(b, isNotNull);
1177 expect(b.name, 'b');
1178 }
1179
1142 void test_visitVariableDeclaration_local() { 1180 void test_visitVariableDeclaration_local() {
1143 var holder = buildElementsForText('class C { m() { T v = null; } }'); 1181 var holder = buildElementsForText('class C { m() { T v = null; } }');
1144 List<LocalVariableElement> variableElements = holder.localVariables; 1182 List<LocalVariableElement> variableElements = holder.localVariables;
1145 expect(variableElements, hasLength(1)); 1183 expect(variableElements, hasLength(1));
1146 LocalVariableElement variableElement = variableElements[0]; 1184 LocalVariableElement variableElement = variableElements[0];
1147 expect(variableElement.hasImplicitType, isFalse); 1185 expect(variableElement.hasImplicitType, isFalse);
1148 expect(variableElement.name, 'v'); 1186 expect(variableElement.name, 'v');
1149 expect(variableElement.initializer, isNotNull); 1187 expect(variableElement.initializer, isNotNull);
1150 _assertVisibleRange(variableElement, 14, 29); 1188 _assertVisibleRange(variableElement, 14, 29);
1151 } 1189 }
(...skipping 1468 matching lines...) Expand 10 before | Expand all | Expand 10 after
2620 AnalysisEngine.instance.logger = logger; 2658 AnalysisEngine.instance.logger = logger;
2621 try { 2659 try {
2622 _compilationUnit = parseCompilationUnit(code); 2660 _compilationUnit = parseCompilationUnit(code);
2623 compilationUnit.accept(visitor); 2661 compilationUnit.accept(visitor);
2624 } finally { 2662 } finally {
2625 expect(logger.log, hasLength(0)); 2663 expect(logger.log, hasLength(0));
2626 AnalysisEngine.instance.logger = Logger.NULL; 2664 AnalysisEngine.instance.logger = Logger.NULL;
2627 } 2665 }
2628 } 2666 }
2629 } 2667 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698