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

Side by Side Diff: pkg/analyzer/lib/src/context/builder.dart

Issue 2647293007: Move driver creation into ContextBuilder (Closed)
Patch Set: Created 3 years, 11 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 | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | no next file » | 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 analyzer.src.context.context_builder; 5 library analyzer.src.context.context_builder;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 import 'dart:core'; 8 import 'dart:core';
9 9
10 import 'package:analyzer/context/declared_variables.dart'; 10 import 'package:analyzer/context/declared_variables.dart';
11 import 'package:analyzer/file_system/file_system.dart'; 11 import 'package:analyzer/file_system/file_system.dart';
12 import 'package:analyzer/plugin/resolver_provider.dart'; 12 import 'package:analyzer/plugin/resolver_provider.dart';
13 import 'package:analyzer/source/analysis_options_provider.dart'; 13 import 'package:analyzer/source/analysis_options_provider.dart';
14 import 'package:analyzer/source/package_map_resolver.dart'; 14 import 'package:analyzer/source/package_map_resolver.dart';
15 import 'package:analyzer/src/command_line/arguments.dart' 15 import 'package:analyzer/src/command_line/arguments.dart'
16 show applyAnalysisOptionFlags; 16 show applyAnalysisOptionFlags;
17 import 'package:analyzer/src/dart/analysis/byte_store.dart';
18 import 'package:analyzer/src/dart/analysis/driver.dart'
19 show AnalysisDriver, AnalysisDriverScheduler, PerformanceLog;
20 import 'package:analyzer/src/dart/analysis/file_state.dart';
17 import 'package:analyzer/src/dart/sdk/sdk.dart'; 21 import 'package:analyzer/src/dart/sdk/sdk.dart';
18 import 'package:analyzer/src/generated/bazel.dart'; 22 import 'package:analyzer/src/generated/bazel.dart';
19 import 'package:analyzer/src/generated/engine.dart'; 23 import 'package:analyzer/src/generated/engine.dart';
20 import 'package:analyzer/src/generated/sdk.dart'; 24 import 'package:analyzer/src/generated/sdk.dart';
21 import 'package:analyzer/src/generated/source.dart'; 25 import 'package:analyzer/src/generated/source.dart';
22 import 'package:analyzer/src/summary/package_bundle_reader.dart'; 26 import 'package:analyzer/src/summary/package_bundle_reader.dart';
23 import 'package:analyzer/src/summary/pub_summary.dart'; 27 import 'package:analyzer/src/summary/pub_summary.dart';
24 import 'package:analyzer/src/summary/summary_sdk.dart'; 28 import 'package:analyzer/src/summary/summary_sdk.dart';
25 import 'package:analyzer/src/task/options.dart'; 29 import 'package:analyzer/src/task/options.dart';
26 import 'package:args/args.dart'; 30 import 'package:args/args.dart';
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 */ 63 */
60 final ResourceProvider resourceProvider; 64 final ResourceProvider resourceProvider;
61 65
62 /** 66 /**
63 * The manager used to manage the DartSdk's that have been created so that 67 * The manager used to manage the DartSdk's that have been created so that
64 * they can be shared across contexts. 68 * they can be shared across contexts.
65 */ 69 */
66 final DartSdkManager sdkManager; 70 final DartSdkManager sdkManager;
67 71
68 /** 72 /**
69 * The cache containing the contents of overlaid files. 73 * The cache containing the contents of overlaid files. If this builder will
74 * be used to build analysis drivers, set the [fileContentOverlay] instead.
70 */ 75 */
71 final ContentCache contentCache; 76 final ContentCache contentCache;
72 77
73 /** 78 /**
74 * The options used by the context builder. 79 * The options used by the context builder.
75 */ 80 */
76 final ContextBuilderOptions builderOptions; 81 final ContextBuilderOptions builderOptions;
77 82
78 /** 83 /**
79 * The resolver provider used to create a package: URI resolver, or `null` if 84 * The resolver provider used to create a package: URI resolver, or `null` if
80 * the normal (Package Specification DEP) lookup mechanism is to be used. 85 * the normal (Package Specification DEP) lookup mechanism is to be used.
81 */ 86 */
82 ResolverProvider packageResolverProvider; 87 ResolverProvider packageResolverProvider;
83 88
84 /** 89 /**
85 * The resolver provider used to create a file: URI resolver, or `null` if 90 * The resolver provider used to create a file: URI resolver, or `null` if
86 * the normal file URI resolver is to be used. 91 * the normal file URI resolver is to be used.
87 */ 92 */
88 ResolverProvider fileResolverProvider; 93 ResolverProvider fileResolverProvider;
89 94
90 /** 95 /**
96 * The scheduler used by any analysis drivers created through this interface.
97 */
98 AnalysisDriverScheduler analysisDriverScheduler;
99
100 /**
101 * The performance log used by any analysis drivers created through this
102 * interface.
103 */
104 PerformanceLog performanceLog;
105
106 /**
107 * The byte store used by any analysis drivers created through this interface.
108 */
109 ByteStore byteStore;
110
111 /**
112 * The file content overlay used by analysis drivers. If this builder will be
113 * used to build analysis contexts, set the [contentCache] instead.
114 */
115 FileContentOverlay fileContentOverlay;
116
117 /**
91 * Initialize a newly created builder to be ready to build a context rooted in 118 * Initialize a newly created builder to be ready to build a context rooted in
92 * the directory with the given [rootDirectoryPath]. 119 * the directory with the given [rootDirectoryPath].
93 */ 120 */
94 ContextBuilder(this.resourceProvider, this.sdkManager, this.contentCache, 121 ContextBuilder(this.resourceProvider, this.sdkManager, this.contentCache,
95 {ContextBuilderOptions options}) 122 {ContextBuilderOptions options})
96 : builderOptions = options ?? new ContextBuilderOptions(); 123 : builderOptions = options ?? new ContextBuilderOptions();
97 124
98 /** 125 /**
99 * Return an analysis context that is configured correctly to analyze code in 126 * Return an analysis context that is configured correctly to analyze code in
100 * the directory with the given [path]. 127 * the directory with the given [path].
101 * 128 *
102 * *Note:* This method is not yet fully implemented and should not be used. 129 * *Note:* This method is not yet fully implemented and should not be used.
103 */ 130 */
104 AnalysisContext buildContext(String path) { 131 AnalysisContext buildContext(String path) {
105 InternalAnalysisContext context = 132 InternalAnalysisContext context =
106 AnalysisEngine.instance.createAnalysisContext(); 133 AnalysisEngine.instance.createAnalysisContext();
107 AnalysisOptions options = getAnalysisOptions(path); 134 AnalysisOptions options = getAnalysisOptions(path);
108 context.contentCache = contentCache; 135 context.contentCache = contentCache;
109 context.sourceFactory = createSourceFactory(path, options); 136 context.sourceFactory = createSourceFactory(path, options);
110 context.analysisOptions = options; 137 context.analysisOptions = options;
111 context.name = path; 138 context.name = path;
112 //_processAnalysisOptions(context, optionMap); 139 //_processAnalysisOptions(context, optionMap);
113 declareVariables(context); 140 declareVariables(context);
114 configureSummaries(context); 141 configureSummaries(context);
115 return context; 142 return context;
116 } 143 }
117 144
118 /** 145 /**
146 * Return an analysis driver that is configured correctly to analyze code in
147 * the directory with the given [path].
148 */
149 AnalysisDriver buildDriver(String path) {
150 AnalysisOptions options = getAnalysisOptions(path);
151 //_processAnalysisOptions(context, optionMap);
152 AnalysisDriver driver = new AnalysisDriver(
153 analysisDriverScheduler,
154 performanceLog,
155 resourceProvider,
156 byteStore,
157 fileContentOverlay,
158 path,
159 createSourceFactory(path, options),
160 options);
161 declareVariablesInDriver(driver);
162 return driver;
163 }
164
165 /**
119 * Configure the context to make use of summaries. 166 * Configure the context to make use of summaries.
120 */ 167 */
121 void configureSummaries(InternalAnalysisContext context) { 168 void configureSummaries(InternalAnalysisContext context) {
122 PubSummaryManager manager = builderOptions.pubSummaryManager; 169 PubSummaryManager manager = builderOptions.pubSummaryManager;
123 if (manager != null) { 170 if (manager != null) {
124 List<LinkedPubPackage> linkedBundles = manager.getLinkedBundles(context); 171 List<LinkedPubPackage> linkedBundles = manager.getLinkedBundles(context);
125 if (linkedBundles.isNotEmpty) { 172 if (linkedBundles.isNotEmpty) {
126 SummaryDataStore store = new SummaryDataStore([]); 173 SummaryDataStore store = new SummaryDataStore([]);
127 for (LinkedPubPackage package in linkedBundles) { 174 for (LinkedPubPackage package in linkedBundles) {
128 store.addBundle(null, package.unlinked); 175 store.addBundle(null, package.unlinked);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 Map<String, String> variables = builderOptions.declaredVariables; 273 Map<String, String> variables = builderOptions.declaredVariables;
227 if (variables != null && variables.isNotEmpty) { 274 if (variables != null && variables.isNotEmpty) {
228 DeclaredVariables contextVariables = context.declaredVariables; 275 DeclaredVariables contextVariables = context.declaredVariables;
229 variables.forEach((String variableName, String value) { 276 variables.forEach((String variableName, String value) {
230 contextVariables.define(variableName, value); 277 contextVariables.define(variableName, value);
231 }); 278 });
232 } 279 }
233 } 280 }
234 281
235 /** 282 /**
283 * Add any [declaredVariables] to the list of declared variables used by the
284 * given analysis [driver].
285 */
286 void declareVariablesInDriver(AnalysisDriver driver) {
287 Map<String, String> variables = builderOptions.declaredVariables;
288 if (variables != null && variables.isNotEmpty) {
289 DeclaredVariables contextVariables = driver.declaredVariables;
290 variables.forEach((String variableName, String value) {
291 contextVariables.define(variableName, value);
292 });
293 }
294 }
295
296 /**
236 * Finds a package resolution strategy for the directory at the given absolute 297 * Finds a package resolution strategy for the directory at the given absolute
237 * [path]. 298 * [path].
238 * 299 *
239 * This function first tries to locate a `.packages` file in the directory. If 300 * This function first tries to locate a `.packages` file in the directory. If
240 * that is not found, it instead checks for the presence of a `packages/` 301 * that is not found, it instead checks for the presence of a `packages/`
241 * directory in the same place. If that also fails, it starts checking parent 302 * directory in the same place. If that also fails, it starts checking parent
242 * directories for a `.packages` file, and stops if it finds it. Otherwise it 303 * directories for a `.packages` file, and stops if it finds it. Otherwise it
243 * gives up and returns [Packages.noPackages]. 304 * gives up and returns [Packages.noPackages].
244 */ 305 */
245 Packages findPackagesFromFile(String path) { 306 Packages findPackagesFromFile(String path) {
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 String _readEmbedderYaml(Folder libDir) { 692 String _readEmbedderYaml(Folder libDir) {
632 File file = libDir.getChild(EMBEDDER_FILE_NAME); 693 File file = libDir.getChild(EMBEDDER_FILE_NAME);
633 try { 694 try {
634 return file.readAsStringSync(); 695 return file.readAsStringSync();
635 } on FileSystemException { 696 } on FileSystemException {
636 // File can't be read. 697 // File can't be read.
637 return null; 698 return null;
638 } 699 }
639 } 700 }
640 } 701 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/analysis_server.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698