Index: lib/src/analysis_context.dart |
diff --git a/lib/src/analysis_context.dart b/lib/src/analysis_context.dart |
index b6e74a4eca1824e553cb43ab2c6e891bf550cd2d..26677b19fd293702adafa9e8c641091f3c71caaa 100644 |
--- a/lib/src/analysis_context.dart |
+++ b/lib/src/analysis_context.dart |
@@ -63,7 +63,21 @@ UriResolver _createImplicitEntryResolver(ResolverOptions options) { |
var provider = new MemoryResourceProvider(); |
provider.newFile( |
entry, '<body><script type="application/dart" src="$src"></script>'); |
- return new ResourceUriResolver(provider); |
+ return new ExistingSourceUriResolver(new ResourceUriResolver(provider)); |
+} |
+ |
+/// A UriResolver that continues to the next one if it fails to find an existing |
+/// source file. This is unlike normal URI resolvers, that always return |
+/// something, even if it is a non-existing file. |
+class ExistingSourceUriResolver implements UriResolver { |
+ final UriResolver resolver; |
+ ExistingSourceUriResolver(this.resolver); |
+ |
+ Source resolveAbsolute(Uri uri) { |
+ var src = resolver.resolveAbsolute(uri); |
+ return src.exists() ? src : null; |
+ } |
+ Uri restoreAbsolute(Source source) => resolver.restoreAbsolute(source); |
} |
/// Creates an analysis context that contains our restricted typing rules. |