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

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

Issue 1373903004: Bootloader initialization cleanup. (Closed) Base URL: https://github.com/dart-lang/analyzer_cli.git@master
Patch Set: Created 5 years, 2 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/src/bootloader.dart ('k') | lib/src/plugin/plugin_config_processor_plugin.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 analyzer_cli.src.driver; 5 library analyzer_cli.src.driver;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:convert'; 8 import 'dart:convert';
9 import 'dart:io'; 9 import 'dart:io';
10 10
11 import 'package:analyzer/file_system/file_system.dart' as fileSystem; 11 import 'package:analyzer/file_system/file_system.dart' as fileSystem;
12 import 'package:analyzer/file_system/physical_file_system.dart'; 12 import 'package:analyzer/file_system/physical_file_system.dart';
13 import 'package:analyzer/plugin/options.dart'; 13 import 'package:analyzer/plugin/options.dart';
14 import 'package:analyzer/source/analysis_options_provider.dart'; 14 import 'package:analyzer/source/analysis_options_provider.dart';
15 import 'package:analyzer/source/package_map_provider.dart'; 15 import 'package:analyzer/source/package_map_provider.dart';
16 import 'package:analyzer/source/package_map_resolver.dart'; 16 import 'package:analyzer/source/package_map_resolver.dart';
17 import 'package:analyzer/source/pub_package_map_provider.dart'; 17 import 'package:analyzer/source/pub_package_map_provider.dart';
18 import 'package:analyzer/source/sdk_ext.dart'; 18 import 'package:analyzer/source/sdk_ext.dart';
19 import 'package:analyzer/src/generated/constant.dart'; 19 import 'package:analyzer/src/generated/constant.dart';
20 import 'package:analyzer/src/generated/engine.dart'; 20 import 'package:analyzer/src/generated/engine.dart';
21 import 'package:analyzer/src/generated/error.dart'; 21 import 'package:analyzer/src/generated/error.dart';
22 import 'package:analyzer/src/generated/interner.dart'; 22 import 'package:analyzer/src/generated/interner.dart';
23 import 'package:analyzer/src/generated/java_engine.dart'; 23 import 'package:analyzer/src/generated/java_engine.dart';
24 import 'package:analyzer/src/generated/java_io.dart'; 24 import 'package:analyzer/src/generated/java_io.dart';
25 import 'package:analyzer/src/generated/sdk_io.dart'; 25 import 'package:analyzer/src/generated/sdk_io.dart';
26 import 'package:analyzer/src/generated/source.dart'; 26 import 'package:analyzer/src/generated/source.dart';
27 import 'package:analyzer/src/generated/source_io.dart'; 27 import 'package:analyzer/src/generated/source_io.dart';
28 import 'package:analyzer/src/plugin/plugin_configuration.dart';
29 import 'package:analyzer_cli/src/analyzer_impl.dart'; 28 import 'package:analyzer_cli/src/analyzer_impl.dart';
30 import 'package:analyzer_cli/src/options.dart'; 29 import 'package:analyzer_cli/src/options.dart';
31 import 'package:analyzer_cli/src/plugin/plugin_config_processor_plugin.dart';
32 import 'package:dev_compiler/strong_mode.dart'; 30 import 'package:dev_compiler/strong_mode.dart';
33 import 'package:linter/src/plugin/linter_plugin.dart'; 31 import 'package:linter/src/plugin/linter_plugin.dart';
34 import 'package:package_config/discovery.dart' as pkgDiscovery; 32 import 'package:package_config/discovery.dart' as pkgDiscovery;
35 import 'package:package_config/packages.dart' show Packages; 33 import 'package:package_config/packages.dart' show Packages;
36 import 'package:package_config/packages_file.dart' as pkgfile show parse; 34 import 'package:package_config/packages_file.dart' as pkgfile show parse;
37 import 'package:package_config/src/packages_impl.dart' show MapPackages; 35 import 'package:package_config/src/packages_impl.dart' show MapPackages;
38 import 'package:path/path.dart' as path; 36 import 'package:path/path.dart' as path;
39 import 'package:plugin/manager.dart'; 37 import 'package:plugin/manager.dart';
40 import 'package:plugin/plugin.dart'; 38 import 'package:plugin/plugin.dart';
41 import 'package:source_span/source_span.dart';
42 import 'package:yaml/yaml.dart'; 39 import 'package:yaml/yaml.dart';
43 40
44 /// The maximum number of sources for which AST structures should be kept in the cache. 41 /// The maximum number of sources for which AST structures should be kept in the cache.
45 const int _maxCacheSize = 512; 42 const int _maxCacheSize = 512;
46 43
47 /// Shared IO sink for standard error reporting. 44 /// Shared IO sink for standard error reporting.
48 /// 45 ///
49 /// *Visible for testing.* 46 /// *Visible for testing.*
50 StringSink errorSink = stderr; 47 StringSink errorSink = stderr;
51 48
52 /// Shared IO sink for standard out reporting. 49 /// Shared IO sink for standard out reporting.
53 /// 50 ///
54 /// *Visible for testing.* 51 /// *Visible for testing.*
55 StringSink outSink = stdout; 52 StringSink outSink = stdout;
56 53
57 typedef ErrorSeverity _BatchRunnerHandler(List<String> args); 54 typedef ErrorSeverity _BatchRunnerHandler(List<String> args);
58 55
59 class Driver { 56 class Driver {
60 /// Emits an error message to [errorSink] if plugin config can't be read.
61 static final ErrorHandler _pluginConfigErrorHandler = (Exception e) {
62 String details;
63 if (e is PluginConfigFormatException) {
64 details = e.message;
65 var node = e.yamlNode;
66 if (node is YamlNode) {
67 SourceLocation location = node.span.start;
68 details += ' (line ${location.line}, column ${location.column})';
69 }
70 } else {
71 details = e.toString();
72 }
73
74 errorSink.writeln('Plugin configuration skipped: $details');
75 };
76
77 /// The plugins that are defined outside the `analyzer_cli` package. 57 /// The plugins that are defined outside the `analyzer_cli` package.
78 List<Plugin> _userDefinedPlugins = <Plugin>[]; 58 List<Plugin> _userDefinedPlugins = <Plugin>[];
79 59
80 /// Indicates whether the analyzer is running in batch mode. 60 /// Indicates whether the analyzer is running in batch mode.
81 bool _isBatch; 61 bool _isBatch;
82 62
83 /// The context that was most recently created by a call to [_analyzeAll], or 63 /// The context that was most recently created by a call to [_analyzeAll], or
84 /// `null` if [_analyzeAll] hasn't been called yet. 64 /// `null` if [_analyzeAll] hasn't been called yet.
85 AnalysisContext _context; 65 AnalysisContext _context;
86 66
87 /// Reads plugin config info from `.analysis_options`.
88 PluginConfigProcessorPlugin _pluginConfigProcessorPlugin;
89
90 /// The strong mode checker corresponding to [_context], or `null` if strong 67 /// The strong mode checker corresponding to [_context], or `null` if strong
91 /// mode is not enabled or a context is not available yet. 68 /// mode is not enabled or a context is not available yet.
92 StrongChecker _strongChecker; 69 StrongChecker _strongChecker;
93 70
94 /// If [_context] is not `null`, the [CommandLineOptions] that guided its 71 /// If [_context] is not `null`, the [CommandLineOptions] that guided its
95 /// creation. 72 /// creation.
96 CommandLineOptions _previousOptions; 73 CommandLineOptions _previousOptions;
97 74
98 Driver()
99 : _pluginConfigProcessorPlugin =
100 new PluginConfigProcessorPlugin(_pluginConfigErrorHandler);
101
102 /// This Driver's current analysis context. 75 /// This Driver's current analysis context.
103 /// 76 ///
104 /// *Visible for testing.* 77 /// *Visible for testing.*
105 AnalysisContext get context => _context; 78 AnalysisContext get context => _context;
106 79
107 /// Plugin configuration as processed from `.analysis_options`.
108 PluginConfig get pluginConfig => _pluginConfigProcessorPlugin.pluginConfig;
109
110 /// Set the [plugins] that are defined outside the `analyzer_cli` package. 80 /// Set the [plugins] that are defined outside the `analyzer_cli` package.
111 void set userDefinedPlugins(List<Plugin> plugins) { 81 void set userDefinedPlugins(List<Plugin> plugins) {
112 _userDefinedPlugins = plugins == null ? <Plugin>[] : plugins; 82 _userDefinedPlugins = plugins == null ? <Plugin>[] : plugins;
113 } 83 }
114 84
115 /// Use the given command-line [args] to start this analysis driver. 85 /// Use the given command-line [args] to start this analysis driver.
116 void start(List<String> args) { 86 void start(List<String> args) {
117 StringUtilities.INTERNER = new MappedInterner(); 87 StringUtilities.INTERNER = new MappedInterner();
118 88
119 _processPlugins(); 89 _processPlugins();
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 analysisOptionsProvider.getOptionsFromFile(file); 447 analysisOptionsProvider.getOptionsFromFile(file);
478 optionsProcessors 448 optionsProcessors
479 .forEach((OptionsProcessor p) => p.optionsProcessed(options)); 449 .forEach((OptionsProcessor p) => p.optionsProcessed(options));
480 } on Exception catch (e) { 450 } on Exception catch (e) {
481 optionsProcessors.forEach((OptionsProcessor p) => p.onError(e)); 451 optionsProcessors.forEach((OptionsProcessor p) => p.onError(e));
482 } 452 }
483 } 453 }
484 454
485 void _processPlugins() { 455 void _processPlugins() {
486 List<Plugin> plugins = <Plugin>[]; 456 List<Plugin> plugins = <Plugin>[];
487 plugins.add(_pluginConfigProcessorPlugin);
488 plugins.add(linterPlugin); 457 plugins.add(linterPlugin);
489 plugins.addAll(AnalysisEngine.instance.supportedPlugins); 458 plugins.addAll(AnalysisEngine.instance.supportedPlugins);
490 plugins.addAll(_userDefinedPlugins); 459 plugins.addAll(_userDefinedPlugins);
491 ExtensionManager manager = new ExtensionManager(); 460 ExtensionManager manager = new ExtensionManager();
492 manager.processPlugins(plugins); 461 manager.processPlugins(plugins);
493 } 462 }
494 463
495 /// Analyze a single source. 464 /// Analyze a single source.
496 ErrorSeverity _runAnalyzer(Source source, CommandLineOptions options) { 465 ErrorSeverity _runAnalyzer(Source source, CommandLineOptions options) {
497 int startTime = currentTimeMillis(); 466 int startTime = currentTimeMillis();
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 for (var package in packages) { 586 for (var package in packages) {
618 var packageName = path.basename(package.path); 587 var packageName = path.basename(package.path);
619 var realPath = package.resolveSymbolicLinksSync(); 588 var realPath = package.resolveSymbolicLinksSync();
620 result[packageName] = [ 589 result[packageName] = [
621 PhysicalResourceProvider.INSTANCE.getFolder(realPath) 590 PhysicalResourceProvider.INSTANCE.getFolder(realPath)
622 ]; 591 ];
623 } 592 }
624 return result; 593 return result;
625 } 594 }
626 } 595 }
OLDNEW
« no previous file with comments | « lib/src/bootloader.dart ('k') | lib/src/plugin/plugin_config_processor_plugin.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698