aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Damien Martin-Guillerez <dmarting@google.com>2017-03-03 11:03:08 +0000
committerGravatar Yue Gan <yueg@google.com>2017-03-06 09:43:57 +0000
commit7b295d34f3a4f42c13aafc1cc8afba3cb4aa2985 (patch)
tree7fceaeedcb83832be01178b9676b2029c8a5b018
parent2697dd3e7f3b66918a2a3aa5a74144cf0c5a61f0 (diff)
Pass through -sourcepath to the JavaBuilder
Fix #2606. -- PiperOrigin-RevId: 149096656 MOS_MIGRATED_REVID=149096656
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/buildjar/JavaLibraryBuildRequest.java7
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/buildjar/OptionsParser.java23
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavacArguments.java6
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavacMain.java2
-rwxr-xr-xsrc/test/shell/bazel/bazel_java_test.sh39
5 files changed, 76 insertions, 1 deletions
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/JavaLibraryBuildRequest.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/JavaLibraryBuildRequest.java
index ece6484ba2..7d5b77c15a 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/JavaLibraryBuildRequest.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/JavaLibraryBuildRequest.java
@@ -55,6 +55,7 @@ public final class JavaLibraryBuildRequest {
/** Resource files that should be put in the root of the output jar. */
private final ImmutableList<String> rootResourceFiles;
+ private final String sourcePath;
private final String classPath;
private final String bootClassPath;
private final String extdir;
@@ -152,6 +153,7 @@ public final class JavaLibraryBuildRequest {
this.resourceJars = ImmutableList.copyOf(optionsParser.getResourceJars());
this.rootResourceFiles = ImmutableList.copyOf(optionsParser.getRootResourceFiles());
this.classPath = optionsParser.getClassPath();
+ this.sourcePath = optionsParser.getSourcePath();
this.bootClassPath = optionsParser.getBootClassPath();
this.extdir = optionsParser.getExtdir();
this.processorPath = optionsParser.getProcessorPath();
@@ -197,6 +199,10 @@ public final class JavaLibraryBuildRequest {
return sourceGenDir;
}
+ public String getSourcePath() {
+ return sourcePath;
+ }
+
public String getGeneratedSourcesOutputJar() {
return generatedSourcesOutputJar;
}
@@ -293,6 +299,7 @@ public final class JavaLibraryBuildRequest {
.javacOptions(makeJavacArguments())
.sourceFiles(ImmutableList.copyOf(getSourceFiles()))
.processors(null)
+ .sourcePath(toPaths(getSourcePath()))
.sourceOutput(getSourceGenDir() != null ? Paths.get(getSourceGenDir()) : null)
.processorPath(toPaths(getProcessorPath()))
.plugins(getPlugins())
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/OptionsParser.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/OptionsParser.java
index 7815284fd6..a2556b17bf 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/OptionsParser.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/OptionsParser.java
@@ -65,6 +65,7 @@ public final class OptionsParser {
private final List<String> rootResourceFiles = new ArrayList<>();
private String classPath = "";
+ private String sourcePath;
private String bootClassPath;
private String extdir;
@@ -109,6 +110,7 @@ public final class OptionsParser {
// terminator to the passed arguments.
collectFlagArguments(javacOpts, argQueue, "--");
bootClassPathFromJavacOpts();
+ sourcePathFromJavacOpts();
break;
case "--direct_dependency":
{
@@ -169,6 +171,10 @@ public final class OptionsParser {
case "--classpath":
classPath = getArgument(argQueue, arg);
break;
+ // TODO(#970): Consider wether we want to use --sourcepath for resolving of #970.
+ case "--sourcepath":
+ sourcePath = getArgument(argQueue, arg);
+ break;
case "--bootclasspath":
bootClassPath = getArgument(argQueue, arg);
break;
@@ -332,6 +338,19 @@ public final class OptionsParser {
}
}
+ // TODO(#970): Delete that function (either set --sourcepath from Bazel or just drop support).
+ private void sourcePathFromJavacOpts() {
+ Iterator<String> it = javacOpts.iterator();
+ while (it.hasNext()) {
+ String curr = it.next();
+ if (curr.equals("-sourcepath") && it.hasNext()) {
+ it.remove();
+ sourcePath = it.next();
+ it.remove();
+ }
+ }
+ }
+
public List<String> getJavacOpts() {
return javacOpts;
}
@@ -408,6 +427,10 @@ public final class OptionsParser {
return bootClassPath;
}
+ public String getSourcePath() {
+ return sourcePath;
+ }
+
public String getExtdir() {
return extdir;
}
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavacArguments.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavacArguments.java
index 06c3e1c8ee..f4da51ca7a 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavacArguments.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavacArguments.java
@@ -42,6 +42,9 @@ public abstract class BlazeJavacArguments {
/** The compilation bootclasspath. */
public abstract ImmutableList<Path> bootClassPath();
+ /** The compilation source path. */
+ public abstract ImmutableList<Path> sourcePath();
+
/** The classpath to load processors from. */
public abstract ImmutableList<Path> processorPath();
@@ -68,6 +71,7 @@ public abstract class BlazeJavacArguments {
.bootClassPath(ImmutableList.of())
.javacOptions(ImmutableList.of())
.sourceFiles(ImmutableList.of())
+ .sourcePath(ImmutableList.of())
.processors(null)
.sourceOutput(null)
.processorPath(ImmutableList.of())
@@ -85,6 +89,8 @@ public abstract class BlazeJavacArguments {
Builder javacOptions(ImmutableList<String> javacOptions);
+ Builder sourcePath(ImmutableList<Path> sourcePath);
+
Builder sourceFiles(ImmutableList<Path> sourceFiles);
Builder processors(ImmutableList<Processor> processors);
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavacMain.java b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavacMain.java
index ad55b68e69..1cd5584656 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavacMain.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/buildjar/javac/BlazeJavacMain.java
@@ -168,7 +168,7 @@ public class BlazeJavacMain {
fileManager.setLocationFromPaths(StandardLocation.CLASS_PATH, arguments.classPath());
fileManager.setLocationFromPaths(
StandardLocation.CLASS_OUTPUT, ImmutableList.of(arguments.classOutput()));
- fileManager.setLocationFromPaths(StandardLocation.SOURCE_PATH, ImmutableList.of());
+ fileManager.setLocationFromPaths(StandardLocation.SOURCE_PATH, arguments.sourcePath());
// TODO(cushon): require an explicit bootclasspath
Iterable<Path> bootClassPath = arguments.bootClassPath();
if (!Iterables.isEmpty(bootClassPath)) {
diff --git a/src/test/shell/bazel/bazel_java_test.sh b/src/test/shell/bazel/bazel_java_test.sh
index 1ce5184edd..df5eae4ec9 100755
--- a/src/test/shell/bazel/bazel_java_test.sh
+++ b/src/test/shell/bazel/bazel_java_test.sh
@@ -105,6 +105,45 @@ function test_build_hello_world() {
bazel build //java/main:main &> $TEST_log || fail "build failed"
}
+# Regression test for #2606: support for passing -sourcepath
+# TODO(#2606): Update when a final solution is found for #2606.
+function test_build_with_sourcepath() {
+ mkdir -p g
+ cat >g/A.java <<'EOF'
+package g;
+public class A {
+ public A() {
+ new B();
+ }
+}
+EOF
+
+ cat >g/B.java <<'EOF'
+package g;
+public class B {
+ public B() {
+ }
+}
+EOF
+
+ cat >g/BUILD <<'EOF'
+genrule(
+ name = "stub",
+ srcs = ["B.java"],
+ outs = ["B.jar"],
+ cmd = "zip $@ $(SRCS)",
+)
+
+java_library(
+ name = "test",
+ srcs = ["A.java"],
+ javacopts = ["-sourcepath $(GENDIR)/$(location :stub)", "-implicit:none"],
+ deps = [":stub"]
+)
+EOF
+ bazel build //g:test >$TEST_log || fail "Failed to build //g:test"
+}
+
# Runfiles is disabled by default on Windows, but we can test it on Unix by
# adding flag --experimental_enable_runfiles=0
function test_build_and_run_hello_world_without_runfiles() {