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

Side by Side Diff: lib/src/analysis_context.dart

Issue 1174643003: expose strong checker API, for use by analyzer_cli (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 6 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 unified diff | Download patch
« no previous file with comments | « lib/devc.dart ('k') | lib/src/checker/checker.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dev_compiler.src.analysis_context; 5 library dev_compiler.src.analysis_context;
6 6
7 import 'package:analyzer/file_system/file_system.dart'; 7 import 'package:analyzer/file_system/file_system.dart';
8 import 'package:analyzer/file_system/memory_file_system.dart'; 8 import 'package:analyzer/file_system/memory_file_system.dart';
9 import 'package:analyzer/src/generated/engine.dart'; 9 import 'package:analyzer/src/generated/engine.dart';
10 import 'package:analyzer/src/generated/java_io.dart' show JavaFile; 10 import 'package:analyzer/src/generated/java_io.dart' show JavaFile;
11 import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk; 11 import 'package:analyzer/src/generated/sdk_io.dart' show DirectoryBasedDartSdk;
12 import 'package:analyzer/src/generated/source.dart' show DartUriResolver; 12 import 'package:analyzer/src/generated/source.dart' show DartUriResolver;
13 import 'package:analyzer/src/generated/source_io.dart'; 13 import 'package:analyzer/src/generated/source_io.dart';
14 import 'package:path/path.dart' as path; 14 import 'package:path/path.dart' as path;
15 15
16 import 'package:dev_compiler/strong_mode.dart' show StrongModeOptions;
17
16 import 'checker/resolver.dart'; 18 import 'checker/resolver.dart';
17 import 'dart_sdk.dart'; 19 import 'dart_sdk.dart';
18 import 'multi_package_resolver.dart'; 20 import 'multi_package_resolver.dart';
19 import 'options.dart'; 21 import 'options.dart';
20 22
21 /// Creates an AnalysisContext with dev_compiler type rules and inference. 23 /// Creates an [AnalysisContext] with dev_compiler type rules and inference,
24 /// using [createSourceFactory] to set up its [SourceFactory].
25 AnalysisContext createAnalysisContextWithSources(
26 StrongModeOptions strongOptions, SourceResolverOptions srcOptions,
27 {DartUriResolver sdkResolver, List fileResolvers}) {
28 var srcFactory = createSourceFactory(srcOptions,
29 sdkResolver: sdkResolver, fileResolvers: fileResolvers);
30 return createAnalysisContext(strongOptions)..sourceFactory = srcFactory;
31 }
32
33 /// Creates an analysis context that contains our restricted typing rules.
34 AnalysisContext createAnalysisContext(StrongModeOptions options) {
35 AnalysisContextImpl res = AnalysisEngine.instance.createAnalysisContext();
36 res.libraryResolverFactory =
37 (context) => new LibraryResolverWithInference(context, options);
38 return res;
39 }
40
41 /// Creates a SourceFactory configured by the [options].
22 /// 42 ///
23 /// Use [options.useMockSdk] to specify the SDK mode, or use [sdkResolver] 43 /// Use [options.useMockSdk] to specify the SDK mode, or use [sdkResolver]
24 /// to entirely override the DartUriResolver. 44 /// to entirely override the DartUriResolver.
25 /// 45 ///
26 /// If supplied, [fileResolvers] will override the default `file:` and 46 /// If supplied, [fileResolvers] will override the default `file:` and
27 /// `package:` URI resolvers. 47 /// `package:` URI resolvers.
28 /// 48 SourceFactory createSourceFactory(SourceResolverOptions options,
29 AnalysisContext createAnalysisContext(CompilerOptions options,
30 {DartUriResolver sdkResolver, List fileResolvers}) { 49 {DartUriResolver sdkResolver, List fileResolvers}) {
31 var context = _initContext(options);
32
33 var sdkResolver = options.useMockSdk 50 var sdkResolver = options.useMockSdk
34 ? createMockSdkResolver(mockSdkSources) 51 ? createMockSdkResolver(mockSdkSources)
35 : createSdkPathResolver(options.dartSdkPath); 52 : createSdkPathResolver(options.dartSdkPath);
36 53
37 var resolvers = []; 54 var resolvers = [];
38 if (options.customUrlMappings.isNotEmpty) { 55 if (options.customUrlMappings.isNotEmpty) {
39 resolvers.add(new CustomUriResolver(options.customUrlMappings)); 56 resolvers.add(new CustomUriResolver(options.customUrlMappings));
40 } 57 }
41 resolvers.add(sdkResolver); 58 resolvers.add(sdkResolver);
42 if (options.useImplicitHtml) { 59 if (options.useImplicitHtml) {
43 resolvers.add(_createImplicitEntryResolver(options)); 60 resolvers.add(_createImplicitEntryResolver(options));
44 } 61 }
45 if (fileResolvers == null) { 62 if (fileResolvers == null) {
46 fileResolvers = [new FileUriResolver()]; 63 fileResolvers = [new FileUriResolver()];
47 fileResolvers.add(options.useMultiPackage 64 fileResolvers.add(options.useMultiPackage
48 ? new MultiPackageResolver(options.packagePaths) 65 ? new MultiPackageResolver(options.packagePaths)
49 : new PackageUriResolver([new JavaFile(options.packageRoot)])); 66 : new PackageUriResolver([new JavaFile(options.packageRoot)]));
50 } 67 }
51 resolvers.addAll(fileResolvers); 68 resolvers.addAll(fileResolvers);
52 context.sourceFactory = new SourceFactory(resolvers); 69 return new SourceFactory(resolvers);
53 return context;
54 } 70 }
55 71
56 /// Creates a [DartUriResolver] that uses a mock 'dart:' library contents. 72 /// Creates a [DartUriResolver] that uses a mock 'dart:' library contents.
57 DartUriResolver createMockSdkResolver(Map<String, String> mockSources) => 73 DartUriResolver createMockSdkResolver(Map<String, String> mockSources) =>
58 new MockDartSdk(mockSources, reportMissing: true).resolver; 74 new MockDartSdk(mockSources, reportMissing: true).resolver;
59 75
60 /// Creates a [DartUriResolver] that uses the SDK at the given [sdkPath]. 76 /// Creates a [DartUriResolver] that uses the SDK at the given [sdkPath].
61 DartUriResolver createSdkPathResolver(String sdkPath) => 77 DartUriResolver createSdkPathResolver(String sdkPath) =>
62 new DartUriResolver(new DirectoryBasedDartSdk(new JavaFile(sdkPath))); 78 new DartUriResolver(new DirectoryBasedDartSdk(new JavaFile(sdkPath)));
63 79
64 UriResolver _createImplicitEntryResolver(ResolverOptions options) { 80 UriResolver _createImplicitEntryResolver(SourceResolverOptions options) {
65 var entry = path.absolute(ResolverOptions.implicitHtmlFile); 81 var entry = path.absolute(SourceResolverOptions.implicitHtmlFile);
66 var src = path.absolute(options.entryPointFile); 82 var src = path.absolute(options.entryPointFile);
67 var provider = new MemoryResourceProvider(); 83 var provider = new MemoryResourceProvider();
68 provider.newFile( 84 provider.newFile(
69 entry, '<body><script type="application/dart" src="$src"></script>'); 85 entry, '<body><script type="application/dart" src="$src"></script>');
70 return new ExistingSourceUriResolver(new ResourceUriResolver(provider)); 86 return new ExistingSourceUriResolver(new ResourceUriResolver(provider));
71 } 87 }
72 88
73 /// A UriResolver that continues to the next one if it fails to find an existing 89 /// A UriResolver that continues to the next one if it fails to find an existing
74 /// source file. This is unlike normal URI resolvers, that always return 90 /// source file. This is unlike normal URI resolvers, that always return
75 /// something, even if it is a non-existing file. 91 /// something, even if it is a non-existing file.
76 class ExistingSourceUriResolver implements UriResolver { 92 class ExistingSourceUriResolver implements UriResolver {
77 final UriResolver resolver; 93 final UriResolver resolver;
78 ExistingSourceUriResolver(this.resolver); 94 ExistingSourceUriResolver(this.resolver);
79 95
80 Source resolveAbsolute(Uri uri) { 96 Source resolveAbsolute(Uri uri) {
81 var src = resolver.resolveAbsolute(uri); 97 var src = resolver.resolveAbsolute(uri);
82 return src.exists() ? src : null; 98 return src.exists() ? src : null;
83 } 99 }
84 Uri restoreAbsolute(Source source) => resolver.restoreAbsolute(source); 100 Uri restoreAbsolute(Source source) => resolver.restoreAbsolute(source);
85 } 101 }
86
87 /// Creates an analysis context that contains our restricted typing rules.
88 AnalysisContext _initContext(ResolverOptions options) {
89 var analysisOptions = new AnalysisOptionsImpl()..cacheSize = 512;
90 AnalysisContextImpl res = AnalysisEngine.instance.createAnalysisContext();
91 res.analysisOptions = analysisOptions;
92 res.libraryResolverFactory =
93 (context) => new LibraryResolverWithInference(context, options);
94 return res;
95 }
OLDNEW
« no previous file with comments | « lib/devc.dart ('k') | lib/src/checker/checker.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698