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 |