| 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/standard_ast_factory.dart'; | 10 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 libraryElement.exportNamespace = new Namespace({}); | 206 libraryElement.exportNamespace = new Namespace({}); |
| 207 return libraryElement; | 207 return libraryElement; |
| 208 } | 208 } |
| 209 UnlinkedUnit unlinkedSummary = getUnlinkedSummary(uri); | 209 UnlinkedUnit unlinkedSummary = getUnlinkedSummary(uri); |
| 210 if (unlinkedSummary == null) { | 210 if (unlinkedSummary == null) { |
| 211 throw new StateError('Unable to find unlinked summary: $uri'); | 211 throw new StateError('Unable to find unlinked summary: $uri'); |
| 212 } | 212 } |
| 213 List<UnlinkedUnit> serializedUnits = <UnlinkedUnit>[unlinkedSummary]; | 213 List<UnlinkedUnit> serializedUnits = <UnlinkedUnit>[unlinkedSummary]; |
| 214 for (String part in serializedUnits[0].publicNamespace.parts) { | 214 for (String part in serializedUnits[0].publicNamespace.parts) { |
| 215 Source partSource = sourceFactory.resolveUri(librarySource, part); | 215 Source partSource = sourceFactory.resolveUri(librarySource, part); |
| 216 if (partSource == null) { | 216 UnlinkedUnit partUnlinkedUnit; |
| 217 serializedUnits.add(null); | 217 if (partSource != null) { |
| 218 } else { | |
| 219 String partAbsUri = partSource.uri.toString(); | 218 String partAbsUri = partSource.uri.toString(); |
| 220 serializedUnits.add(getUnlinkedSummary(partAbsUri) ?? | 219 partUnlinkedUnit = getUnlinkedSummary(partAbsUri); |
| 221 new UnlinkedUnitBuilder(codeRange: new CodeRangeBuilder())); | |
| 222 } | 220 } |
| 221 serializedUnits.add(partUnlinkedUnit ?? |
| 222 new UnlinkedUnitBuilder(codeRange: new CodeRangeBuilder())); |
| 223 } | 223 } |
| 224 _LibraryResynthesizer libraryResynthesizer = new _LibraryResynthesizer( | 224 _LibraryResynthesizer libraryResynthesizer = new _LibraryResynthesizer( |
| 225 this, serializedLibrary, serializedUnits, librarySource); | 225 this, serializedLibrary, serializedUnits, librarySource); |
| 226 LibraryElement library = libraryResynthesizer.buildLibrary(); | 226 LibraryElement library = libraryResynthesizer.buildLibrary(); |
| 227 _resynthesizedUnits[uri] = libraryResynthesizer.resynthesizedUnits; | 227 _resynthesizedUnits[uri] = libraryResynthesizer.resynthesizedUnits; |
| 228 return library; | 228 return library; |
| 229 }); | 229 }); |
| 230 } | 230 } |
| 231 | 231 |
| 232 /** | 232 /** |
| (...skipping 797 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1030 } | 1030 } |
| 1031 | 1031 |
| 1032 /** | 1032 /** |
| 1033 * Create a [_UnitResynthesizer] that will resynthesize the part with the | 1033 * Create a [_UnitResynthesizer] that will resynthesize the part with the |
| 1034 * given [uri]. Return `null` if the [uri] is invalid. | 1034 * given [uri]. Return `null` if the [uri] is invalid. |
| 1035 */ | 1035 */ |
| 1036 _UnitResynthesizer buildPart(_UnitResynthesizer definingUnitResynthesizer, | 1036 _UnitResynthesizer buildPart(_UnitResynthesizer definingUnitResynthesizer, |
| 1037 String uri, UnlinkedPart partDecl, int unitNum) { | 1037 String uri, UnlinkedPart partDecl, int unitNum) { |
| 1038 Source unitSource = | 1038 Source unitSource = |
| 1039 summaryResynthesizer.sourceFactory.resolveUri(librarySource, uri); | 1039 summaryResynthesizer.sourceFactory.resolveUri(librarySource, uri); |
| 1040 if (unitSource == null) { | |
| 1041 return null; | |
| 1042 } | |
| 1043 _UnitResynthesizer partResynthesizer = | 1040 _UnitResynthesizer partResynthesizer = |
| 1044 createUnitResynthesizer(unitNum, unitSource, partDecl); | 1041 createUnitResynthesizer(unitNum, unitSource, partDecl); |
| 1045 CompilationUnitElementImpl partUnit = partResynthesizer.unit; | 1042 CompilationUnitElementImpl partUnit = partResynthesizer.unit; |
| 1046 partUnit.uriOffset = partDecl.uriOffset; | 1043 partUnit.uriOffset = partDecl.uriOffset; |
| 1047 partUnit.uriEnd = partDecl.uriEnd; | 1044 partUnit.uriEnd = partDecl.uriEnd; |
| 1048 partUnit.source = unitSource; | 1045 partUnit.source = unitSource; |
| 1049 partUnit.librarySource = librarySource; | 1046 partUnit.librarySource = librarySource; |
| 1050 partUnit.uri = uri; | 1047 partUnit.uri = uri; |
| 1051 return partResynthesizer; | 1048 return partResynthesizer; |
| 1052 } | 1049 } |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1094 partUri = partSource.uri.toString(); | 1091 partUri = partSource.uri.toString(); |
| 1095 } else { | 1092 } else { |
| 1096 partUri = referencedLibraryUri; | 1093 partUri = referencedLibraryUri; |
| 1097 } | 1094 } |
| 1098 return <String>[referencedLibraryUri, partUri, name]; | 1095 return <String>[referencedLibraryUri, partUri, name]; |
| 1099 } | 1096 } |
| 1100 | 1097 |
| 1101 /** | 1098 /** |
| 1102 * Remember the absolute URI to the corresponding unit mapping. | 1099 * Remember the absolute URI to the corresponding unit mapping. |
| 1103 */ | 1100 */ |
| 1104 void rememberUriToUnit(_UnitResynthesizer unitResynthesized) { | 1101 void rememberUriToUnit(_UnitResynthesizer unitResynthesizer) { |
| 1105 CompilationUnitElementImpl unit = unitResynthesized.unit; | 1102 CompilationUnitElementImpl unit = unitResynthesizer.unit; |
| 1106 String absoluteUri = unit.source.uri.toString(); | 1103 Source source = unit.source; |
| 1107 resynthesizedUnits[absoluteUri] = unit; | 1104 if (source != null) { |
| 1105 String absoluteUri = source.uri.toString(); |
| 1106 resynthesizedUnits[absoluteUri] = unit; |
| 1107 } |
| 1108 } | 1108 } |
| 1109 } | 1109 } |
| 1110 | 1110 |
| 1111 /** | 1111 /** |
| 1112 * Implementation of [LibraryResynthesizerContext] for [_LibraryResynthesizer]. | 1112 * Implementation of [LibraryResynthesizerContext] for [_LibraryResynthesizer]. |
| 1113 */ | 1113 */ |
| 1114 class _LibraryResynthesizerContext implements LibraryResynthesizerContext { | 1114 class _LibraryResynthesizerContext implements LibraryResynthesizerContext { |
| 1115 final _LibraryResynthesizer resynthesizer; | 1115 final _LibraryResynthesizer resynthesizer; |
| 1116 | 1116 |
| 1117 _LibraryResynthesizerContext(this.resynthesizer); | 1117 _LibraryResynthesizerContext(this.resynthesizer); |
| (...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1505 ResynthesizerContext _resynthesizerContext; | 1505 ResynthesizerContext _resynthesizerContext; |
| 1506 | 1506 |
| 1507 _UnitResynthesizer(this.libraryResynthesizer, this.unlinkedUnit, | 1507 _UnitResynthesizer(this.libraryResynthesizer, this.unlinkedUnit, |
| 1508 this.linkedUnit, Source unitSource, UnlinkedPart unlinkedPart) { | 1508 this.linkedUnit, Source unitSource, UnlinkedPart unlinkedPart) { |
| 1509 _resynthesizerContext = new _ResynthesizerContext(this); | 1509 _resynthesizerContext = new _ResynthesizerContext(this); |
| 1510 unit = new CompilationUnitElementImpl.forSerialized( | 1510 unit = new CompilationUnitElementImpl.forSerialized( |
| 1511 libraryResynthesizer.library, | 1511 libraryResynthesizer.library, |
| 1512 _resynthesizerContext, | 1512 _resynthesizerContext, |
| 1513 unlinkedUnit, | 1513 unlinkedUnit, |
| 1514 unlinkedPart, | 1514 unlinkedPart, |
| 1515 unitSource.shortName); | 1515 unitSource?.shortName); |
| 1516 | 1516 |
| 1517 { | 1517 { |
| 1518 List<int> lineStarts = unlinkedUnit.lineStarts; | 1518 List<int> lineStarts = unlinkedUnit.lineStarts; |
| 1519 if (lineStarts.isEmpty) { | 1519 if (lineStarts.isEmpty) { |
| 1520 lineStarts = const <int>[0]; | 1520 lineStarts = const <int>[0]; |
| 1521 } | 1521 } |
| 1522 unit.lineInfo = new LineInfo(lineStarts); | 1522 unit.lineInfo = new LineInfo(lineStarts); |
| 1523 } | 1523 } |
| 1524 | 1524 |
| 1525 for (EntityRef t in linkedUnit.types) { | 1525 for (EntityRef t in linkedUnit.types) { |
| (...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1962 static String _getElementIdentifier(String name, ReferenceKind kind) { | 1962 static String _getElementIdentifier(String name, ReferenceKind kind) { |
| 1963 if (kind == ReferenceKind.topLevelPropertyAccessor || | 1963 if (kind == ReferenceKind.topLevelPropertyAccessor || |
| 1964 kind == ReferenceKind.propertyAccessor) { | 1964 kind == ReferenceKind.propertyAccessor) { |
| 1965 if (!name.endsWith('=')) { | 1965 if (!name.endsWith('=')) { |
| 1966 return name + '?'; | 1966 return name + '?'; |
| 1967 } | 1967 } |
| 1968 } | 1968 } |
| 1969 return name; | 1969 return name; |
| 1970 } | 1970 } |
| 1971 } | 1971 } |
| OLD | NEW |