| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 summary_resynthesizer; | 5 library summary_resynthesizer; |
| 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/element/element.dart'; | 10 import 'package:analyzer/dart/element/element.dart'; |
| (...skipping 1294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1305 } | 1305 } |
| 1306 return buildType(type); | 1306 return buildType(type); |
| 1307 } | 1307 } |
| 1308 | 1308 |
| 1309 /** | 1309 /** |
| 1310 * Resynthesize a [ParameterElement]. | 1310 * Resynthesize a [ParameterElement]. |
| 1311 */ | 1311 */ |
| 1312 ParameterElement buildParameter(UnlinkedParam serializedParameter) { | 1312 ParameterElement buildParameter(UnlinkedParam serializedParameter) { |
| 1313 ParameterElementImpl parameterElement; | 1313 ParameterElementImpl parameterElement; |
| 1314 if (serializedParameter.isInitializingFormal) { | 1314 if (serializedParameter.isInitializingFormal) { |
| 1315 parameterElement = new FieldFormalParameterElementImpl( | 1315 FieldFormalParameterElementImpl initializingParameter; |
| 1316 serializedParameter.name, serializedParameter.nameOffset) | 1316 if (serializedParameter.defaultValue != null) { |
| 1317 ..field = fields[serializedParameter.name]; | 1317 DefaultFieldFormalParameterElementImpl defaultParameter = |
| 1318 new DefaultFieldFormalParameterElementImpl( |
| 1319 serializedParameter.name, serializedParameter.nameOffset); |
| 1320 initializingParameter = defaultParameter; |
| 1321 defaultParameter.constantInitializer = |
| 1322 _buildConstExpression(serializedParameter.defaultValue); |
| 1323 } else { |
| 1324 initializingParameter = new FieldFormalParameterElementImpl( |
| 1325 serializedParameter.name, serializedParameter.nameOffset); |
| 1326 } |
| 1327 parameterElement = initializingParameter; |
| 1328 initializingParameter.field = fields[serializedParameter.name]; |
| 1318 } else { | 1329 } else { |
| 1319 parameterElement = new ParameterElementImpl( | 1330 if (serializedParameter.defaultValue != null) { |
| 1320 serializedParameter.name, serializedParameter.nameOffset); | 1331 DefaultParameterElementImpl defaultParameter = |
| 1332 new DefaultParameterElementImpl( |
| 1333 serializedParameter.name, serializedParameter.nameOffset); |
| 1334 parameterElement = defaultParameter; |
| 1335 defaultParameter.constantInitializer = |
| 1336 _buildConstExpression(serializedParameter.defaultValue); |
| 1337 } else { |
| 1338 parameterElement = new ParameterElementImpl( |
| 1339 serializedParameter.name, serializedParameter.nameOffset); |
| 1340 } |
| 1321 } | 1341 } |
| 1322 if (serializedParameter.isFunctionTyped) { | 1342 if (serializedParameter.isFunctionTyped) { |
| 1323 FunctionElementImpl parameterTypeElement = | 1343 FunctionElementImpl parameterTypeElement = |
| 1324 new FunctionElementImpl('', -1); | 1344 new FunctionElementImpl('', -1); |
| 1325 parameterTypeElement.synthetic = true; | 1345 parameterTypeElement.synthetic = true; |
| 1326 parameterElement.parameters = | 1346 parameterElement.parameters = |
| 1327 serializedParameter.parameters.map(buildParameter).toList(); | 1347 serializedParameter.parameters.map(buildParameter).toList(); |
| 1328 parameterTypeElement.enclosingElement = parameterElement; | 1348 parameterTypeElement.enclosingElement = parameterElement; |
| 1329 parameterTypeElement.shareParameters(parameterElement.parameters); | 1349 parameterTypeElement.shareParameters(parameterElement.parameters); |
| 1330 parameterTypeElement.returnType = buildType(serializedParameter.type); | 1350 parameterTypeElement.returnType = buildType(serializedParameter.type); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1460 */ | 1480 */ |
| 1461 void buildVariable(UnlinkedVariable serializedVariable, | 1481 void buildVariable(UnlinkedVariable serializedVariable, |
| 1462 [ElementHolder holder]) { | 1482 [ElementHolder holder]) { |
| 1463 if (holder == null) { | 1483 if (holder == null) { |
| 1464 TopLevelVariableElementImpl element; | 1484 TopLevelVariableElementImpl element; |
| 1465 if (serializedVariable.constExpr != null) { | 1485 if (serializedVariable.constExpr != null) { |
| 1466 ConstTopLevelVariableElementImpl constElement = | 1486 ConstTopLevelVariableElementImpl constElement = |
| 1467 new ConstTopLevelVariableElementImpl( | 1487 new ConstTopLevelVariableElementImpl( |
| 1468 serializedVariable.name, serializedVariable.nameOffset); | 1488 serializedVariable.name, serializedVariable.nameOffset); |
| 1469 element = constElement; | 1489 element = constElement; |
| 1470 // TODO(scheglov) share const builder? | 1490 constElement.constantInitializer = |
| 1471 _ConstExprBuilder builder = | 1491 _buildConstExpression(serializedVariable.constExpr); |
| 1472 new _ConstExprBuilder(this, serializedVariable.constExpr); | |
| 1473 constElement.constantInitializer = builder.build(); | |
| 1474 } else { | 1492 } else { |
| 1475 element = new TopLevelVariableElementImpl( | 1493 element = new TopLevelVariableElementImpl( |
| 1476 serializedVariable.name, serializedVariable.nameOffset); | 1494 serializedVariable.name, serializedVariable.nameOffset); |
| 1477 } | 1495 } |
| 1478 buildVariableCommonParts(element, serializedVariable); | 1496 buildVariableCommonParts(element, serializedVariable); |
| 1479 unitHolder.addTopLevelVariable(element); | 1497 unitHolder.addTopLevelVariable(element); |
| 1480 buildImplicitAccessors(element, unitHolder); | 1498 buildImplicitAccessors(element, unitHolder); |
| 1481 } else { | 1499 } else { |
| 1482 FieldElementImpl element = new FieldElementImpl( | 1500 FieldElementImpl element; |
| 1483 serializedVariable.name, serializedVariable.nameOffset); | 1501 if (serializedVariable.constExpr != null) { |
| 1502 ConstFieldElementImpl constElement = new ConstFieldElementImpl( |
| 1503 serializedVariable.name, serializedVariable.nameOffset); |
| 1504 element = constElement; |
| 1505 constElement.constantInitializer = |
| 1506 _buildConstExpression(serializedVariable.constExpr); |
| 1507 } else { |
| 1508 element = new FieldElementImpl( |
| 1509 serializedVariable.name, serializedVariable.nameOffset); |
| 1510 } |
| 1484 buildVariableCommonParts(element, serializedVariable); | 1511 buildVariableCommonParts(element, serializedVariable); |
| 1485 element.static = serializedVariable.isStatic; | 1512 element.static = serializedVariable.isStatic; |
| 1486 holder.addField(element); | 1513 holder.addField(element); |
| 1487 buildImplicitAccessors(element, holder); | 1514 buildImplicitAccessors(element, holder); |
| 1488 fields[element.name] = element; | 1515 fields[element.name] = element; |
| 1489 } | 1516 } |
| 1490 } | 1517 } |
| 1491 | 1518 |
| 1492 /** | 1519 /** |
| 1493 * Handle the parts that are common to top level variables and fields. | 1520 * Handle the parts that are common to top level variables and fields. |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1690 elementMap[accessor.identifier] = accessor; | 1717 elementMap[accessor.identifier] = accessor; |
| 1691 } | 1718 } |
| 1692 resummarizedElements[absoluteUri] = elementMap; | 1719 resummarizedElements[absoluteUri] = elementMap; |
| 1693 unitHolder = null; | 1720 unitHolder = null; |
| 1694 linkedUnit = null; | 1721 linkedUnit = null; |
| 1695 unlinkedUnit = null; | 1722 unlinkedUnit = null; |
| 1696 linkedTypeMap = null; | 1723 linkedTypeMap = null; |
| 1697 referenceInfos = null; | 1724 referenceInfos = null; |
| 1698 } | 1725 } |
| 1699 | 1726 |
| 1727 Expression _buildConstExpression(UnlinkedConst uc) { |
| 1728 return new _ConstExprBuilder(this, uc).build(); |
| 1729 } |
| 1730 |
| 1700 /** | 1731 /** |
| 1701 * Return the new handle of the `String.length` getter element. | 1732 * Return the new handle of the `String.length` getter element. |
| 1702 */ | 1733 */ |
| 1703 PropertyAccessorElementHandle _buildStringLengthPropertyAccessorElement() => | 1734 PropertyAccessorElementHandle _buildStringLengthPropertyAccessorElement() => |
| 1704 new PropertyAccessorElementHandle( | 1735 new PropertyAccessorElementHandle( |
| 1705 summaryResynthesizer, | 1736 summaryResynthesizer, |
| 1706 new ElementLocationImpl.con3( | 1737 new ElementLocationImpl.con3( |
| 1707 <String>['dart:core', 'dart:core', 'String', 'length?'])); | 1738 <String>['dart:core', 'dart:core', 'String', 'length?'])); |
| 1708 | 1739 |
| 1709 /** | 1740 /** |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1840 } | 1871 } |
| 1841 : () => this.element; | 1872 : () => this.element; |
| 1842 // TODO(paulberry): Is it a bug that we have to pass `false` for | 1873 // TODO(paulberry): Is it a bug that we have to pass `false` for |
| 1843 // isInstantiated? | 1874 // isInstantiated? |
| 1844 return new DeferredFunctionTypeImpl(computer, null, typeArguments, false); | 1875 return new DeferredFunctionTypeImpl(computer, null, typeArguments, false); |
| 1845 } else { | 1876 } else { |
| 1846 return null; | 1877 return null; |
| 1847 } | 1878 } |
| 1848 } | 1879 } |
| 1849 } | 1880 } |
| OLD | NEW |