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

Unified Diff: pkg/analyzer/lib/src/summary/resynthesize.dart

Issue 2235373003: Fix summary handling of unresolved imports, exports, and parts. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Simplify `allowMissingFiles` Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/summary/index_unit.dart ('k') | pkg/analyzer/lib/src/task/dart.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/summary/resynthesize.dart
diff --git a/pkg/analyzer/lib/src/summary/resynthesize.dart b/pkg/analyzer/lib/src/summary/resynthesize.dart
index e929b6712c8c65a547a91658e08bd8450f7d169a..26068ac20e53ae391ff79e6ad7fcfd37421b2578 100644
--- a/pkg/analyzer/lib/src/summary/resynthesize.dart
+++ b/pkg/analyzer/lib/src/summary/resynthesize.dart
@@ -19,6 +19,7 @@ import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/source_io.dart';
import 'package:analyzer/src/generated/testing/ast_factory.dart';
import 'package:analyzer/src/generated/testing/token_factory.dart';
+import 'package:analyzer/src/summary/format.dart';
import 'package:analyzer/src/summary/idl.dart';
/**
@@ -151,6 +152,7 @@ abstract class SummaryResynthesizer extends ElementResynthesizer {
e is PropertyAccessorElementImpl ? e.identifier : e.name;
elementsInUnit[id] = e;
}
+
unitElement.accessors.forEach(putElement);
unitElement.enums.forEach(putElement);
unitElement.functions.forEach(putElement);
@@ -204,15 +206,29 @@ abstract class SummaryResynthesizer extends ElementResynthesizer {
return parent.getLibraryElement(uri);
}
return _resynthesizedLibraries.putIfAbsent(uri, () {
- LinkedLibrary serializedLibrary = _getLinkedSummaryOrThrow(uri);
- List<UnlinkedUnit> serializedUnits = <UnlinkedUnit>[
- _getUnlinkedSummaryOrThrow(uri)
- ];
+ LinkedLibrary serializedLibrary = _getLinkedSummaryOrNull(uri);
Source librarySource = _getSource(uri);
+ if (serializedLibrary == null) {
+ LibraryElementImpl libraryElement =
+ new LibraryElementImpl(context, '', -1, 0);
+ libraryElement.synthetic = true;
+ CompilationUnitElementImpl unitElement =
+ new CompilationUnitElementImpl(librarySource.shortName);
+ libraryElement.definingCompilationUnit = unitElement;
+ unitElement.source = librarySource;
+ unitElement.librarySource = librarySource;
+ return libraryElement..synthetic = true;
+ }
+ UnlinkedUnit unlinkedSummary = _getUnlinkedSummaryOrNull(uri);
+ if (unlinkedSummary == null) {
+ throw new StateError('Unable to find unlinked summary: $uri');
+ }
+ List<UnlinkedUnit> serializedUnits = <UnlinkedUnit>[unlinkedSummary];
for (String part in serializedUnits[0].publicNamespace.parts) {
Source partSource = sourceFactory.resolveUri(librarySource, part);
String partAbsUri = partSource.uri.toString();
- serializedUnits.add(_getUnlinkedSummaryOrThrow(partAbsUri));
+ serializedUnits.add(_getUnlinkedSummaryOrNull(partAbsUri) ??
+ new UnlinkedUnitBuilder(codeRange: new CodeRangeBuilder()));
}
_LibraryResynthesizer libraryResynthesizer = new _LibraryResynthesizer(
this, serializedLibrary, serializedUnits, librarySource);
@@ -244,18 +260,14 @@ abstract class SummaryResynthesizer extends ElementResynthesizer {
bool hasLibrarySummary(String uri);
/**
- * Return the [LinkedLibrary] for the given [uri] or throw [StateError] if it
+ * Return the [LinkedLibrary] for the given [uri] or return `null` if it
* could not be found.
*/
- LinkedLibrary _getLinkedSummaryOrThrow(String uri) {
+ LinkedLibrary _getLinkedSummaryOrNull(String uri) {
if (parent != null && parent._hasLibrarySummary(uri)) {
- return parent._getLinkedSummaryOrThrow(uri);
+ return parent._getLinkedSummaryOrNull(uri);
}
- LinkedLibrary summary = getLinkedSummary(uri);
- if (summary != null) {
- return summary;
- }
- throw new StateError('Unable to find linked summary: $uri');
+ return getLinkedSummary(uri);
}
/**
@@ -266,18 +278,14 @@ abstract class SummaryResynthesizer extends ElementResynthesizer {
}
/**
- * Return the [UnlinkedUnit] for the given [uri] or throw [StateError] if it
+ * Return the [UnlinkedUnit] for the given [uri] or return `null` if it
* could not be found.
*/
- UnlinkedUnit _getUnlinkedSummaryOrThrow(String uri) {
+ UnlinkedUnit _getUnlinkedSummaryOrNull(String uri) {
if (parent != null && parent._hasLibrarySummary(uri)) {
- return parent._getUnlinkedSummaryOrThrow(uri);
- }
- UnlinkedUnit summary = getUnlinkedSummary(uri);
- if (summary != null) {
- return summary;
+ return parent._getUnlinkedSummaryOrNull(uri);
}
- throw new StateError('Unable to find unlinked summary: $uri');
+ return getUnlinkedSummary(uri);
}
/**
@@ -1280,8 +1288,10 @@ class _ReferenceInfo {
typeArguments = element.typeParameters.map((typeParameter) {
DartType bound = typeParameter.bound;
return libraryResynthesizer.summaryResynthesizer.strongMode &&
- instantiateToBoundsAllowed &&
- bound != null ? bound : DynamicTypeImpl.instance;
+ instantiateToBoundsAllowed &&
+ bound != null
+ ? bound
+ : DynamicTypeImpl.instance;
}).toList();
}
return typeArguments;
@@ -1573,6 +1583,7 @@ class _UnitResynthesizer {
return DynamicTypeImpl.instance;
}
}
+
_ReferenceInfo referenceInfo = getReferenceInfo(type.reference);
return referenceInfo.buildType(
instantiateToBoundsAllowed,
« no previous file with comments | « pkg/analyzer/lib/src/summary/index_unit.dart ('k') | pkg/analyzer/lib/src/task/dart.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698