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

Side by Side Diff: pkg/analyzer/lib/src/dart/element/builder.dart

Issue 2428773004: Add tests showing using LocalElementBuilder separately, for variable or body. (Closed)
Patch Set: Created 4 years, 2 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/dart/element/builder_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.src.dart.element.builder; 5 library analyzer.src.dart.element.builder;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analyzer/dart/ast/ast.dart'; 9 import 'package:analyzer/dart/ast/ast.dart';
10 import 'package:analyzer/dart/ast/token.dart'; 10 import 'package:analyzer/dart/ast/token.dart';
(...skipping 1023 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 1034
1035 @override 1035 @override
1036 Object visitBlockFunctionBody(BlockFunctionBody node) { 1036 Object visitBlockFunctionBody(BlockFunctionBody node) {
1037 _buildLocal(node); 1037 _buildLocal(node);
1038 return null; 1038 return null;
1039 } 1039 }
1040 1040
1041 @override 1041 @override
1042 Object visitDefaultFormalParameter(DefaultFormalParameter node) { 1042 Object visitDefaultFormalParameter(DefaultFormalParameter node) {
1043 super.visitDefaultFormalParameter(node); 1043 super.visitDefaultFormalParameter(node);
1044 _buildParameterInitializer(node.element as ParameterElementImpl, node); 1044 buildParameterInitializer(
1045 node.element as ParameterElementImpl, node.defaultValue);
1045 return null; 1046 return null;
1046 } 1047 }
1047 1048
1048 @override 1049 @override
1049 Object visitExpressionFunctionBody(ExpressionFunctionBody node) { 1050 Object visitExpressionFunctionBody(ExpressionFunctionBody node) {
1050 _buildLocal(node); 1051 _buildLocal(node);
1051 return null; 1052 return null;
1052 } 1053 }
1053 1054
1054 @override 1055 @override
1055 Object visitVariableDeclaration(VariableDeclaration node) { 1056 Object visitVariableDeclaration(VariableDeclaration node) {
1056 super.visitVariableDeclaration(node); 1057 super.visitVariableDeclaration(node);
1057 VariableElementImpl element = node.element as VariableElementImpl; 1058 VariableElementImpl element = node.element as VariableElementImpl;
1058 _buildVariableInitializer(element, node.initializer); 1059 buildVariableInitializer(element, node.initializer);
1059 return null; 1060 return null;
1060 } 1061 }
1061 1062
1062 void _buildLocal(AstNode node) { 1063 void _buildLocal(AstNode node) {
1063 node.accept(new LocalElementBuilder(_currentHolder, _unitElement)); 1064 node.accept(new LocalElementBuilder(_currentHolder, _unitElement));
1064 } 1065 }
1065 } 1066 }
1066 1067
1067 /** 1068 /**
1068 * Traverse a [FunctionBody] and build elements for AST structures. 1069 * Traverse a [FunctionBody] and build elements for AST structures.
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
1264 } else { 1265 } else {
1265 element = new LocalVariableElementImpl.forNode(variableName); 1266 element = new LocalVariableElementImpl.forNode(variableName);
1266 } 1267 }
1267 _setCodeRange(element, node); 1268 _setCodeRange(element, node);
1268 _setVariableVisibleRange(element, node); 1269 _setVariableVisibleRange(element, node);
1269 element.hasImplicitType = varList.type == null; 1270 element.hasImplicitType = varList.type == null;
1270 _currentHolder.addLocalVariable(element); 1271 _currentHolder.addLocalVariable(element);
1271 variableName.staticElement = element; 1272 variableName.staticElement = element;
1272 element.const3 = isConst; 1273 element.const3 = isConst;
1273 element.final2 = isFinal; 1274 element.final2 = isFinal;
1274 _buildVariableInitializer(element, initializerNode); 1275 buildVariableInitializer(element, initializerNode);
1275 return null; 1276 return null;
1276 } 1277 }
1277 1278
1278 @override 1279 @override
1279 Object visitVariableDeclarationList(VariableDeclarationList node) { 1280 Object visitVariableDeclarationList(VariableDeclarationList node) {
1280 super.visitVariableDeclarationList(node); 1281 super.visitVariableDeclarationList(node);
1281 List<ElementAnnotation> elementAnnotations = 1282 List<ElementAnnotation> elementAnnotations =
1282 _createElementAnnotations(node.metadata); 1283 _createElementAnnotations(node.metadata);
1283 _setVariableDeclarationListAnnotations(node, elementAnnotations); 1284 _setVariableDeclarationListAnnotations(node, elementAnnotations);
1284 return null; 1285 return null;
(...skipping 22 matching lines...) Expand all
1307 */ 1308 */
1308 final CompilationUnitElementImpl _unitElement; 1309 final CompilationUnitElementImpl _unitElement;
1309 1310
1310 /** 1311 /**
1311 * The element holder associated with the element that is currently being buil t. 1312 * The element holder associated with the element that is currently being buil t.
1312 */ 1313 */
1313 ElementHolder _currentHolder; 1314 ElementHolder _currentHolder;
1314 1315
1315 _BaseElementBuilder(this._currentHolder, this._unitElement); 1316 _BaseElementBuilder(this._currentHolder, this._unitElement);
1316 1317
1318 void buildParameterInitializer(
Paul Berry 2016/10/18 21:14:09 Since this method is now public, would you mind ad
scheglov 2016/10/18 21:18:38 Done.
1319 ParameterElementImpl parameter, Expression defaultValue) {
1320 if (defaultValue != null) {
1321 ElementHolder holder = new ElementHolder();
1322 _visit(holder, defaultValue);
1323 FunctionElementImpl initializer =
1324 new FunctionElementImpl.forOffset(defaultValue.beginToken.offset);
1325 initializer.hasImplicitReturnType = true;
1326 initializer.functions = holder.functions;
1327 initializer.labels = holder.labels;
1328 initializer.localVariables = holder.localVariables;
1329 initializer.parameters = holder.parameters;
1330 initializer.synthetic = true;
1331 initializer.type = new FunctionTypeImpl(initializer);
1332 parameter.initializer = initializer;
1333 parameter.defaultValueCode = defaultValue.toSource();
1334 holder.validate();
1335 }
1336 }
1337
1338 void buildVariableInitializer(VariableElementImpl element, Expression node) {
Paul Berry 2016/10/18 21:14:09 Same here.
1339 if (node != null) {
1340 ElementHolder holder = new ElementHolder();
1341 _visit(holder, node);
1342 FunctionElementImpl initializer =
1343 new FunctionElementImpl.forOffset(node.beginToken.offset);
1344 initializer.hasImplicitReturnType = true;
1345 initializer.functions = holder.functions;
1346 initializer.labels = holder.labels;
1347 initializer.localVariables = holder.localVariables;
1348 initializer.synthetic = true;
1349 initializer.type = new FunctionTypeImpl(initializer);
1350 element.initializer = initializer;
1351 holder.validate();
1352 }
1353 }
1354
1317 @override 1355 @override
1318 Object visitDefaultFormalParameter(DefaultFormalParameter node) { 1356 Object visitDefaultFormalParameter(DefaultFormalParameter node) {
1319 NormalFormalParameter normalParameter = node.parameter; 1357 NormalFormalParameter normalParameter = node.parameter;
1320 SimpleIdentifier parameterName = normalParameter.identifier; 1358 SimpleIdentifier parameterName = normalParameter.identifier;
1321 ParameterElementImpl parameter; 1359 ParameterElementImpl parameter;
1322 if (normalParameter is FieldFormalParameter) { 1360 if (normalParameter is FieldFormalParameter) {
1323 DefaultFieldFormalParameterElementImpl fieldParameter = 1361 DefaultFieldFormalParameterElementImpl fieldParameter =
1324 new DefaultFieldFormalParameterElementImpl.forNode(parameterName); 1362 new DefaultFieldFormalParameterElementImpl.forNode(parameterName);
1325 _setFieldParameterField(fieldParameter); 1363 _setFieldParameterField(fieldParameter);
1326 parameter = fieldParameter; 1364 parameter = fieldParameter;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 _setCodeRange(typeParameter, node); 1438 _setCodeRange(typeParameter, node);
1401 typeParameter.metadata = _createElementAnnotations(node.metadata); 1439 typeParameter.metadata = _createElementAnnotations(node.metadata);
1402 TypeParameterTypeImpl typeParameterType = 1440 TypeParameterTypeImpl typeParameterType =
1403 new TypeParameterTypeImpl(typeParameter); 1441 new TypeParameterTypeImpl(typeParameter);
1404 typeParameter.type = typeParameterType; 1442 typeParameter.type = typeParameterType;
1405 _currentHolder.addTypeParameter(typeParameter); 1443 _currentHolder.addTypeParameter(typeParameter);
1406 parameterName.staticElement = typeParameter; 1444 parameterName.staticElement = typeParameter;
1407 return super.visitTypeParameter(node); 1445 return super.visitTypeParameter(node);
1408 } 1446 }
1409 1447
1410 void _buildParameterInitializer(
1411 ParameterElementImpl parameter, DefaultFormalParameter node) {
1412 Expression defaultValue = node.defaultValue;
1413 if (defaultValue != null) {
1414 ElementHolder holder = new ElementHolder();
1415 _visit(holder, defaultValue);
1416 FunctionElementImpl initializer =
1417 new FunctionElementImpl.forOffset(defaultValue.beginToken.offset);
1418 initializer.hasImplicitReturnType = true;
1419 initializer.functions = holder.functions;
1420 initializer.labels = holder.labels;
1421 initializer.localVariables = holder.localVariables;
1422 initializer.parameters = holder.parameters;
1423 initializer.synthetic = true;
1424 initializer.type = new FunctionTypeImpl(initializer);
1425 parameter.initializer = initializer;
1426 parameter.defaultValueCode = defaultValue.toSource();
1427 holder.validate();
1428 }
1429 }
1430
1431 void _buildVariableInitializer(VariableElementImpl element, Expression node) {
1432 if (node != null) {
1433 ElementHolder holder = new ElementHolder();
1434 _visit(holder, node);
1435 FunctionElementImpl initializer =
1436 new FunctionElementImpl.forOffset(node.beginToken.offset);
1437 initializer.hasImplicitReturnType = true;
1438 initializer.functions = holder.functions;
1439 initializer.labels = holder.labels;
1440 initializer.localVariables = holder.localVariables;
1441 initializer.synthetic = true;
1442 initializer.type = new FunctionTypeImpl(initializer);
1443 element.initializer = initializer;
1444 holder.validate();
1445 }
1446 }
1447
1448 /** 1448 /**
1449 * For each [Annotation] found in [annotations], create a new 1449 * For each [Annotation] found in [annotations], create a new
1450 * [ElementAnnotation] object and set the [Annotation] to point to it. 1450 * [ElementAnnotation] object and set the [Annotation] to point to it.
1451 */ 1451 */
1452 List<ElementAnnotation> _createElementAnnotations( 1452 List<ElementAnnotation> _createElementAnnotations(
1453 NodeList<Annotation> annotations) { 1453 NodeList<Annotation> annotations) {
1454 if (annotations.isEmpty) { 1454 if (annotations.isEmpty) {
1455 return ElementAnnotation.EMPTY_LIST; 1455 return ElementAnnotation.EMPTY_LIST;
1456 } 1456 }
1457 return annotations.map((Annotation a) { 1457 return annotations.map((Annotation a) {
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
1592 return null; 1592 return null;
1593 } 1593 }
1594 1594
1595 /** 1595 /**
1596 * Return the lexical identifiers associated with the given [identifiers]. 1596 * Return the lexical identifiers associated with the given [identifiers].
1597 */ 1597 */
1598 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) { 1598 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) {
1599 return identifiers.map((identifier) => identifier.name).toList(); 1599 return identifiers.map((identifier) => identifier.name).toList();
1600 } 1600 }
1601 } 1601 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/dart/element/builder_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698