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 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1082 this.unlinkedUnits, this.librarySource) { | 1082 this.unlinkedUnits, this.librarySource) { |
1083 libraryUri = librarySource.uri.toString(); | 1083 libraryUri = librarySource.uri.toString(); |
1084 isCoreLibrary = libraryUri == 'dart:core'; | 1084 isCoreLibrary = libraryUri == 'dart:core'; |
1085 } | 1085 } |
1086 | 1086 |
1087 /** | 1087 /** |
1088 * Resynthesize a [NamespaceCombinator]. | 1088 * Resynthesize a [NamespaceCombinator]. |
1089 */ | 1089 */ |
1090 NamespaceCombinator buildCombinator(UnlinkedCombinator serializedCombinator) { | 1090 NamespaceCombinator buildCombinator(UnlinkedCombinator serializedCombinator) { |
1091 if (serializedCombinator.shows.isNotEmpty) { | 1091 if (serializedCombinator.shows.isNotEmpty) { |
1092 ShowElementCombinatorImpl combinator = new ShowElementCombinatorImpl(); | 1092 return new ShowElementCombinatorImpl.forSerialized(serializedCombinator); |
1093 // Note: we call toList() so that we don't retain a reference to the | |
1094 // deserialized data structure. | |
1095 combinator.shownNames = serializedCombinator.shows.toList(); | |
1096 combinator.offset = serializedCombinator.offset; | |
1097 combinator.end = serializedCombinator.end; | |
1098 return combinator; | |
1099 } else { | 1093 } else { |
1100 HideElementCombinatorImpl combinator = new HideElementCombinatorImpl(); | 1094 return new HideElementCombinatorImpl.forSerialized(serializedCombinator); |
1101 // Note: we call toList() so that we don't retain a reference to the | |
1102 // deserialized data structure. | |
1103 combinator.hiddenNames = serializedCombinator.hides.toList(); | |
1104 return combinator; | |
1105 } | 1095 } |
1106 } | 1096 } |
1107 | 1097 |
1108 /** | 1098 /** |
1109 * Resynthesize an [ExportElement], | 1099 * Resynthesize an [ExportElement], |
1110 */ | 1100 */ |
1111 ExportElement buildExport( | 1101 ExportElement buildExport( |
1112 _UnitResynthesizer definingUnitResynthesizer, | 1102 _UnitResynthesizer definingUnitResynthesizer, |
1113 UnlinkedExportPublic serializedExportPublic, | 1103 UnlinkedExportPublic serializedExportPublic, |
1114 UnlinkedExportNonPublic serializedExportNonPublic) { | 1104 UnlinkedExportNonPublic serializedExportNonPublic) { |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1181 }); | 1171 }); |
1182 // Add all the names from [exportNames]. | 1172 // Add all the names from [exportNames]. |
1183 for (LinkedExportName exportName in exportNames) { | 1173 for (LinkedExportName exportName in exportNames) { |
1184 definedNames.putIfAbsent( | 1174 definedNames.putIfAbsent( |
1185 exportName.name, () => buildExportName(exportName)); | 1175 exportName.name, () => buildExportName(exportName)); |
1186 } | 1176 } |
1187 return new Namespace(definedNames); | 1177 return new Namespace(definedNames); |
1188 } | 1178 } |
1189 | 1179 |
1190 /** | 1180 /** |
1191 * Resynthesize an [ImportElement]. | |
1192 */ | |
1193 ImportElement buildImport( | |
1194 _UnitResynthesizer definingUnitResynthesizer, | |
1195 UnlinkedImport serializedImport, | |
1196 int dependency, | |
1197 LibraryElement libraryBeingResynthesized) { | |
1198 ImportElementImpl importElement = new ImportElementImpl.forSerialized( | |
1199 serializedImport, dependency, library); | |
1200 importElement.combinators = | |
1201 serializedImport.combinators.map(buildCombinator).toList(); | |
1202 return importElement; | |
1203 } | |
1204 | |
1205 /** | |
1206 * Main entry point. Resynthesize the [LibraryElement] and return it. | 1181 * Main entry point. Resynthesize the [LibraryElement] and return it. |
1207 */ | 1182 */ |
1208 LibraryElement buildLibrary() { | 1183 LibraryElement buildLibrary() { |
1209 // Create LibraryElementImpl. | 1184 // Create LibraryElementImpl. |
1210 bool hasName = unlinkedUnits[0].libraryName.isNotEmpty; | 1185 bool hasName = unlinkedUnits[0].libraryName.isNotEmpty; |
1211 library = new LibraryElementImpl.forSerialized( | 1186 library = new LibraryElementImpl.forSerialized( |
1212 summaryResynthesizer.context, | 1187 summaryResynthesizer.context, |
1213 unlinkedUnits[0].libraryName, | 1188 unlinkedUnits[0].libraryName, |
1214 hasName ? unlinkedUnits[0].libraryNameOffset : -1, | 1189 hasName ? unlinkedUnits[0].libraryNameOffset : -1, |
1215 unlinkedUnits[0].libraryNameLength, | 1190 unlinkedUnits[0].libraryNameLength, |
(...skipping 13 matching lines...) Expand all Loading... |
1229 linkedLibrary.units.length); | 1204 linkedLibrary.units.length); |
1230 for (int i = 1; i < linkedLibrary.units.length; i++) { | 1205 for (int i = 1; i < linkedLibrary.units.length; i++) { |
1231 _UnitResynthesizer partResynthesizer = buildPart( | 1206 _UnitResynthesizer partResynthesizer = buildPart( |
1232 definingUnitResynthesizer, | 1207 definingUnitResynthesizer, |
1233 unlinkedDefiningUnit.publicNamespace.parts[i - 1], | 1208 unlinkedDefiningUnit.publicNamespace.parts[i - 1], |
1234 unlinkedDefiningUnit.parts[i - 1], | 1209 unlinkedDefiningUnit.parts[i - 1], |
1235 i); | 1210 i); |
1236 partResynthesizers.add(partResynthesizer); | 1211 partResynthesizers.add(partResynthesizer); |
1237 } | 1212 } |
1238 library.parts = partResynthesizers.map((r) => r.unit).toList(); | 1213 library.parts = partResynthesizers.map((r) => r.unit).toList(); |
1239 // Create imports. | |
1240 List<ImportElement> imports = <ImportElement>[]; | |
1241 for (int i = 0; i < unlinkedDefiningUnit.imports.length; i++) { | |
1242 imports.add(buildImport( | |
1243 definingUnitResynthesizer, | |
1244 unlinkedDefiningUnit.imports[i], | |
1245 linkedLibrary.importDependencies[i], | |
1246 library)); | |
1247 } | |
1248 library.imports = imports; | |
1249 // Create exports. | 1214 // Create exports. |
1250 List<ExportElement> exports = <ExportElement>[]; | 1215 List<ExportElement> exports = <ExportElement>[]; |
1251 assert(unlinkedDefiningUnit.exports.length == | 1216 assert(unlinkedDefiningUnit.exports.length == |
1252 unlinkedDefiningUnit.publicNamespace.exports.length); | 1217 unlinkedDefiningUnit.publicNamespace.exports.length); |
1253 for (int i = 0; i < unlinkedDefiningUnit.exports.length; i++) { | 1218 for (int i = 0; i < unlinkedDefiningUnit.exports.length; i++) { |
1254 exports.add(buildExport( | 1219 exports.add(buildExport( |
1255 definingUnitResynthesizer, | 1220 definingUnitResynthesizer, |
1256 unlinkedDefiningUnit.publicNamespace.exports[i], | 1221 unlinkedDefiningUnit.publicNamespace.exports[i], |
1257 unlinkedDefiningUnit.exports[i])); | 1222 unlinkedDefiningUnit.exports[i])); |
1258 } | 1223 } |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1361 | 1326 |
1362 /** | 1327 /** |
1363 * Implementation of [LibraryResynthesizerContext] for [_LibraryResynthesizer]. | 1328 * Implementation of [LibraryResynthesizerContext] for [_LibraryResynthesizer]. |
1364 */ | 1329 */ |
1365 class _LibraryResynthesizerContext implements LibraryResynthesizerContext { | 1330 class _LibraryResynthesizerContext implements LibraryResynthesizerContext { |
1366 final _LibraryResynthesizer resynthesizer; | 1331 final _LibraryResynthesizer resynthesizer; |
1367 | 1332 |
1368 _LibraryResynthesizerContext(this.resynthesizer); | 1333 _LibraryResynthesizerContext(this.resynthesizer); |
1369 | 1334 |
1370 @override | 1335 @override |
| 1336 LinkedLibrary get linkedLibrary => resynthesizer.linkedLibrary; |
| 1337 |
| 1338 @override |
1371 Namespace buildExportNamespace() { | 1339 Namespace buildExportNamespace() { |
1372 LibraryElementImpl library = resynthesizer.library; | 1340 LibraryElementImpl library = resynthesizer.library; |
1373 return resynthesizer.buildExportNamespace( | 1341 return resynthesizer.buildExportNamespace( |
1374 library.publicNamespace, resynthesizer.linkedLibrary.exportNames); | 1342 library.publicNamespace, resynthesizer.linkedLibrary.exportNames); |
1375 } | 1343 } |
1376 | 1344 |
1377 @override | 1345 @override |
1378 LibraryElement buildImportedLibrary(int dependency) { | 1346 LibraryElement buildImportedLibrary(int dependency) { |
1379 String depUri = resynthesizer.linkedLibrary.dependencies[dependency].uri; | 1347 String depUri = resynthesizer.linkedLibrary.dependencies[dependency].uri; |
1380 String absoluteUri = resynthesizer.summaryResynthesizer.sourceFactory | 1348 String absoluteUri = resynthesizer.summaryResynthesizer.sourceFactory |
(...skipping 1663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3044 static String _getElementIdentifier(String name, ReferenceKind kind) { | 3012 static String _getElementIdentifier(String name, ReferenceKind kind) { |
3045 if (kind == ReferenceKind.topLevelPropertyAccessor || | 3013 if (kind == ReferenceKind.topLevelPropertyAccessor || |
3046 kind == ReferenceKind.propertyAccessor) { | 3014 kind == ReferenceKind.propertyAccessor) { |
3047 if (!name.endsWith('=')) { | 3015 if (!name.endsWith('=')) { |
3048 return name + '?'; | 3016 return name + '?'; |
3049 } | 3017 } |
3050 } | 3018 } |
3051 return name; | 3019 return name; |
3052 } | 3020 } |
3053 } | 3021 } |
OLD | NEW |