Index: pkg/analyzer/lib/src/analyzer_impl.dart |
diff --git a/pkg/analyzer/lib/src/analyzer_impl.dart b/pkg/analyzer/lib/src/analyzer_impl.dart |
index 849356fd0335af373f9d7a6c35e8a91e7b3778c8..0712a69a75edf4b39e4b67297034d56ebf264d37 100644 |
--- a/pkg/analyzer/lib/src/analyzer_impl.dart |
+++ b/pkg/analyzer/lib/src/analyzer_impl.dart |
@@ -144,31 +144,45 @@ class AnalyzerImpl { |
return _analyzeSync(printMode); |
} |
- void prepareAnalysisContext(JavaFile sourceFile, Source source) { |
+ Source computeLibrarySource() { |
+ JavaFile sourceFile = new JavaFile(sourcePath); |
+ Source source = sdk.fromFileUri(sourceFile.toURI()); |
+ if (source != null) { |
+ return source; |
+ } |
+ source = new FileBasedSource.con2(sourceFile.toURI(), sourceFile); |
+ Uri uri = context.sourceFactory.restoreUri(source); |
+ return new FileBasedSource.con2(uri, sourceFile); |
+ } |
+ |
+ /** |
+ * Create and return the source factory to be used by the analysis context. |
+ */ |
+ SourceFactory createSourceFactory() { |
List<UriResolver> resolvers = [ |
new CustomUriResolver(options.customUrlMappings), |
- new DartUriResolver(sdk), |
- new FileUriResolver() |
+ new DartUriResolver(sdk) |
]; |
- // maybe add package resolver |
- { |
- JavaFile packageDirectory; |
- if (options.packageRootPath != null) { |
- packageDirectory = new JavaFile(options.packageRootPath); |
- resolvers.add(new PackageUriResolver([packageDirectory])); |
- } else { |
- PubPackageMapProvider pubPackageMapProvider = |
- new PubPackageMapProvider(PhysicalResourceProvider.INSTANCE, sdk); |
- PackageMapInfo packageMapInfo = pubPackageMapProvider.computePackageMap( |
- PhysicalResourceProvider.INSTANCE.getResource('.')); |
- Map<String, List<Folder>> packageMap = packageMapInfo.packageMap; |
- if (packageMap != null) { |
- resolvers.add(new PackageMapUriResolver( |
- PhysicalResourceProvider.INSTANCE, packageMap)); |
- } |
+ if (options.packageRootPath != null) { |
+ JavaFile packageDirectory = new JavaFile(options.packageRootPath); |
+ resolvers.add(new PackageUriResolver([packageDirectory])); |
+ } else { |
+ PubPackageMapProvider pubPackageMapProvider = |
+ new PubPackageMapProvider(PhysicalResourceProvider.INSTANCE, sdk); |
+ PackageMapInfo packageMapInfo = pubPackageMapProvider.computePackageMap( |
+ PhysicalResourceProvider.INSTANCE.getResource('.')); |
+ Map<String, List<Folder>> packageMap = packageMapInfo.packageMap; |
+ if (packageMap != null) { |
+ resolvers.add(new PackageMapUriResolver( |
+ PhysicalResourceProvider.INSTANCE, packageMap)); |
} |
} |
- sourceFactory = new SourceFactory(resolvers); |
+ resolvers.add(new FileUriResolver()); |
+ return new SourceFactory(resolvers); |
+ } |
+ |
+ void prepareAnalysisContext() { |
+ sourceFactory = createSourceFactory(); |
context = AnalysisEngine.instance.createAnalysisContext(); |
context.sourceFactory = sourceFactory; |
Map<String, String> definedVariables = options.definedVariables; |
@@ -191,9 +205,11 @@ class AnalyzerImpl { |
contextOptions.generateSdkErrors = options.showSdkWarnings; |
context.analysisOptions = contextOptions; |
+ librarySource = computeLibrarySource(); |
+ |
// Create and add a ChangeSet |
ChangeSet changeSet = new ChangeSet(); |
- changeSet.addedSource(source); |
+ changeSet.addedSource(librarySource); |
context.applyChanges(changeSet); |
} |
@@ -222,12 +238,8 @@ class AnalyzerImpl { |
if (sourcePath == null) { |
throw new ArgumentError("sourcePath cannot be null"); |
} |
- JavaFile sourceFile = new JavaFile(sourcePath); |
- Uri uri = getUri(sourceFile); |
- librarySource = new FileBasedSource.con2(uri, sourceFile); |
- |
// prepare context |
- prepareAnalysisContext(sourceFile, librarySource); |
+ prepareAnalysisContext(); |
} |
/// The async version of the analysis |
@@ -403,24 +415,6 @@ class AnalyzerImpl { |
} |
/** |
- * Returns the [Uri] for the given input file. |
- * |
- * Usually it is a `file:` [Uri], but if [file] is located in the `lib` |
- * directory of the [sdk], then returns a `dart:` [Uri]. |
- */ |
- static Uri getUri(JavaFile file) { |
- // may be file in SDK |
- { |
- Source source = sdk.fromFileUri(file.toURI()); |
- if (source != null) { |
- return source.uri; |
- } |
- } |
- // some generic file |
- return file.toURI(); |
- } |
- |
- /** |
* Convert [sourcePath] into an absolute path. |
*/ |
static String _normalizeSourcePath(String sourcePath) { |