| 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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 229 @override | 229 @override |
| 230 Object visitFieldFormalParameter(FieldFormalParameter node) { | 230 Object visitFieldFormalParameter(FieldFormalParameter node) { |
| 231 if (node.parent is! DefaultFormalParameter) { | 231 if (node.parent is! DefaultFormalParameter) { |
| 232 SimpleIdentifier parameterName = node.identifier; | 232 SimpleIdentifier parameterName = node.identifier; |
| 233 FieldElement field = | 233 FieldElement field = |
| 234 _fieldMap == null ? null : _fieldMap[parameterName.name]; | 234 _fieldMap == null ? null : _fieldMap[parameterName.name]; |
| 235 FieldFormalParameterElementImpl parameter = | 235 FieldFormalParameterElementImpl parameter = |
| 236 new FieldFormalParameterElementImpl.forNode(parameterName); | 236 new FieldFormalParameterElementImpl.forNode(parameterName); |
| 237 _setCodeRange(parameter, node); | 237 _setCodeRange(parameter, node); |
| 238 parameter.isConst = node.isConst; | 238 parameter.isConst = node.isConst; |
| 239 parameter.isExplicitlyCovariant = node.covariantKeyword != null; |
| 239 parameter.isFinal = node.isFinal; | 240 parameter.isFinal = node.isFinal; |
| 240 parameter.parameterKind = node.kind; | 241 parameter.parameterKind = node.kind; |
| 241 if (field != null) { | 242 if (field != null) { |
| 242 parameter.field = field; | 243 parameter.field = field; |
| 243 } | 244 } |
| 244 _currentHolder.addParameter(parameter); | 245 _currentHolder.addParameter(parameter); |
| 245 parameterName.staticElement = parameter; | 246 parameterName.staticElement = parameter; |
| 246 } | 247 } |
| 247 // | 248 // |
| 248 // The children of this parameter include any parameters defined on the type | 249 // The children of this parameter include any parameters defined on the type |
| (...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 VariableElementImpl element; | 615 VariableElementImpl element; |
| 615 if (fieldNode != null) { | 616 if (fieldNode != null) { |
| 616 SimpleIdentifier fieldName = node.name; | 617 SimpleIdentifier fieldName = node.name; |
| 617 FieldElementImpl field; | 618 FieldElementImpl field; |
| 618 if ((isConst || isFinal && !fieldNode.isStatic) && hasInitializer) { | 619 if ((isConst || isFinal && !fieldNode.isStatic) && hasInitializer) { |
| 619 field = new ConstFieldElementImpl.forNode(fieldName); | 620 field = new ConstFieldElementImpl.forNode(fieldName); |
| 620 } else { | 621 } else { |
| 621 field = new FieldElementImpl.forNode(fieldName); | 622 field = new FieldElementImpl.forNode(fieldName); |
| 622 } | 623 } |
| 623 element = field; | 624 element = field; |
| 625 field.isCovariant = fieldNode.covariantKeyword != null; |
| 624 field.isStatic = fieldNode.isStatic; | 626 field.isStatic = fieldNode.isStatic; |
| 625 _setCodeRange(element, node); | 627 _setCodeRange(element, node); |
| 626 setElementDocumentationComment(element, fieldNode); | 628 setElementDocumentationComment(element, fieldNode); |
| 627 field.hasImplicitType = varList.type == null; | 629 field.hasImplicitType = varList.type == null; |
| 628 _currentHolder.addField(field); | 630 _currentHolder.addField(field); |
| 629 fieldName.staticElement = field; | 631 fieldName.staticElement = field; |
| 630 } else { | 632 } else { |
| 631 SimpleIdentifier variableName = node.name; | 633 SimpleIdentifier variableName = node.name; |
| 632 TopLevelVariableElementImpl variable; | 634 TopLevelVariableElementImpl variable; |
| 633 if (isConst && hasInitializer) { | 635 if (isConst && hasInitializer) { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 646 } | 648 } |
| 647 element.isConst = isConst; | 649 element.isConst = isConst; |
| 648 element.isFinal = isFinal; | 650 element.isFinal = isFinal; |
| 649 if (element is PropertyInducingElementImpl) { | 651 if (element is PropertyInducingElementImpl) { |
| 650 PropertyAccessorElementImpl_ImplicitGetter getter = | 652 PropertyAccessorElementImpl_ImplicitGetter getter = |
| 651 new PropertyAccessorElementImpl_ImplicitGetter(element); | 653 new PropertyAccessorElementImpl_ImplicitGetter(element); |
| 652 _currentHolder.addAccessor(getter); | 654 _currentHolder.addAccessor(getter); |
| 653 if (!isConst && !isFinal) { | 655 if (!isConst && !isFinal) { |
| 654 PropertyAccessorElementImpl_ImplicitSetter setter = | 656 PropertyAccessorElementImpl_ImplicitSetter setter = |
| 655 new PropertyAccessorElementImpl_ImplicitSetter(element); | 657 new PropertyAccessorElementImpl_ImplicitSetter(element); |
| 658 if (fieldNode != null) { |
| 659 (setter.parameters[0] as ParameterElementImpl).isExplicitlyCovariant = |
| 660 fieldNode.covariantKeyword != null; |
| 661 } |
| 656 _currentHolder.addAccessor(setter); | 662 _currentHolder.addAccessor(setter); |
| 657 } | 663 } |
| 658 } | 664 } |
| 659 return null; | 665 return null; |
| 660 } | 666 } |
| 661 | 667 |
| 662 @override | 668 @override |
| 663 Object visitVariableDeclarationList(VariableDeclarationList node) { | 669 Object visitVariableDeclarationList(VariableDeclarationList node) { |
| 664 super.visitVariableDeclarationList(node); | 670 super.visitVariableDeclarationList(node); |
| 665 AstNode parent = node.parent; | 671 AstNode parent = node.parent; |
| (...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1382 if (normalParameter is FieldFormalParameter) { | 1388 if (normalParameter is FieldFormalParameter) { |
| 1383 DefaultFieldFormalParameterElementImpl fieldParameter = | 1389 DefaultFieldFormalParameterElementImpl fieldParameter = |
| 1384 new DefaultFieldFormalParameterElementImpl.forNode(parameterName); | 1390 new DefaultFieldFormalParameterElementImpl.forNode(parameterName); |
| 1385 _setFieldParameterField(fieldParameter); | 1391 _setFieldParameterField(fieldParameter); |
| 1386 parameter = fieldParameter; | 1392 parameter = fieldParameter; |
| 1387 } else { | 1393 } else { |
| 1388 parameter = new DefaultParameterElementImpl.forNode(parameterName); | 1394 parameter = new DefaultParameterElementImpl.forNode(parameterName); |
| 1389 } | 1395 } |
| 1390 _setCodeRange(parameter, node); | 1396 _setCodeRange(parameter, node); |
| 1391 parameter.isConst = node.isConst; | 1397 parameter.isConst = node.isConst; |
| 1398 parameter.isExplicitlyCovariant = node.parameter.covariantKeyword != null; |
| 1392 parameter.isFinal = node.isFinal; | 1399 parameter.isFinal = node.isFinal; |
| 1393 parameter.parameterKind = node.kind; | 1400 parameter.parameterKind = node.kind; |
| 1394 // visible range | 1401 // visible range |
| 1395 _setParameterVisibleRange(node, parameter); | 1402 _setParameterVisibleRange(node, parameter); |
| 1396 if (normalParameter is SimpleFormalParameter && | 1403 if (normalParameter is SimpleFormalParameter && |
| 1397 normalParameter.type == null) { | 1404 normalParameter.type == null) { |
| 1398 parameter.hasImplicitType = true; | 1405 parameter.hasImplicitType = true; |
| 1399 } | 1406 } |
| 1400 _currentHolder.addParameter(parameter); | 1407 _currentHolder.addParameter(parameter); |
| 1401 parameterName.staticElement = parameter; | 1408 parameterName.staticElement = parameter; |
| 1402 normalParameter.accept(this); | 1409 normalParameter.accept(this); |
| 1403 return null; | 1410 return null; |
| 1404 } | 1411 } |
| 1405 | 1412 |
| 1406 @override | 1413 @override |
| 1407 Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) { | 1414 Object visitFunctionTypedFormalParameter(FunctionTypedFormalParameter node) { |
| 1408 if (node.parent is! DefaultFormalParameter) { | 1415 if (node.parent is! DefaultFormalParameter) { |
| 1409 SimpleIdentifier parameterName = node.identifier; | 1416 SimpleIdentifier parameterName = node.identifier; |
| 1410 ParameterElementImpl parameter = | 1417 ParameterElementImpl parameter = |
| 1411 new ParameterElementImpl.forNode(parameterName); | 1418 new ParameterElementImpl.forNode(parameterName); |
| 1412 _setCodeRange(parameter, node); | 1419 _setCodeRange(parameter, node); |
| 1420 parameter.isConst = node.isConst; |
| 1421 parameter.isExplicitlyCovariant = node.covariantKeyword != null; |
| 1422 parameter.isFinal = node.isFinal; |
| 1413 parameter.parameterKind = node.kind; | 1423 parameter.parameterKind = node.kind; |
| 1414 _setParameterVisibleRange(node, parameter); | 1424 _setParameterVisibleRange(node, parameter); |
| 1415 _currentHolder.addParameter(parameter); | 1425 _currentHolder.addParameter(parameter); |
| 1416 parameterName.staticElement = parameter; | 1426 parameterName.staticElement = parameter; |
| 1417 } | 1427 } |
| 1418 // | 1428 // |
| 1419 // The children of this parameter include any parameters defined on the type | 1429 // The children of this parameter include any parameters defined on the type |
| 1420 //of this parameter. | 1430 //of this parameter. |
| 1421 // | 1431 // |
| 1422 ElementHolder holder = new ElementHolder(); | 1432 ElementHolder holder = new ElementHolder(); |
| 1423 _visitChildren(holder, node); | 1433 _visitChildren(holder, node); |
| 1424 ParameterElementImpl element = node.element; | 1434 ParameterElementImpl element = node.element; |
| 1425 element.metadata = _createElementAnnotations(node.metadata); | 1435 element.metadata = _createElementAnnotations(node.metadata); |
| 1426 element.parameters = holder.parameters; | 1436 element.parameters = holder.parameters; |
| 1427 element.typeParameters = holder.typeParameters; | 1437 element.typeParameters = holder.typeParameters; |
| 1428 holder.validate(); | 1438 holder.validate(); |
| 1429 return null; | 1439 return null; |
| 1430 } | 1440 } |
| 1431 | 1441 |
| 1432 @override | 1442 @override |
| 1433 Object visitSimpleFormalParameter(SimpleFormalParameter node) { | 1443 Object visitSimpleFormalParameter(SimpleFormalParameter node) { |
| 1434 if (node.parent is! DefaultFormalParameter) { | 1444 if (node.parent is! DefaultFormalParameter) { |
| 1435 SimpleIdentifier parameterName = node.identifier; | 1445 SimpleIdentifier parameterName = node.identifier; |
| 1436 ParameterElementImpl parameter = | 1446 ParameterElementImpl parameter = |
| 1437 new ParameterElementImpl.forNode(parameterName); | 1447 new ParameterElementImpl.forNode(parameterName); |
| 1438 _setCodeRange(parameter, node); | 1448 _setCodeRange(parameter, node); |
| 1439 parameter.isConst = node.isConst; | 1449 parameter.isConst = node.isConst; |
| 1450 parameter.isExplicitlyCovariant = node.covariantKeyword != null; |
| 1440 parameter.isFinal = node.isFinal; | 1451 parameter.isFinal = node.isFinal; |
| 1441 parameter.parameterKind = node.kind; | 1452 parameter.parameterKind = node.kind; |
| 1442 _setParameterVisibleRange(node, parameter); | 1453 _setParameterVisibleRange(node, parameter); |
| 1443 if (node.type == null) { | 1454 if (node.type == null) { |
| 1444 parameter.hasImplicitType = true; | 1455 parameter.hasImplicitType = true; |
| 1445 } | 1456 } |
| 1446 _currentHolder.addParameter(parameter); | 1457 _currentHolder.addParameter(parameter); |
| 1447 parameterName.staticElement = parameter; | 1458 parameterName.staticElement = parameter; |
| 1448 } | 1459 } |
| 1449 super.visitSimpleFormalParameter(node); | 1460 super.visitSimpleFormalParameter(node); |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1614 return null; | 1625 return null; |
| 1615 } | 1626 } |
| 1616 | 1627 |
| 1617 /** | 1628 /** |
| 1618 * Return the lexical identifiers associated with the given [identifiers]. | 1629 * Return the lexical identifiers associated with the given [identifiers]. |
| 1619 */ | 1630 */ |
| 1620 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) { | 1631 static List<String> _getIdentifiers(NodeList<SimpleIdentifier> identifiers) { |
| 1621 return identifiers.map((identifier) => identifier.name).toList(); | 1632 return identifiers.map((identifier) => identifier.name).toList(); |
| 1622 } | 1633 } |
| 1623 } | 1634 } |
| OLD | NEW |