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

Unified Diff: pkg/analyzer/test/src/summary/resynthesize_ast_test.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/task/dart.dart ('k') | pkg/analyzer/test/src/summary/resynthesize_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
index cb6cfeb2ec1f3383c446e0e09543cfc5583efae2..bca50680f91b3ad1563ded74aa2007a448c89059 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
@@ -20,6 +20,7 @@ import 'package:analyzer/src/summary/summarize_ast.dart';
import 'package:analyzer/src/summary/summarize_elements.dart'
show PackageBundleAssembler;
import 'package:analyzer/task/dart.dart' show PARSED_UNIT;
+import 'package:analyzer/task/general.dart';
import 'package:unittest/unittest.dart';
import '../../reflective_tests.dart';
@@ -714,7 +715,8 @@ class ResynthesizeAstTest extends ResynthesizeTest
/**
* Abstract mixin for serializing ASTs and resynthesizing elements from it.
*/
-abstract class _AstResynthesizeTestMixin {
+abstract class _AstResynthesizeTestMixin
+ implements _AstResynthesizeTestMixinInterface {
final Set<Source> serializedSources = new Set<Source>();
final PackageBundleAssembler bundleAssembler = new PackageBundleAssembler();
final Map<String, UnlinkedUnitBuilder> uriToUnit =
@@ -743,7 +745,7 @@ abstract class _AstResynthesizeTestMixin {
Map<String, LinkedLibrary> sdkLibraries =
SerializedMockSdk.instance.uriToLinkedLibrary;
LinkedLibrary linkedLibrary = sdkLibraries[absoluteUri];
- if (linkedLibrary == null) {
+ if (linkedLibrary == null && !allowMissingFiles) {
fail('Linker unexpectedly requested LinkedLibrary for "$absoluteUri".'
' Libraries available: ${sdkLibraries.keys}');
}
@@ -753,7 +755,7 @@ abstract class _AstResynthesizeTestMixin {
UnlinkedUnit getUnit(String absoluteUri) {
UnlinkedUnit unit = uriToUnit[absoluteUri] ??
SerializedMockSdk.instance.uriToUnlinkedUnit[absoluteUri];
- if (unit == null) {
+ if (unit == null && !allowMissingFiles) {
fail('Linker unexpectedly requested unit for "$absoluteUri".');
}
return unit;
@@ -777,7 +779,8 @@ abstract class _AstResynthesizeTestMixin {
..addAll(unlinkedSummaries),
new Map<String, LinkedLibrary>()
..addAll(SerializedMockSdk.instance.uriToLinkedLibrary)
- ..addAll(linkedSummaries));
+ ..addAll(linkedSummaries),
+ allowMissingFiles);
}
UnlinkedUnit _getUnlinkedUnit(Source source) {
@@ -790,6 +793,14 @@ abstract class _AstResynthesizeTestMixin {
}
}
return uriToUnit.putIfAbsent(uriStr, () {
+ int modificationTime = context.computeResult(source, MODIFICATION_TIME);
+ if (modificationTime < 0) {
+ // Source does not exist.
+ if (!allowMissingFiles) {
+ fail('Unexpectedly tried to get unlinked summary for $source');
+ }
+ return null;
+ }
CompilationUnit unit = context.computeResult(source, PARSED_UNIT);
UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
bundleAssembler.addUnlinkedUnit(source, unlinkedUnit);
@@ -820,14 +831,30 @@ abstract class _AstResynthesizeTestMixin {
}
UnlinkedPublicNamespace getImport(String relativeUri) {
- return getPart(relativeUri).publicNamespace;
+ return getPart(relativeUri)?.publicNamespace;
}
UnlinkedUnit definingUnit = _getUnlinkedUnit(librarySource);
- LinkedLibraryBuilder linkedLibrary =
- prelink(definingUnit, getPart, getImport);
- linkedLibrary.dependencies.skip(1).forEach((LinkedDependency d) {
- _serializeLibrary(resolveRelativeUri(d.uri));
- });
+ if (definingUnit != null) {
+ LinkedLibraryBuilder linkedLibrary =
+ prelink(definingUnit, getPart, getImport);
+ linkedLibrary.dependencies.skip(1).forEach((LinkedDependency d) {
+ _serializeLibrary(resolveRelativeUri(d.uri));
+ });
+ }
}
}
+
+/**
+ * Interface that [_AstResynthesizeTestMixin] requires of classes it's mixed
+ * into. We can't place the getter below into [_AstResynthesizeTestMixin]
+ * directly, because then it would be overriding a field at the site where the
+ * mixin is instantiated.
+ */
+abstract class _AstResynthesizeTestMixinInterface {
+ /**
+ * A test should return `true` to indicate that a missing file at the time of
+ * summary resynthesis shouldn't trigger an error.
+ */
+ bool get allowMissingFiles;
+}
« no previous file with comments | « pkg/analyzer/lib/src/task/dart.dart ('k') | pkg/analyzer/test/src/summary/resynthesize_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698