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

Unified Diff: lib/devc.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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/config.dart ('k') | lib/src/analysis_context.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/devc.dart
diff --git a/lib/devc.dart b/lib/devc.dart
index 6972be3271ef332a40de810270fc26c5e2513689..2e3687bb224ac0b07ce60e58e314649e9b997d57 100644
--- a/lib/devc.dart
+++ b/lib/devc.dart
@@ -53,7 +53,7 @@ abstract class AbstractCompiler {
class Compiler implements AbstractCompiler {
final CompilerOptions options;
final AnalysisContext context;
- final CheckerReporter _reporter;
+ final CompilerReporter _reporter;
final TypeRules rules;
final CodeChecker _checker;
final SourceNode _entryNode;
@@ -63,8 +63,12 @@ class Compiler implements AbstractCompiler {
bool _failure = false;
factory Compiler(CompilerOptions options,
- {AnalysisContext context, CheckerReporter reporter}) {
- if (context == null) context = createAnalysisContext(options);
+ {AnalysisContext context, CompilerReporter reporter}) {
+ var strongOpts = options.strongOptions;
+ var sourceOpts = options.sourceOptions;
+ if (context == null) {
+ context = createAnalysisContextWithSources(strongOpts, sourceOpts);
+ }
if (reporter == null) {
reporter = options.dumpInfo
@@ -72,15 +76,16 @@ class Compiler implements AbstractCompiler {
: new LogReporter(context, useColors: options.useColors);
}
var graph = new SourceGraph(context, reporter, options);
- var rules = new RestrictedRules(context.typeProvider, options: options);
- var checker = new CodeChecker(rules, reporter, options);
+ var rules = new RestrictedRules(context.typeProvider,
+ options: options.strongOptions);
+ var checker = new CodeChecker(rules, reporter, strongOpts);
- var inputFile = options.entryPointFile;
+ var inputFile = sourceOpts.entryPointFile;
var inputUri = inputFile.startsWith('dart:') ||
inputFile.startsWith('package:')
? Uri.parse(inputFile)
- : new Uri.file(path.absolute(options.useImplicitHtml
- ? ResolverOptions.implicitHtmlFile
+ : new Uri.file(path.absolute(sourceOpts.useImplicitHtml
+ ? SourceResolverOptions.implicitHtmlFile
: inputFile));
var entryNode = graph.nodeFromUri(inputUri);
@@ -90,7 +95,7 @@ class Compiler implements AbstractCompiler {
Compiler._(this.options, this.context, this._reporter, this.rules,
this._checker, this._entryNode) {
- if (options.outputDir != null) {
+ if (outputDir != null) {
_generators.add(new JSGenerator(this));
}
// TODO(sigmund): refactor to support hashing of the dart output?
@@ -98,6 +103,7 @@ class Compiler implements AbstractCompiler {
}
Uri get entryPointUri => _entryNode.uri;
+ String get outputDir => options.codegenOptions.outputDir;
bool _buildSource(SourceNode node) {
if (node is HtmlSourceNode) {
@@ -116,7 +122,7 @@ class Compiler implements AbstractCompiler {
}
void _buildHtmlFile(HtmlSourceNode node) {
- if (options.outputDir == null) return;
+ if (outputDir == null) return;
var uri = node.source.uri;
_reporter.enterHtml(uri);
var output = generateEntryHtml(node, options);
@@ -126,7 +132,7 @@ class Compiler implements AbstractCompiler {
}
_reporter.leaveHtml();
var filename = path.basename(node.uri.path);
- String outputFile = path.join(options.outputDir, filename);
+ String outputFile = path.join(outputDir, filename);
new File(outputFile).writeAsStringSync(output);
}
@@ -134,10 +140,10 @@ class Compiler implements AbstractCompiler {
// ResourceSourceNodes files that just need to be copied over to the output
// location. These can be external dependencies or pieces of the
// dev_compiler runtime.
- if (options.outputDir == null) return;
+ if (outputDir == null) return;
var filepath = resourceOutputPath(node.uri, _entryNode.uri);
assert(filepath != null);
- filepath = path.join(options.outputDir, filepath);
+ filepath = path.join(outputDir, filepath);
var dir = path.dirname(filepath);
new Directory(dir).createSync(recursive: true);
new File.fromUri(node.source.uri).copySync(filepath);
@@ -182,7 +188,7 @@ class Compiler implements AbstractCompiler {
}
if (failureInLib) {
_failure = true;
- if (!options.forceCompile) return;
+ if (!options.codegenOptions.forceCompile) return;
}
for (var cg in _generators) {
@@ -221,7 +227,7 @@ class Compiler implements AbstractCompiler {
var time = (clock.elapsedMilliseconds / 1000).toStringAsFixed(2);
_log.fine('Compiled ${_libraries.length} libraries in ${time} s\n');
return new CheckerResults(
- _libraries, rules, _failure || options.forceCompile);
+ _libraries, rules, _failure || options.codegenOptions.forceCompile);
}
void _runAgain() {
@@ -245,7 +251,7 @@ class Compiler implements AbstractCompiler {
var result = (_reporter as SummaryReporter).result;
if (!options.serverMode) print(summaryToString(result));
var filepath = options.serverMode
- ? path.join(options.outputDir, 'messages.json')
+ ? path.join(outputDir, 'messages.json')
: options.dumpInfoFile;
if (filepath == null) return;
new File(filepath).writeAsStringSync(JSON.encode(result.toJsonMap()));
@@ -260,15 +266,15 @@ class CompilerServer {
final String _entryPath;
factory CompilerServer(CompilerOptions options) {
- var entryPath = path.basename(options.entryPointFile);
+ var entryPath = path.basename(options.sourceOptions.entryPointFile);
var extension = path.extension(entryPath);
- if (extension != '.html' && !options.useImplicitHtml) {
+ if (extension != '.html' && !options.sourceOptions.useImplicitHtml) {
print('error: devc in server mode requires an HTML or Dart entry point.');
exit(1);
}
// TODO(sigmund): allow running without a dir, but keep output in memory?
- var outDir = options.outputDir;
+ var outDir = options.codegenOptions.outputDir;
if (outDir == null) {
print('error: devc in server mode also requires specifying and '
'output location for generated code.');
@@ -283,8 +289,9 @@ class CompilerServer {
CompilerServer._(
Compiler compiler, this.outDir, this.host, this.port, String entryPath)
: this.compiler = compiler,
- this._entryPath = compiler.options.useImplicitHtml
- ? ResolverOptions.implicitHtmlFile
+ // TODO(jmesserly): this logic is duplicated in a few places
+ this._entryPath = compiler.options.sourceOptions.useImplicitHtml
+ ? SourceResolverOptions.implicitHtmlFile
: entryPath;
Future start() async {
« no previous file with comments | « lib/config.dart ('k') | lib/src/analysis_context.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698