aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-03-20 19:58:00 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2015-03-23 11:56:48 +0000
commitba074b621e9685f4703c3aecce7fb5ac29ea7901 (patch)
tree49ca71920bbd74125a79dbc9a2cf593c9813a3b3
parentb92fbb0b606c2c7bc1d4e7bdb073098afd9d193c (diff)
Description redacted.
-- MOS_MIGRATED_REVID=89148288
-rw-r--r--src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaSemantics.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/BaseJavaCompilationHelper.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationHelper.java1
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java40
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaSemantics.java10
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();
}