| 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/ast/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
| (...skipping 1638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1649 element.setVisibleRange( | 1649 element.setVisibleRange( |
| 1650 serializedVariable.visibleOffset, serializedVariable.visibleLength); | 1650 serializedVariable.visibleOffset, serializedVariable.visibleLength); |
| 1651 } | 1651 } |
| 1652 buildVariableCommonParts(element, serializedVariable); | 1652 buildVariableCommonParts(element, serializedVariable); |
| 1653 return element; | 1653 return element; |
| 1654 } | 1654 } |
| 1655 | 1655 |
| 1656 /** | 1656 /** |
| 1657 * Resynthesize a [ParameterElement]. | 1657 * Resynthesize a [ParameterElement]. |
| 1658 */ | 1658 */ |
| 1659 ParameterElement buildParameter(UnlinkedParam serializedParameter) { | 1659 ParameterElement buildParameter(UnlinkedParam serializedParameter, |
| 1660 {bool synthetic: false}) { |
| 1660 ParameterElementImpl parameterElement; | 1661 ParameterElementImpl parameterElement; |
| 1662 int nameOffset = synthetic ? -1 : serializedParameter.nameOffset; |
| 1661 if (serializedParameter.isInitializingFormal) { | 1663 if (serializedParameter.isInitializingFormal) { |
| 1662 FieldFormalParameterElementImpl initializingParameter; | 1664 FieldFormalParameterElementImpl initializingParameter; |
| 1663 if (serializedParameter.kind == UnlinkedParamKind.required) { | 1665 if (serializedParameter.kind == UnlinkedParamKind.required) { |
| 1664 initializingParameter = new FieldFormalParameterElementImpl( | 1666 initializingParameter = new FieldFormalParameterElementImpl( |
| 1665 serializedParameter.name, serializedParameter.nameOffset); | 1667 serializedParameter.name, nameOffset); |
| 1666 } else { | 1668 } else { |
| 1667 DefaultFieldFormalParameterElementImpl defaultParameter = | 1669 DefaultFieldFormalParameterElementImpl defaultParameter = |
| 1668 new DefaultFieldFormalParameterElementImpl( | 1670 new DefaultFieldFormalParameterElementImpl( |
| 1669 serializedParameter.name, serializedParameter.nameOffset); | 1671 serializedParameter.name, nameOffset); |
| 1670 initializingParameter = defaultParameter; | 1672 initializingParameter = defaultParameter; |
| 1671 if (serializedParameter.defaultValue != null) { | 1673 if (serializedParameter.defaultValue != null) { |
| 1672 defaultParameter.constantInitializer = | 1674 defaultParameter.constantInitializer = |
| 1673 _buildConstExpression(serializedParameter.defaultValue); | 1675 _buildConstExpression(serializedParameter.defaultValue); |
| 1674 defaultParameter.defaultValueCode = | 1676 defaultParameter.defaultValueCode = |
| 1675 serializedParameter.defaultValueCode; | 1677 serializedParameter.defaultValueCode; |
| 1676 } | 1678 } |
| 1677 } | 1679 } |
| 1678 parameterElement = initializingParameter; | 1680 parameterElement = initializingParameter; |
| 1679 initializingParameter.field = fields[serializedParameter.name]; | 1681 initializingParameter.field = fields[serializedParameter.name]; |
| 1680 } else { | 1682 } else { |
| 1681 if (serializedParameter.kind == UnlinkedParamKind.required) { | 1683 if (serializedParameter.kind == UnlinkedParamKind.required) { |
| 1682 parameterElement = new ParameterElementImpl( | 1684 parameterElement = |
| 1683 serializedParameter.name, serializedParameter.nameOffset); | 1685 new ParameterElementImpl(serializedParameter.name, nameOffset); |
| 1684 } else { | 1686 } else { |
| 1685 DefaultParameterElementImpl defaultParameter = | 1687 DefaultParameterElementImpl defaultParameter = |
| 1686 new DefaultParameterElementImpl( | 1688 new DefaultParameterElementImpl( |
| 1687 serializedParameter.name, serializedParameter.nameOffset); | 1689 serializedParameter.name, nameOffset); |
| 1688 parameterElement = defaultParameter; | 1690 parameterElement = defaultParameter; |
| 1689 if (serializedParameter.defaultValue != null) { | 1691 if (serializedParameter.defaultValue != null) { |
| 1690 defaultParameter.constantInitializer = | 1692 defaultParameter.constantInitializer = |
| 1691 _buildConstExpression(serializedParameter.defaultValue); | 1693 _buildConstExpression(serializedParameter.defaultValue); |
| 1692 defaultParameter.defaultValueCode = | 1694 defaultParameter.defaultValueCode = |
| 1693 serializedParameter.defaultValueCode; | 1695 serializedParameter.defaultValueCode; |
| 1694 } | 1696 } |
| 1695 } | 1697 } |
| 1696 } | 1698 } |
| 1699 parameterElement.synthetic = synthetic; |
| 1697 buildAnnotations(parameterElement, serializedParameter.annotations); | 1700 buildAnnotations(parameterElement, serializedParameter.annotations); |
| 1698 if (serializedParameter.isFunctionTyped) { | 1701 if (serializedParameter.isFunctionTyped) { |
| 1699 FunctionElementImpl parameterTypeElement = | 1702 FunctionElementImpl parameterTypeElement = |
| 1700 new FunctionElementImpl('', -1); | 1703 new FunctionElementImpl('', -1); |
| 1701 parameterTypeElement.synthetic = true; | 1704 parameterTypeElement.synthetic = true; |
| 1702 parameterElement.parameters = | 1705 parameterElement.parameters = |
| 1703 serializedParameter.parameters.map(buildParameter).toList(); | 1706 serializedParameter.parameters.map(buildParameter).toList(); |
| 1704 parameterTypeElement.enclosingElement = parameterElement; | 1707 parameterTypeElement.enclosingElement = parameterElement; |
| 1705 parameterTypeElement.shareParameters(parameterElement.parameters); | 1708 parameterTypeElement.shareParameters(parameterElement.parameters); |
| 1706 parameterTypeElement.returnType = buildType(serializedParameter.type); | 1709 parameterTypeElement.returnType = buildType(serializedParameter.type); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1777 DartType buildType(EntityRef type, {bool defaultVoid: false}) { | 1780 DartType buildType(EntityRef type, {bool defaultVoid: false}) { |
| 1778 if (type == null) { | 1781 if (type == null) { |
| 1779 if (defaultVoid) { | 1782 if (defaultVoid) { |
| 1780 return VoidTypeImpl.instance; | 1783 return VoidTypeImpl.instance; |
| 1781 } else { | 1784 } else { |
| 1782 return summaryResynthesizer.typeProvider.dynamicType; | 1785 return summaryResynthesizer.typeProvider.dynamicType; |
| 1783 } | 1786 } |
| 1784 } | 1787 } |
| 1785 if (type.paramReference != 0) { | 1788 if (type.paramReference != 0) { |
| 1786 return getTypeParameterFromScope(type.paramReference); | 1789 return getTypeParameterFromScope(type.paramReference); |
| 1790 } else if (type.syntheticReturnType != null) { |
| 1791 FunctionElementImpl element = new FunctionElementImpl('', -1); |
| 1792 element.synthetic = true; |
| 1793 element.parameters = type.syntheticParams |
| 1794 .map((UnlinkedParam param) => buildParameter(param, synthetic: true)) |
| 1795 .toList(); |
| 1796 element.returnType = buildType(type.syntheticReturnType); |
| 1797 FunctionTypeImpl result = new FunctionTypeImpl.elementWithNameAndArgs( |
| 1798 element, null, null, false); |
| 1799 element.type = result; |
| 1800 return result; |
| 1787 } else { | 1801 } else { |
| 1788 DartType getTypeArgument(int i) { | 1802 DartType getTypeArgument(int i) { |
| 1789 if (i < type.typeArguments.length) { | 1803 if (i < type.typeArguments.length) { |
| 1790 return buildType(type.typeArguments[i]); | 1804 return buildType(type.typeArguments[i]); |
| 1791 } else { | 1805 } else { |
| 1792 return summaryResynthesizer.typeProvider.dynamicType; | 1806 return summaryResynthesizer.typeProvider.dynamicType; |
| 1793 } | 1807 } |
| 1794 } | 1808 } |
| 1795 _ReferenceInfo referenceInfo = referenceInfos[type.reference]; | 1809 _ReferenceInfo referenceInfo = referenceInfos[type.reference]; |
| 1796 return referenceInfo.buildType( | 1810 return referenceInfo.buildType( |
| (...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2432 List<DartType> typeArguments = const <DartType>[]; | 2446 List<DartType> typeArguments = const <DartType>[]; |
| 2433 if (numTypeArguments != 0) { | 2447 if (numTypeArguments != 0) { |
| 2434 typeArguments = <DartType>[]; | 2448 typeArguments = <DartType>[]; |
| 2435 for (int i = 0; i < numTypeArguments; i++) { | 2449 for (int i = 0; i < numTypeArguments; i++) { |
| 2436 typeArguments.add(getTypeArgument(i)); | 2450 typeArguments.add(getTypeArgument(i)); |
| 2437 } | 2451 } |
| 2438 } | 2452 } |
| 2439 return typeArguments; | 2453 return typeArguments; |
| 2440 } | 2454 } |
| 2441 } | 2455 } |
| OLD | NEW |