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

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

Issue 1762193002: Resynthesize codeOffset/codeLength properties. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Use CodeRange object. 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
« no previous file with comments | « pkg/analyzer/lib/src/summary/idl.dart ('k') | pkg/analyzer/lib/src/summary/summarize_ast.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 1002 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 } 1013 }
1014 classElement.constructors = memberHolder.constructors; 1014 classElement.constructors = memberHolder.constructors;
1015 } 1015 }
1016 classElement.accessors = memberHolder.accessors; 1016 classElement.accessors = memberHolder.accessors;
1017 classElement.fields = memberHolder.fields; 1017 classElement.fields = memberHolder.fields;
1018 classElement.methods = memberHolder.methods; 1018 classElement.methods = memberHolder.methods;
1019 correspondingType.typeArguments = getCurrentTypeArguments(); 1019 correspondingType.typeArguments = getCurrentTypeArguments();
1020 classElement.type = correspondingType; 1020 classElement.type = correspondingType;
1021 buildDocumentation(classElement, serializedClass.documentationComment); 1021 buildDocumentation(classElement, serializedClass.documentationComment);
1022 buildAnnotations(classElement, serializedClass.annotations); 1022 buildAnnotations(classElement, serializedClass.annotations);
1023 buildCodeRange(classElement, serializedClass.codeRange);
1023 resolveConstructorInitializers(classElement); 1024 resolveConstructorInitializers(classElement);
1024 unitHolder.addType(classElement); 1025 unitHolder.addType(classElement);
1025 currentTypeParameters.removeLast(); 1026 currentTypeParameters.removeLast();
1026 assert(currentTypeParameters.isEmpty); 1027 assert(currentTypeParameters.isEmpty);
1027 fields = null; 1028 fields = null;
1028 constructors = null; 1029 constructors = null;
1029 } 1030 }
1030 1031
1032 void buildCodeRange(ElementImpl element, CodeRange codeRange) {
1033 if (codeRange != null) {
1034 element.setCodeRange(codeRange.offset, codeRange.length);
1035 }
1036 }
1037
1031 /** 1038 /**
1032 * Resynthesize a [NamespaceCombinator]. 1039 * Resynthesize a [NamespaceCombinator].
1033 */ 1040 */
1034 NamespaceCombinator buildCombinator(UnlinkedCombinator serializedCombinator) { 1041 NamespaceCombinator buildCombinator(UnlinkedCombinator serializedCombinator) {
1035 if (serializedCombinator.shows.isNotEmpty) { 1042 if (serializedCombinator.shows.isNotEmpty) {
1036 ShowElementCombinatorImpl combinator = new ShowElementCombinatorImpl(); 1043 ShowElementCombinatorImpl combinator = new ShowElementCombinatorImpl();
1037 // Note: we call toList() so that we don't retain a reference to the 1044 // Note: we call toList() so that we don't retain a reference to the
1038 // deserialized data structure. 1045 // deserialized data structure.
1039 combinator.shownNames = serializedCombinator.shows.toList(); 1046 combinator.shownNames = serializedCombinator.shows.toList();
1040 combinator.offset = serializedCombinator.offset; 1047 combinator.offset = serializedCombinator.offset;
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1144 void buildEnum(UnlinkedEnum serializedEnum) { 1151 void buildEnum(UnlinkedEnum serializedEnum) {
1145 assert(!isCoreLibrary); 1152 assert(!isCoreLibrary);
1146 ClassElementImpl classElement = 1153 ClassElementImpl classElement =
1147 new ClassElementImpl(serializedEnum.name, serializedEnum.nameOffset); 1154 new ClassElementImpl(serializedEnum.name, serializedEnum.nameOffset);
1148 classElement.enum2 = true; 1155 classElement.enum2 = true;
1149 InterfaceType enumType = new InterfaceTypeImpl(classElement); 1156 InterfaceType enumType = new InterfaceTypeImpl(classElement);
1150 classElement.type = enumType; 1157 classElement.type = enumType;
1151 classElement.supertype = summaryResynthesizer.typeProvider.objectType; 1158 classElement.supertype = summaryResynthesizer.typeProvider.objectType;
1152 buildDocumentation(classElement, serializedEnum.documentationComment); 1159 buildDocumentation(classElement, serializedEnum.documentationComment);
1153 buildAnnotations(classElement, serializedEnum.annotations); 1160 buildAnnotations(classElement, serializedEnum.annotations);
1161 buildCodeRange(classElement, serializedEnum.codeRange);
1154 ElementHolder memberHolder = new ElementHolder(); 1162 ElementHolder memberHolder = new ElementHolder();
1155 // Build the 'index' field. 1163 // Build the 'index' field.
1156 FieldElementImpl indexField = new FieldElementImpl('index', -1); 1164 FieldElementImpl indexField = new FieldElementImpl('index', -1);
1157 indexField.final2 = true; 1165 indexField.final2 = true;
1158 indexField.synthetic = true; 1166 indexField.synthetic = true;
1159 indexField.type = summaryResynthesizer.typeProvider.intType; 1167 indexField.type = summaryResynthesizer.typeProvider.intType;
1160 memberHolder.addField(indexField); 1168 memberHolder.addField(indexField);
1161 buildImplicitAccessors(indexField, memberHolder); 1169 buildImplicitAccessors(indexField, memberHolder);
1162 // Build the 'values' field. 1170 // Build the 'values' field.
1163 FieldElementImpl valuesField = new ConstFieldElementImpl('values', -1); 1171 FieldElementImpl valuesField = new ConstFieldElementImpl('values', -1);
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1299 defaultVoid: isSetter && summaryResynthesizer.strongMode); 1307 defaultVoid: isSetter && summaryResynthesizer.strongMode);
1300 executableElement.hasImplicitReturnType = 1308 executableElement.hasImplicitReturnType =
1301 serializedExecutable.returnType == null; 1309 serializedExecutable.returnType == null;
1302 } 1310 }
1303 executableElement.type = new FunctionTypeImpl.elementWithNameAndArgs( 1311 executableElement.type = new FunctionTypeImpl.elementWithNameAndArgs(
1304 executableElement, null, getCurrentTypeArguments(skipLevels: 1), false); 1312 executableElement, null, getCurrentTypeArguments(skipLevels: 1), false);
1305 executableElement.external = serializedExecutable.isExternal; 1313 executableElement.external = serializedExecutable.isExternal;
1306 buildDocumentation( 1314 buildDocumentation(
1307 executableElement, serializedExecutable.documentationComment); 1315 executableElement, serializedExecutable.documentationComment);
1308 buildAnnotations(executableElement, serializedExecutable.annotations); 1316 buildAnnotations(executableElement, serializedExecutable.annotations);
1317 buildCodeRange(executableElement, serializedExecutable.codeRange);
1309 executableElement.functions = 1318 executableElement.functions =
1310 serializedExecutable.localFunctions.map(buildLocalFunction).toList(); 1319 serializedExecutable.localFunctions.map(buildLocalFunction).toList();
1311 executableElement.labels = 1320 executableElement.labels =
1312 serializedExecutable.localLabels.map(buildLocalLabel).toList(); 1321 serializedExecutable.localLabels.map(buildLocalLabel).toList();
1313 executableElement.localVariables = 1322 executableElement.localVariables =
1314 serializedExecutable.localVariables.map(buildLocalVariable).toList(); 1323 serializedExecutable.localVariables.map(buildLocalVariable).toList();
1315 currentTypeParameters.removeLast(); 1324 currentTypeParameters.removeLast();
1316 } 1325 }
1317 1326
1318 /** 1327 /**
(...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after
1700 if (serializedParameter.defaultValue != null) { 1709 if (serializedParameter.defaultValue != null) {
1701 defaultParameter.constantInitializer = 1710 defaultParameter.constantInitializer =
1702 _buildConstExpression(serializedParameter.defaultValue); 1711 _buildConstExpression(serializedParameter.defaultValue);
1703 defaultParameter.defaultValueCode = 1712 defaultParameter.defaultValueCode =
1704 serializedParameter.defaultValueCode; 1713 serializedParameter.defaultValueCode;
1705 } 1714 }
1706 } 1715 }
1707 } 1716 }
1708 parameterElement.synthetic = synthetic; 1717 parameterElement.synthetic = synthetic;
1709 buildAnnotations(parameterElement, serializedParameter.annotations); 1718 buildAnnotations(parameterElement, serializedParameter.annotations);
1719 buildCodeRange(parameterElement, serializedParameter.codeRange);
1710 if (serializedParameter.isFunctionTyped) { 1720 if (serializedParameter.isFunctionTyped) {
1711 FunctionElementImpl parameterTypeElement = 1721 FunctionElementImpl parameterTypeElement =
1712 new FunctionElementImpl('', -1); 1722 new FunctionElementImpl('', -1);
1713 parameterTypeElement.synthetic = true; 1723 parameterTypeElement.synthetic = true;
1714 parameterElement.parameters = 1724 parameterElement.parameters =
1715 serializedParameter.parameters.map(buildParameter).toList(); 1725 serializedParameter.parameters.map(buildParameter).toList();
1716 parameterTypeElement.enclosingElement = parameterElement; 1726 parameterTypeElement.enclosingElement = parameterElement;
1717 parameterTypeElement.shareParameters(parameterElement.parameters); 1727 parameterTypeElement.shareParameters(parameterElement.parameters);
1718 parameterTypeElement.returnType = buildType(serializedParameter.type); 1728 parameterTypeElement.returnType = buildType(serializedParameter.type);
1719 parameterElement.type = new FunctionTypeImpl.elementWithNameAndArgs( 1729 parameterElement.type = new FunctionTypeImpl.elementWithNameAndArgs(
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1833 buildTypeParameters(serializedTypedef.typeParameters); 1843 buildTypeParameters(serializedTypedef.typeParameters);
1834 functionTypeAliasElement.parameters = 1844 functionTypeAliasElement.parameters =
1835 serializedTypedef.parameters.map(buildParameter).toList(); 1845 serializedTypedef.parameters.map(buildParameter).toList();
1836 functionTypeAliasElement.returnType = 1846 functionTypeAliasElement.returnType =
1837 buildType(serializedTypedef.returnType); 1847 buildType(serializedTypedef.returnType);
1838 functionTypeAliasElement.type = 1848 functionTypeAliasElement.type =
1839 new FunctionTypeImpl.forTypedef(functionTypeAliasElement); 1849 new FunctionTypeImpl.forTypedef(functionTypeAliasElement);
1840 buildDocumentation( 1850 buildDocumentation(
1841 functionTypeAliasElement, serializedTypedef.documentationComment); 1851 functionTypeAliasElement, serializedTypedef.documentationComment);
1842 buildAnnotations(functionTypeAliasElement, serializedTypedef.annotations); 1852 buildAnnotations(functionTypeAliasElement, serializedTypedef.annotations);
1853 buildCodeRange(functionTypeAliasElement, serializedTypedef.codeRange);
1843 unitHolder.addTypeAlias(functionTypeAliasElement); 1854 unitHolder.addTypeAlias(functionTypeAliasElement);
1844 currentTypeParameters.removeLast(); 1855 currentTypeParameters.removeLast();
1845 assert(currentTypeParameters.isEmpty); 1856 assert(currentTypeParameters.isEmpty);
1846 } 1857 }
1847 1858
1848 /** 1859 /**
1849 * Resynthesize a [TypeParameterElement], handling all parts of its except 1860 * Resynthesize a [TypeParameterElement], handling all parts of its except
1850 * its bound. 1861 * its bound.
1851 * 1862 *
1852 * The bound is deferred until later since it may refer to other type 1863 * The bound is deferred until later since it may refer to other type
1853 * parameters that have not been resynthesized yet. To handle the bound, 1864 * parameters that have not been resynthesized yet. To handle the bound,
1854 * call [finishTypeParameter]. 1865 * call [finishTypeParameter].
1855 */ 1866 */
1856 TypeParameterElement buildTypeParameter( 1867 TypeParameterElement buildTypeParameter(
1857 UnlinkedTypeParam serializedTypeParameter) { 1868 UnlinkedTypeParam serializedTypeParameter) {
1858 TypeParameterElementImpl typeParameterElement = 1869 TypeParameterElementImpl typeParameterElement =
1859 new TypeParameterElementImpl( 1870 new TypeParameterElementImpl(
1860 serializedTypeParameter.name, serializedTypeParameter.nameOffset); 1871 serializedTypeParameter.name, serializedTypeParameter.nameOffset);
1861 typeParameterElement.type = new TypeParameterTypeImpl(typeParameterElement); 1872 typeParameterElement.type = new TypeParameterTypeImpl(typeParameterElement);
1862 buildAnnotations(typeParameterElement, serializedTypeParameter.annotations); 1873 buildAnnotations(typeParameterElement, serializedTypeParameter.annotations);
1874 buildCodeRange(typeParameterElement, serializedTypeParameter.codeRange);
1863 return typeParameterElement; 1875 return typeParameterElement;
1864 } 1876 }
1865 1877
1866 /** 1878 /**
1867 * Build [TypeParameterElement]s corresponding to the type parameters in 1879 * Build [TypeParameterElement]s corresponding to the type parameters in
1868 * [serializedTypeParameters] and store them in [currentTypeParameters]. 1880 * [serializedTypeParameters] and store them in [currentTypeParameters].
1869 * Also return them. 1881 * Also return them.
1870 */ 1882 */
1871 List<TypeParameterElement> buildTypeParameters( 1883 List<TypeParameterElement> buildTypeParameters(
1872 List<UnlinkedTypeParam> serializedTypeParameters) { 1884 List<UnlinkedTypeParam> serializedTypeParameters) {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1926 void buildVariableCommonParts( 1938 void buildVariableCommonParts(
1927 VariableElementImpl element, UnlinkedVariable serializedVariable) { 1939 VariableElementImpl element, UnlinkedVariable serializedVariable) {
1928 element.type = buildLinkedType(serializedVariable.inferredTypeSlot) ?? 1940 element.type = buildLinkedType(serializedVariable.inferredTypeSlot) ??
1929 buildType(serializedVariable.type); 1941 buildType(serializedVariable.type);
1930 element.const3 = serializedVariable.isConst; 1942 element.const3 = serializedVariable.isConst;
1931 element.final2 = serializedVariable.isFinal; 1943 element.final2 = serializedVariable.isFinal;
1932 element.hasImplicitType = serializedVariable.type == null; 1944 element.hasImplicitType = serializedVariable.type == null;
1933 buildVariableInitializer(element, serializedVariable.initializer); 1945 buildVariableInitializer(element, serializedVariable.initializer);
1934 buildDocumentation(element, serializedVariable.documentationComment); 1946 buildDocumentation(element, serializedVariable.documentationComment);
1935 buildAnnotations(element, serializedVariable.annotations); 1947 buildAnnotations(element, serializedVariable.annotations);
1948 buildCodeRange(element, serializedVariable.codeRange);
1936 } 1949 }
1937 1950
1938 /** 1951 /**
1939 * If the given [serializedInitializer] is not `null`, create the 1952 * If the given [serializedInitializer] is not `null`, create the
1940 * corresponding [FunctionElementImpl] and set it for the [variable]. 1953 * corresponding [FunctionElementImpl] and set it for the [variable].
1941 */ 1954 */
1942 void buildVariableInitializer( 1955 void buildVariableInitializer(
1943 VariableElementImpl variable, UnlinkedExecutable serializedInitializer) { 1956 VariableElementImpl variable, UnlinkedExecutable serializedInitializer) {
1944 if (serializedInitializer == null) { 1957 if (serializedInitializer == null) {
1945 return null; 1958 return null;
1946 } 1959 }
1947 FunctionElementImpl initializerElement = 1960 FunctionElementImpl initializerElement =
1948 buildLocalFunction(serializedInitializer); 1961 buildLocalFunction(serializedInitializer);
1949 initializerElement.synthetic = true; 1962 initializerElement.synthetic = true;
1963 initializerElement.setCodeRange(null, null);
1950 variable.initializer = initializerElement; 1964 variable.initializer = initializerElement;
1951 } 1965 }
1952 1966
1953 /** 1967 /**
1954 * Finish creating a [TypeParameterElement] by deserializing its bound. 1968 * Finish creating a [TypeParameterElement] by deserializing its bound.
1955 */ 1969 */
1956 void finishTypeParameter(UnlinkedTypeParam serializedTypeParameter, 1970 void finishTypeParameter(UnlinkedTypeParam serializedTypeParameter,
1957 TypeParameterElementImpl typeParameterElement) { 1971 TypeParameterElementImpl typeParameterElement) {
1958 if (serializedTypeParameter.bound != null) { 1972 if (serializedTypeParameter.bound != null) {
1959 typeParameterElement.bound = buildType(serializedTypeParameter.bound); 1973 typeParameterElement.bound = buildType(serializedTypeParameter.bound);
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
2197 } 2211 }
2198 for (FunctionTypeAliasElement typeAlias in unit.functionTypeAliases) { 2212 for (FunctionTypeAliasElement typeAlias in unit.functionTypeAliases) {
2199 elementMap[typeAlias.name] = typeAlias; 2213 elementMap[typeAlias.name] = typeAlias;
2200 } 2214 }
2201 for (FunctionElement function in unit.functions) { 2215 for (FunctionElement function in unit.functions) {
2202 elementMap[function.name] = function; 2216 elementMap[function.name] = function;
2203 } 2217 }
2204 for (PropertyAccessorElementImpl accessor in unit.accessors) { 2218 for (PropertyAccessorElementImpl accessor in unit.accessors) {
2205 elementMap[accessor.identifier] = accessor; 2219 elementMap[accessor.identifier] = accessor;
2206 } 2220 }
2221 buildCodeRange(unit, unlinkedUnit.codeRange);
2207 resynthesizedUnits[absoluteUri] = unit; 2222 resynthesizedUnits[absoluteUri] = unit;
2208 resynthesizedElements[absoluteUri] = elementMap; 2223 resynthesizedElements[absoluteUri] = elementMap;
2209 assert(currentTypeParameters.isEmpty); 2224 assert(currentTypeParameters.isEmpty);
2210 } 2225 }
2211 2226
2212 /** 2227 /**
2213 * Set up data structures for deserializing a compilation unit. 2228 * Set up data structures for deserializing a compilation unit.
2214 */ 2229 */
2215 void prepareUnit(CompilationUnitElementImpl unit, int unitNum) { 2230 void prepareUnit(CompilationUnitElementImpl unit, int unitNum) {
2216 linkedUnit = linkedLibrary.units[unitNum]; 2231 linkedUnit = linkedLibrary.units[unitNum];
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
2457 List<DartType> typeArguments = const <DartType>[]; 2472 List<DartType> typeArguments = const <DartType>[];
2458 if (numTypeArguments != 0) { 2473 if (numTypeArguments != 0) {
2459 typeArguments = <DartType>[]; 2474 typeArguments = <DartType>[];
2460 for (int i = 0; i < numTypeArguments; i++) { 2475 for (int i = 0; i < numTypeArguments; i++) {
2461 typeArguments.add(getTypeArgument(i)); 2476 typeArguments.add(getTypeArgument(i));
2462 } 2477 }
2463 } 2478 }
2464 return typeArguments; 2479 return typeArguments;
2465 } 2480 }
2466 } 2481 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/summary/idl.dart ('k') | pkg/analyzer/lib/src/summary/summarize_ast.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698