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

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

Issue 1671293002: Resynthesize default parameter values. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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/element/element.dart'; 10 import 'package:analyzer/dart/element/element.dart';
(...skipping 1294 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/element.dart ('k') | pkg/analyzer/test/src/summary/resynthesize_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698