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

Unified Diff: lib/src/analysis_context.dart

Issue 1143683002: cleanup: simplify creation of AnalysisContext (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 7 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 | « lib/devc.dart ('k') | lib/src/checker/dart_sdk.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/analysis_context.dart
diff --git a/lib/src/analysis_context.dart b/lib/src/analysis_context.dart
new file mode 100644
index 0000000000000000000000000000000000000000..b6e74a4eca1824e553cb43ab2c6e891bf550cd2d
--- /dev/null
+++ b/lib/src/analysis_context.dart
@@ -0,0 +1,77 @@
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+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 'checker/resolver.dart';
+import 'dart_sdk.dart';
+import 'multi_package_resolver.dart';
+import 'options.dart';
+
+/// Creates an AnalysisContext with dev_compiler type rules and inference.
+///
+/// Use [options.useMockSdk] to specify the SDK mode, or use [sdkResolver]
+/// to entirely override the DartUriResolver.
+///
+/// If supplied, [fileResolvers] will override the default `file:` and
+/// `package:` URI resolvers.
+///
+AnalysisContext createAnalysisContext(CompilerOptions options,
+ {DartUriResolver sdkResolver, List fileResolvers}) {
+ var context = _initContext(options);
+
+ var sdkResolver = options.useMockSdk
+ ? createMockSdkResolver(mockSdkSources)
+ : createSdkPathResolver(options.dartSdkPath);
+
+ var resolvers = [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)]));
+ }
+ resolvers.addAll(fileResolvers);
+ context.sourceFactory = new SourceFactory(resolvers);
+ return context;
+}
+
+/// Creates a [DartUriResolver] that uses a mock 'dart:' library contents.
+DartUriResolver createMockSdkResolver(Map<String, String> mockSources) =>
+ new MockDartSdk(mockSources, reportMissing: true).resolver;
+
+/// Creates a [DartUriResolver] that uses the SDK at the given [sdkPath].
+DartUriResolver createSdkPathResolver(String sdkPath) =>
+ new DartUriResolver(new DirectoryBasedDartSdk(new JavaFile(sdkPath)));
+
+UriResolver _createImplicitEntryResolver(ResolverOptions options) {
+ var entry = path.absolute(ResolverOptions.implicitHtmlFile);
+ var src = path.absolute(options.entryPointFile);
+ var provider = new MemoryResourceProvider();
+ provider.newFile(
+ entry, '<body><script type="application/dart" src="$src"></script>');
+ return new ResourceUriResolver(provider);
+}
+
+/// Creates an analysis context that contains our restricted typing rules.
+AnalysisContext _initContext(ResolverOptions options) {
+ var analysisOptions = new AnalysisOptionsImpl()..cacheSize = 512;
+ AnalysisContextImpl res = AnalysisEngine.instance.createAnalysisContext();
+ res.analysisOptions = analysisOptions;
+ res.libraryResolverFactory =
+ (context) => new LibraryResolverWithInference(context, options);
+ return res;
+}
« no previous file with comments | « lib/devc.dart ('k') | lib/src/checker/dart_sdk.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698