Index: compiler/java/com/google/dart/compiler/DartCompiler.java |
diff --git a/compiler/java/com/google/dart/compiler/DartCompiler.java b/compiler/java/com/google/dart/compiler/DartCompiler.java |
index 476cdffb972e23ae02837976439dccadef5c2cc1..2911484190ae8d9d3e8aa67fa9da2ed9fee7a95b 100644 |
--- a/compiler/java/com/google/dart/compiler/DartCompiler.java |
+++ b/compiler/java/com/google/dart/compiler/DartCompiler.java |
@@ -9,11 +9,9 @@ import com.google.common.collect.Sets; |
import com.google.common.collect.Sets.SetView; |
import com.google.common.io.CharStreams; |
import com.google.common.io.Closeables; |
-import com.google.common.io.Files; |
import com.google.dart.compiler.CommandLineOptions.CompilerOptions; |
import com.google.dart.compiler.LibraryDeps.Dependency; |
import com.google.dart.compiler.UnitTestBatchRunner.Invocation; |
-import com.google.dart.compiler.ast.CoverageInstrumenter; |
import com.google.dart.compiler.ast.DartDirective; |
import com.google.dart.compiler.ast.DartLibraryDirective; |
import com.google.dart.compiler.ast.DartNode; |
@@ -30,7 +28,6 @@ import com.google.dart.compiler.metrics.JvmMetrics; |
import com.google.dart.compiler.metrics.Tracer; |
import com.google.dart.compiler.metrics.Tracer.TraceEvent; |
import com.google.dart.compiler.parser.DartParser; |
-import com.google.dart.compiler.parser.DartScanner.Location; |
import com.google.dart.compiler.parser.DartScannerParserContext; |
import com.google.dart.compiler.resolver.CompileTimeConstantResolver; |
import com.google.dart.compiler.resolver.CoreTypeProvider; |
@@ -55,7 +52,6 @@ import java.io.PrintStream; |
import java.io.Reader; |
import java.io.Writer; |
import java.net.URI; |
-import java.nio.charset.Charset; |
import java.util.ArrayList; |
import java.util.Collection; |
import java.util.Collections; |
@@ -126,13 +122,10 @@ public class DartCompiler { |
private final DartCompilerMainContext context; |
private final CompilerConfiguration config; |
private final Map<URI, LibraryUnit> libraries = new LinkedHashMap<URI, LibraryUnit>(); |
- private boolean packageApp = false; |
- private final boolean checkOnly; |
private CoreTypeProvider typeProvider; |
private final boolean incremental; |
private final boolean usePrecompiledDartLibs; |
private final List<DartCompilationPhase> phases; |
- private final List<Backend> backends; |
private final LibrarySource coreLibrarySource; |
private Compiler(LibrarySource app, List<LibrarySource> embedded, CompilerConfiguration config, |
@@ -140,9 +133,7 @@ public class DartCompiler { |
this.app = app; |
this.config = config; |
this.phases = config.getPhases(); |
- this.backends = config.getBackends(); |
this.context = context; |
- checkOnly = config.checkOnly(); |
for (LibrarySource library : embedded) { |
if (SystemLibraryManager.isDartSpec(library.getName())) { |
embeddedLibraries.add(context.getSystemLibraryFor(library.getName())); |
@@ -164,16 +155,7 @@ public class DartCompiler { |
if (context.getErrorCount() > 0) { |
return; |
} |
- if (!context.getFilesHaveChanged()) { |
- for (Backend be : backends) { |
- if(context.isOutOfDate(app, app, be.getAppExtension())) { |
- packageApp = true; |
- break; |
- } |
- } |
- } |
compileLibraries(); |
- packageApp(); |
} catch (IOException e) { |
context.onError(new DartCompilationError(app, DartCompilerErrorCode.IO, e.getMessage())); |
} finally { |
@@ -459,33 +441,16 @@ public class DartCompiler { |
return true; |
} |
- if (checkOnly) { |
- TraceEvent backendEvent = |
- Tracer.canTrace() ? Tracer.start(DartEventType.TIMESTAMP_OUTOFDATE, |
- "src", dartSrc.getName()) : null; |
- try { |
- if (context.isOutOfDate(dartSrc, dartSrc, EXTENSION_TIMESTAMP)) { |
- return true; |
- } |
- } finally { |
- Tracer.end(backendEvent); |
- } |
- } else { |
- // TODO(zundel): remove this case when code generation goes away |
- for (Backend backend : backends) { |
- TraceEvent backendEvent = |
- Tracer.canTrace() ? Tracer.start(DartEventType.BACKEND_OUTOFDATE, "be", backend |
- .getClass().getCanonicalName(), "src", dartSrc.getName()) : null; |
- try { |
- if (backend.isOutOfDate(dartSrc, context)) { |
- return true; |
- } |
- } finally { |
- Tracer.end(backendEvent); |
- } |
- } |
+ TraceEvent timestampEvent = |
+ Tracer.canTrace() ? Tracer.start( |
+ DartEventType.TIMESTAMP_OUTOFDATE, |
+ "src", |
+ dartSrc.getName()) : null; |
+ try { |
+ return context.isOutOfDate(dartSrc, dartSrc, EXTENSION_TIMESTAMP); |
+ } finally { |
+ Tracer.end(timestampEvent); |
} |
- return false; |
} finally { |
Tracer.end(logEvent); |
} |
@@ -749,10 +714,6 @@ public class DartCompiler { |
// Dump the compiler parse tree if dump format is set in arguments |
BaseASTWriter astWriter = ASTWriterFactory.create(config); |
- // Coverage instrumenter |
- CoverageInstrumenter coverageInstrumenter = CoverageInstrumenter.createInstance(config); |
- coverageInstrumenter.process(libraries); |
- |
// The two following for loops can be parallelized. |
for (LibraryUnit lib : libraries.values()) { |
boolean persist = false; |
@@ -782,7 +743,6 @@ public class DartCompiler { |
Tracer.end(phaseEvent); |
} |
if (context.getErrorCount() > 0) { |
- packageApp = false; |
return; |
} |
} |
@@ -790,30 +750,11 @@ public class DartCompiler { |
// To help support the IDE, notify the listener that this unit is compiled. |
context.unitCompiled(unit); |
- if (!checkOnly) { |
- // Run the unit through all the backends. This loop can also be |
- // parallelized. |
- for (Backend be : config.getBackends()) { |
- TraceEvent backendEvent = |
- Tracer.canTrace() ? Tracer.start(DartEventType.BACKEND_COMPILE, |
- "be", be.getClass().getSimpleName(), |
- "lib", lib.getName(), |
- "unit", unit.getSourceName()) : null; |
- try { |
- be.compileUnit(unit, unit.getSource(), context, typeProvider); |
- } finally { |
- Tracer.end(backendEvent); |
- } |
- } |
- } |
- |
// Update deps. |
lib.getDeps(context).update(context, unit); |
- // We compiled something, so remember that this means we need to |
- // persist the deps and package the app. |
+ // We analyzed something, so we need to persist the deps. |
persist = true; |
- packageApp = true; |
} |
// Persist the DEPS file. |
@@ -837,48 +778,6 @@ public class DartCompiler { |
writer.close(); |
} |
- private void packageApp() throws IOException { |
- TraceEvent logEvent = Tracer.canTrace() ? Tracer.start(DartEventType.PACKAGE_APP) : null; |
- |
- CompilerMetrics compilerMetrics = context.getCompilerMetrics(); |
- if (compilerMetrics != null) { |
- compilerMetrics.startPackageAppTime(); |
- } |
- |
- try { |
- // Package output for each backend. |
- if (packageApp) { |
- // When there's no entry-point in the application unit, |
- // don't attempt to package it. This can happen when |
- // compileUnit() is called on a library. |
- if (context.getApplicationUnit().getEntryNode() == null) { |
- if (config.expectEntryPoint()) { |
- context.onError(new DartCompilationError( |
- context.getApplicationUnit().getSource(), Location.NONE, |
- DartCompilerErrorCode.NO_ENTRY_POINT)); |
- } |
- return; |
- } |
- |
- for (Backend be : backends) { |
- TraceEvent backendEvent = |
- Tracer.canTrace() ? Tracer.start(DartEventType.BACKEND_PACKAGE_APP, "be", be |
- .getClass().getSimpleName()) : null; |
- try { |
- be.packageApp(app, libraries.values(), context, typeProvider); |
- } finally { |
- Tracer.end(backendEvent); |
- } |
- } |
- } |
- } finally { |
- if (compilerMetrics != null) { |
- compilerMetrics.endPackageAppTime(); |
- } |
- Tracer.end(logEvent); |
- } |
- } |
- |
DartUnit parse(DartSource dartSrc, Set<String> libraryPrefixes, boolean diet) throws IOException { |
TraceEvent parseEvent = |
Tracer.canTrace() ? Tracer.start(DartEventType.PARSE, "src", dartSrc.getName()) : null; |
@@ -1092,12 +991,6 @@ public class DartCompiler { |
TraceEvent logEvent = |
Tracer.canTrace() ? Tracer.start(DartEventType.COMPILE_APP, "src", sourceFile.toString()) |
: null; |
- File outFile = config.getOutputFilename(); |
- if (outFile != null && config.getBackends().size() > 1) { |
- // More than one backend is ambiguous. |
- throw new IllegalArgumentException("Output filename " |
- + outFile + " specified. Only valid with a single backend."); |
- } |
try { |
File outputDirectory = config.getOutputDirectory(); |
DefaultDartArtifactProvider provider = new DefaultDartArtifactProvider(outputDirectory); |
@@ -1106,53 +999,7 @@ public class DartCompiler { |
// Compile the Dart application and its dependencies. |
LibrarySource lib = new UrlLibrarySource(sourceFile); |
- config = new DelegatingCompilerConfiguration(config) { |
- @Override |
- public boolean expectEntryPoint() { |
- return true; |
- } |
- }; |
- |
String errorString = compileLib(lib, config, provider, listener); |
- |
- // Write out a copy of the generated JS if specified by the user |
- if (errorString == null && outFile != null && !config.getBackends().isEmpty()) { |
- File dir = outFile.getParentFile(); |
- if (dir != null) { |
- if (dir != null && !dir.exists()) { |
- throw new IOException("Cannot create: " + outFile.getName() |
- + ". " + dir + " does not exist"); |
- } |
- if (!dir.canWrite()) { |
- throw new IOException("Cannot write " + outFile.getName() + " to " |
- + dir + ": Permission denied."); |
- } |
- } else { |
- dir = new File ("."); |
- if (!dir.canWrite()) { |
- throw new IOException("Cannot write " + outFile.getName() + " to " |
- + dir + ": Permission denied."); |
- } |
- } |
- |
- if (!config.getCompilerOptions().checkOnly()) { |
- Reader r = null; |
- try { |
- // HACK: there can be more than one backend. Since there isn't |
- // an obvious way to tell which one the user meant, for now |
- // just restrict the option to save the output if more than |
- // one is active. |
- r = provider.getArtifactReader(lib, "", |
- config.getBackends().get(0).getAppExtension()); |
- String js = CharStreams.toString(r); |
- if (r != null) { |
- Files.write(js, outFile, Charset.defaultCharset()); |
- } |
- } finally { |
- Closeables.close(r, true); |
- } |
- } |
- } |
return errorString; |
} finally { |
Tracer.end(logEvent); |
@@ -1163,12 +1010,8 @@ public class DartCompiler { |
* Compiles the given library, translating all its source files, and those |
* of its imported libraries, transitively. |
* |
- * If the specified library contains an entry-point method, then the application will be packaged |
- * by each backend. Otherwise, only library artifacts will be generated. |
- * |
* @param lib The library to be compiled (not <code>null</code>) |
* @param config The compiler configuration specifying the compilation phases |
- * and backends |
* @param provider A mechanism for specifying where code should be generated |
* @param listener An object notified when compilation errors occur |
*/ |
@@ -1212,7 +1055,8 @@ public class DartCompiler { |
if (!context.getFilesHaveChanged()) { |
return null; |
} |
- if (config.checkOnly()) { |
+ // Write checking log. |
+ { |
Writer writer = provider.getArtifactWriter(lib, "", EXTENSION_LOG); |
boolean threw = true; |
try { |
@@ -1235,9 +1079,8 @@ public class DartCompiler { |
* instead of parsing the associated source from storage. Intended for |
* IDE use when modified buffers must be analyzed. AST nodes in the map may be |
* ignored if not referenced by {@code lib}. (May be null.) |
- * @param config The compiler configuration (phases and backends |
- * will not be used), but resolution and type-analysis will be |
- * invoked |
+ * @param config The compiler configuration (phases will not be used), but resolution and |
+ * type-analysis will be invoked |
* @param provider A mechanism for specifying where code should be generated |
* @param listener An object notified when compilation errors occur |
* @throws NullPointerException if any of the arguments except {@code parsedUnits} |