Index: lib/src/analysis_context.dart |
diff --git a/lib/src/analysis_context.dart b/lib/src/analysis_context.dart |
index e323783f9b043992641a04f9346ddc74fa5a2cf1..6dcaaa8d500792217d38d91db3bd7513f647f2bc 100644 |
--- a/lib/src/analysis_context.dart |
+++ b/lib/src/analysis_context.dart |
@@ -4,14 +4,11 @@ |
library dev_compiler.src.analysis_context; |
-import 'package:analyzer/file_system/file_system.dart'; |
-import 'package:analyzer/file_system/memory_file_system.dart'; |
import 'package:analyzer/src/generated/engine.dart'; |
import 'package:analyzer/src/generated/java_io.dart' show JavaFile; |
import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk; |
import 'package:analyzer/src/generated/source.dart' show DartUriResolver; |
import 'package:analyzer/src/generated/source_io.dart'; |
-import 'package:path/path.dart' as path; |
import 'package:dev_compiler/strong_mode.dart' show StrongModeOptions; |
@@ -33,11 +30,18 @@ AnalysisContext createAnalysisContextWithSources( |
/// Creates an analysis context that contains our restricted typing rules. |
AnalysisContext createAnalysisContext(StrongModeOptions options) { |
AnalysisContextImpl res = AnalysisEngine.instance.createAnalysisContext(); |
- res.libraryResolverFactory = |
- (context) => new LibraryResolverWithInference(context, options); |
+ enableDevCompilerInference(res, options); |
return res; |
} |
+/// Enables dev_compiler inference rules. |
+// TODO(jmesserly): is there a cleaner way to plug this in? |
+void enableDevCompilerInference( |
+ AnalysisContextImpl context, StrongModeOptions options) { |
+ context.libraryResolverFactory = |
+ (c) => new LibraryResolverWithInference(c, options); |
+} |
+ |
/// Creates a SourceFactory configured by the [options]. |
/// |
/// Use [options.useMockSdk] to specify the SDK mode, or use [sdkResolver] |
@@ -46,7 +50,7 @@ AnalysisContext createAnalysisContext(StrongModeOptions options) { |
/// If supplied, [fileResolvers] will override the default `file:` and |
/// `package:` URI resolvers. |
SourceFactory createSourceFactory(SourceResolverOptions options, |
- {DartUriResolver sdkResolver, List fileResolvers}) { |
+ {DartUriResolver sdkResolver, List<UriResolver> fileResolvers}) { |
var sdkResolver = options.useMockSdk |
? createMockSdkResolver(mockSdkSources) |
: createSdkPathResolver(options.dartSdkPath); |
@@ -56,19 +60,20 @@ SourceFactory createSourceFactory(SourceResolverOptions options, |
resolvers.add(new CustomUriResolver(options.customUrlMappings)); |
} |
resolvers.add(sdkResolver); |
- if (options.useImplicitHtml) { |
- resolvers.add(_createImplicitEntryResolver(options)); |
- } |
- if (fileResolvers == null) { |
- fileResolvers = [new FileUriResolver()]; |
- fileResolvers.add(options.useMultiPackage |
- ? new MultiPackageResolver(options.packagePaths) |
- : new PackageUriResolver([new JavaFile(options.packageRoot)])); |
- } |
+ if (fileResolvers == null) fileResolvers = createFileResolvers(options); |
resolvers.addAll(fileResolvers); |
return new SourceFactory(resolvers); |
} |
+List<UriResolver> createFileResolvers(SourceResolverOptions options) { |
+ return [ |
+ new FileUriResolver(), |
+ options.useMultiPackage |
+ ? new MultiPackageResolver(options.packagePaths) |
+ : new PackageUriResolver([new JavaFile(options.packageRoot)]) |
+ ]; |
+} |
+ |
/// Creates a [DartUriResolver] that uses a mock 'dart:' library contents. |
DartUriResolver createMockSdkResolver(Map<String, String> mockSources) => |
new MockDartSdk(mockSources, reportMissing: true).resolver; |
@@ -77,26 +82,3 @@ DartUriResolver createMockSdkResolver(Map<String, String> mockSources) => |
DartUriResolver createSdkPathResolver(String sdkPath) => new DartUriResolver( |
new DirectoryBasedDartSdk( |
new JavaFile(sdkPath), /*useDart2jsPaths:*/ true)); |
- |
-UriResolver _createImplicitEntryResolver(SourceResolverOptions options) { |
- var entry = path.absolute(SourceResolverOptions.implicitHtmlFile); |
- var src = path.absolute(options.entryPointFile); |
- var provider = new MemoryResourceProvider(); |
- provider.newFile( |
- entry, '<body><script type="application/dart" src="$src"></script>'); |
- 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); |
-} |