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 1491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1502 elementAnnotation.annotationAst = AstFactory.annotation2( | 1502 elementAnnotation.annotationAst = AstFactory.annotation2( |
1503 typeName, constructorName, constExpr.argumentList); | 1503 typeName, constructorName, constExpr.argumentList); |
1504 } else { | 1504 } else { |
1505 throw new StateError( | 1505 throw new StateError( |
1506 'Unexpected annotation type: ${constExpr.runtimeType}'); | 1506 'Unexpected annotation type: ${constExpr.runtimeType}'); |
1507 } | 1507 } |
1508 return elementAnnotation; | 1508 return elementAnnotation; |
1509 } | 1509 } |
1510 | 1510 |
1511 /** | 1511 /** |
1512 * Build the annotations for the given [element]. | |
1513 */ | |
1514 void buildAnnotations( | |
1515 ElementImpl element, List<UnlinkedConst> serializedAnnotations) { | |
1516 if (serializedAnnotations.isNotEmpty) { | |
1517 element.metadata = serializedAnnotations | |
1518 .map((a) => buildAnnotation(element, a)) | |
1519 .toList(); | |
1520 } | |
1521 } | |
1522 | |
1523 /** | |
1524 * Resynthesize a [ClassElement] and place it in [unitHolder]. | |
1525 */ | |
1526 void buildClass(UnlinkedClass serializedClass) { | |
1527 ClassElementImpl classElement = | |
1528 new ClassElementImpl.forSerialized(serializedClass, unit); | |
1529 classElement.hasBeenInferred = summaryResynthesizer.strongMode; | |
1530 unitHolder.addType(classElement); | |
1531 } | |
1532 | |
1533 /** | |
1534 * Build the documentation for the given [element]. Does nothing if | 1512 * Build the documentation for the given [element]. Does nothing if |
1535 * [serializedDocumentationComment] is `null`. | 1513 * [serializedDocumentationComment] is `null`. |
1536 */ | 1514 */ |
1537 void buildDocumentation(ElementImpl element, | 1515 void buildDocumentation(ElementImpl element, |
1538 UnlinkedDocumentationComment serializedDocumentationComment) { | 1516 UnlinkedDocumentationComment serializedDocumentationComment) { |
1539 if (serializedDocumentationComment != null) { | 1517 if (serializedDocumentationComment != null) { |
1540 element.documentationComment = serializedDocumentationComment.text; | 1518 element.documentationComment = serializedDocumentationComment.text; |
1541 element.setDocRange(serializedDocumentationComment.offset, | 1519 element.setDocRange(serializedDocumentationComment.offset, |
1542 serializedDocumentationComment.length); | 1520 serializedDocumentationComment.length); |
1543 } | 1521 } |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1594 // Build the value of the 'values' field. | 1572 // Build the value of the 'values' field. |
1595 valuesField.evaluationResult = new EvaluationResultImpl( | 1573 valuesField.evaluationResult = new EvaluationResultImpl( |
1596 new DartObjectImpl(valuesField.type, new ListState(constantValues))); | 1574 new DartObjectImpl(valuesField.type, new ListState(constantValues))); |
1597 // done | 1575 // done |
1598 classElement.fields = memberHolder.fields; | 1576 classElement.fields = memberHolder.fields; |
1599 classElement.accessors = memberHolder.accessors; | 1577 classElement.accessors = memberHolder.accessors; |
1600 unitHolder.addEnum(classElement); | 1578 unitHolder.addEnum(classElement); |
1601 } | 1579 } |
1602 | 1580 |
1603 /** | 1581 /** |
1604 * Resynthesize a [FieldElement]. | |
1605 */ | |
1606 void buildField(ClassElementImpl enclosingClass, | |
1607 UnlinkedVariable serializedVariable, ElementHolder holder) { | |
1608 FieldElementImpl element = new FieldElementImpl.forSerializedFactory( | |
1609 serializedVariable, enclosingClass); | |
1610 holder.addField(element); | |
1611 buildImplicitAccessors(element, holder); | |
1612 } | |
1613 | |
1614 /** | |
1615 * Build the implicit getter and setter associated with [element], and place | 1582 * Build the implicit getter and setter associated with [element], and place |
1616 * them in [holder]. | 1583 * them in [holder]. |
1617 */ | 1584 */ |
1618 void buildImplicitAccessors( | 1585 void buildImplicitAccessors( |
1619 PropertyInducingElementImpl element, ElementHolder holder) { | 1586 PropertyInducingElementImpl element, ElementHolder holder) { |
1620 PropertyAccessorElementImpl getter = buildImplicitGetter(element); | 1587 PropertyAccessorElementImpl getter = buildImplicitGetter(element); |
1621 holder?.addAccessor(getter); | 1588 holder?.addAccessor(getter); |
1622 if (!(element.isConst || element.isFinal)) { | 1589 if (!(element.isConst || element.isFinal)) { |
1623 PropertyAccessorElementImpl setter = buildImplicitSetter(element); | 1590 PropertyAccessorElementImpl setter = buildImplicitSetter(element); |
1624 holder?.addAccessor(setter); | 1591 holder?.addAccessor(setter); |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1891 referenceInfos[index] = result; | 1858 referenceInfos[index] = result; |
1892 } | 1859 } |
1893 return result; | 1860 return result; |
1894 } | 1861 } |
1895 | 1862 |
1896 /** | 1863 /** |
1897 * Populate a [CompilationUnitElement] by deserializing all the elements | 1864 * Populate a [CompilationUnitElement] by deserializing all the elements |
1898 * contained in it. | 1865 * contained in it. |
1899 */ | 1866 */ |
1900 void populateUnit() { | 1867 void populateUnit() { |
1901 unlinkedUnit.classes.forEach(buildClass); | |
1902 unlinkedUnit.enums.forEach(buildEnum); | 1868 unlinkedUnit.enums.forEach(buildEnum); |
1903 unit.enums = unitHolder.enums; | 1869 unit.enums = unitHolder.enums; |
1904 unit.types = unitHolder.types; | |
1905 } | 1870 } |
1906 | 1871 |
1907 Expression _buildConstExpression(ElementImpl context, UnlinkedConst uc) { | 1872 Expression _buildConstExpression(ElementImpl context, UnlinkedConst uc) { |
1908 return new _ConstExprBuilder(this, context, uc).build(); | 1873 return new _ConstExprBuilder(this, context, uc).build(); |
1909 } | 1874 } |
1910 | 1875 |
1911 /** | 1876 /** |
1912 * Return the defining type for a [ConstructorElement] by applying | 1877 * Return the defining type for a [ConstructorElement] by applying |
1913 * [typeArgumentRefs] to the given linked [info]. | 1878 * [typeArgumentRefs] to the given linked [info]. |
1914 */ | 1879 */ |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1973 static String _getElementIdentifier(String name, ReferenceKind kind) { | 1938 static String _getElementIdentifier(String name, ReferenceKind kind) { |
1974 if (kind == ReferenceKind.topLevelPropertyAccessor || | 1939 if (kind == ReferenceKind.topLevelPropertyAccessor || |
1975 kind == ReferenceKind.propertyAccessor) { | 1940 kind == ReferenceKind.propertyAccessor) { |
1976 if (!name.endsWith('=')) { | 1941 if (!name.endsWith('=')) { |
1977 return name + '?'; | 1942 return name + '?'; |
1978 } | 1943 } |
1979 } | 1944 } |
1980 return name; | 1945 return name; |
1981 } | 1946 } |
1982 } | 1947 } |
OLD | NEW |