Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 } |
| OLD | NEW |