diff options
author | 2015-03-20 19:58:00 +0000 | |
---|---|---|
committer | 2015-03-23 11:56:48 +0000 | |
commit | ba074b621e9685f4703c3aecce7fb5ac29ea7901 (patch) | |
tree | 49ca71920bbd74125a79dbc9a2cf593c9813a3b3 | |
parent | b92fbb0b606c2c7bc1d4e7bdb073098afd9d193c (diff) |
Description redacted.
--
MOS_MIGRATED_REVID=89148288
5 files changed, 60 insertions, 11 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java index bfccae39eb..f1a01ad3f9 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java @@ -73,6 +73,9 @@ public class BazelJavaSemantics implements JavaSemantics { FileTypeSet.of(FileType.of(".sh"), JavaSemantics.JAVA_SOURCE), "srcs", "deps", "data"); + private static final String JAVABUILDER_CLASS_NAME = + "com.google.devtools.build.buildjar.BazelJavaBuilder"; + private BazelJavaSemantics() { } @@ -138,6 +141,11 @@ public class BazelJavaSemantics implements JavaSemantics { } @Override + public Iterable<Artifact> getInstrumentationJars(RuleContext context) { + return ImmutableList.of(); + } + + @Override public void buildJavaCommandLine(Collection<Artifact> outputs, BuildConfiguration configuration, CustomCommandLine.Builder result) { } @@ -343,4 +351,9 @@ public class BazelJavaSemantics implements JavaSemantics { } return ImmutableList.<String>of(); } + + @Override + public String getJavaBuilderMainClass() { + return JAVABUILDER_CLASS_NAME; + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/BaseJavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/BaseJavaCompilationHelper.java index ace7deb8e4..3f8448a010 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/BaseJavaCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/BaseJavaCompilationHelper.java @@ -121,6 +121,13 @@ public class BaseJavaCompilationHelper { } /** + * Returns the instrumentation jar in the given semantics. + */ + protected final Iterable<Artifact> getInstrumentationJars(JavaSemantics semantics) { + return semantics.getInstrumentationJars(ruleContext); + } + + /** * Returns the javac bootclasspath artifacts. */ protected final Iterable<Artifact> getBootClasspath() { diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java index 55afb4e8f4..a1e41f791d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java @@ -103,6 +103,7 @@ public class JavaCompilationHelper extends BaseJavaCompilationHelper { builder.setGensrcOutputJar(gensrcOutputJar); builder.setOutputDepsProto(outputDepsProto); builder.setMetadata(outputMetadata); + builder.setInstrumentationJars(getInstrumentationJars(semantics)); builder.addSourceFiles(attributes.getSourceFiles()); builder.addSourceJars(attributes.getSourceJars()); builder.setJavacOpts(javacOpts); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java index 74627f3b0a..28bc1c98a8 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java @@ -179,6 +179,7 @@ public class JavaCompileAction extends AbstractAction { List<Artifact> processorPath, Artifact langtoolsJar, Artifact javaBuilderJar, + Iterable<Artifact> instrumentationJars, List<String> processorNames, Collection<Artifact> messages, Collection<Artifact> resources, @@ -202,6 +203,7 @@ public class JavaCompileAction extends AbstractAction { .addAll(baseInputs) .add(langtoolsJar) .add(javaBuilderJar) + .addAll(instrumentationJars) .build(), outputs); this.javaCompileCommandLine = javaCompileCommandLine; @@ -479,8 +481,6 @@ public class JavaCompileAction extends AbstractAction { Artifact outputDepsProto, final NestedSet<Artifact> classpath, List<Artifact> processorPath, - Artifact langtoolsJar, - Artifact javaBuilderJar, List<String> processorNames, Collection<Artifact> messages, Collection<Artifact> resources, @@ -495,8 +495,6 @@ public class JavaCompileAction extends AbstractAction { Label targetLabel) { Preconditions.checkNotNull(classDirectory); Preconditions.checkNotNull(tempDirectory); - Preconditions.checkNotNull(langtoolsJar); - Preconditions.checkNotNull(javaBuilderJar); CustomCommandLine.Builder result = CustomCommandLine.builder(); @@ -668,10 +666,13 @@ public class JavaCompileAction extends AbstractAction { * The actual command line executed for a compile action. */ private static CommandLine spawnCommandLine(PathFragment javaExecutable, Artifact javaBuilderJar, - Artifact langtoolsJar, Artifact paramFile, ImmutableList<String> javaBuilderJvmFlags) { + Artifact langtoolsJar, ImmutableList<Artifact> instrumentationJars, Artifact paramFile, + ImmutableList<String> javaBuilderJvmFlags, String javaBuilderMainClass, + String pathDelimiter) { Preconditions.checkNotNull(langtoolsJar); Preconditions.checkNotNull(javaBuilderJar); - return CustomCommandLine.builder() + + CustomCommandLine.Builder builder = CustomCommandLine.builder() .addPath(javaExecutable) // Langtools jar is placed on the boot classpath so that it can override classes // in the JRE. Typically this has no effect since langtools.jar does not have @@ -680,8 +681,17 @@ public class JavaCompileAction extends AbstractAction { // different version than AND has an overlap in contents with the default // run-time (eg while upgrading the Java version). .addPaths("-Xbootclasspath/p:%s", langtoolsJar.getExecPath()) - .add(javaBuilderJvmFlags) - .addExecPath("-jar", javaBuilderJar) + .add(javaBuilderJvmFlags); + if (!instrumentationJars.isEmpty()) { + builder + .addJoinExecPaths("-cp", pathDelimiter, + Iterables.concat(instrumentationJars, ImmutableList.of(javaBuilderJar))) + .add(javaBuilderMainClass); + } else { + // If there are no instrumentation jars, use the simpler '-jar' option to launch JavaBuilder. + builder.addExecPath("-jar", javaBuilderJar); + } + return builder .addPaths("@%s", paramFile.getExecPath()) .build(); } @@ -718,6 +728,7 @@ public class JavaCompileAction extends AbstractAction { private ImmutableList<Artifact> bootclasspathEntries = ImmutableList.of(); private Artifact javaBuilderJar; private Artifact langtoolsJar; + private ImmutableList<Artifact> instrumentationJars = ImmutableList.of(); private PathFragment classDirectory; private PathFragment sourceGenDirectory; private PathFragment tempDirectory; @@ -820,8 +831,6 @@ public class JavaCompileAction extends AbstractAction { outputDepsProto, classpathEntries, processorPath, - langtoolsJar, - javaBuilderJar, processorNames, translations, resources, @@ -844,8 +853,11 @@ public class JavaCompileAction extends AbstractAction { javaExecutable, javaBuilderJar, langtoolsJar, + instrumentationJars, paramFile, - javaConfiguration.getDefaultJavaBuilderJvmFlags()); + javaConfiguration.getDefaultJavaBuilderJvmFlags(), + semantics.getJavaBuilderMainClass(), + configuration.getHostPathSeparator()); return new JavaCompileAction(owner, baseInputs, @@ -858,6 +870,7 @@ public class JavaCompileAction extends AbstractAction { processorPath, langtoolsJar, javaBuilderJar, + instrumentationJars, processorNames, translations, resources, @@ -1017,6 +1030,11 @@ public class JavaCompileAction extends AbstractAction { return this; } + public Builder setInstrumentationJars(Iterable<Artifact> instrumentationJars) { + this.instrumentationJars = ImmutableList.copyOf(instrumentationJars); + return this; + } + public Builder setRuleKind(String ruleKind) { this.ruleKind = ruleKind; return this; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java index 64b62145de..f9e9b7fb1f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java @@ -192,6 +192,11 @@ public interface JavaSemantics { AnalysisEnvironment analysisEnvironment, Artifact outputJar); /** + * Returns the instrumentation libraries (jars) for the given context. + */ + Iterable<Artifact> getInstrumentationJars(RuleContext context); + + /** * May add extra command line options to the Java compile command line. */ void buildJavaCommandLine(Collection<Artifact> outputs, BuildConfiguration configuration, @@ -348,4 +353,9 @@ public interface JavaSemantics { * @return a list of extra arguments to appends to the runfiles support. */ List<String> getExtraArguments(RuleContext ruleContext, JavaCommon javaCommon); + + /** + * @return main class (entry point) for the Java compiler. + */ + String getJavaBuilderMainClass(); } |