Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(201)

Side by Side Diff: pkg/analyzer/lib/src/summary/resynthesize.dart

Issue 1740923002: Propertly summarize LUB function types. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/idl.dart ('k') | pkg/analyzer/lib/src/summary/summarize_elements.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698