aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Liam Miller-Cushon <cushon@google.com>2016-04-07 18:08:59 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-04-08 14:34:37 +0000
commit8d061b85a91e70df10d2f20f81217386539560c1 (patch)
tree64a681bb93f5855267b1f25cc5245a5bdc5e76b4 /src
parent7cb78991f1d23136dbd8541df82c7436521aa21c (diff)
Don't emit native headers, only Java headers
If NATIVE_HEADER_OUTPUT is set (which it always was for ZipOutputFileManager), then javac will emit jni headers for native methods. Emitting the the headers requires doing unnecessary additional work and completing additional symbols, which may not be present on the classpath. -- MOS_MIGRATED_REVID=119286406
Diffstat (limited to 'src')
-rw-r--r--src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/ZipOutputFileManager.java3
-rw-r--r--src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java27
2 files changed, 29 insertions, 1 deletions
diff --git a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/ZipOutputFileManager.java b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/ZipOutputFileManager.java
index 42d698e7d8..6120245a88 100644
--- a/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/ZipOutputFileManager.java
+++ b/src/java_tools/buildjar/java/com/google/devtools/build/java/turbine/javac/ZipOutputFileManager.java
@@ -38,6 +38,7 @@ import javax.tools.FileObject;
import javax.tools.JavaFileManager;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
+import javax.tools.StandardLocation;
/** A {@link JavacFileManager} that collects output into a zipfile. */
@Trusted
@@ -55,7 +56,7 @@ public class ZipOutputFileManager extends JavacFileManager {
* implementation.
*/
private boolean ownedLocation(Location location) {
- return location.isOutputLocation();
+ return location.isOutputLocation() && location != StandardLocation.NATIVE_HEADER_OUTPUT;
}
@Override
diff --git a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
index 234f5d0865..79c43aba64 100644
--- a/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
+++ b/src/java_tools/buildjar/javatests/com/google/devtools/build/java/turbine/javac/JavacTurbineTest.java
@@ -1209,4 +1209,31 @@ public class JavacTurbineTest {
String output = new String(outputs.get("output.txt"), UTF_8);
assertThat(output).isEqualTo("[42, hello, 42.1]");
}
+
+ public static class TransitiveDep {}
+
+ public static class DirectDep extends TransitiveDep {}
+
+ @Test
+ public void noNativeHeaderOutput() throws Exception {
+
+ // deliberately exclude TransitiveDep
+ Path deps = createClassJar("libdeps.jar", JavacTurbineTest.class, DirectDep.class);
+
+ // compilation will complete supertypes of DirectDep iff NATIVE_HEADER_OUTPUT is set
+ addSourceLines(
+ "Hello.java",
+ "import " + DirectDep.class.getCanonicalName() + ";",
+ "class Hello {",
+ " public native DirectDep foo() /*-{",
+ " }-*/;",
+ "}");
+
+ optionsBuilder.addClassPathEntries(Collections.singleton(deps.toString()));
+ optionsBuilder.addDirectJarToTarget(deps.toString(), "//deps");
+
+ compile();
+ Map<String, byte[]> outputs = collectOutputs();
+ assertThat(outputs.keySet()).containsExactly("Hello.class");
+ }
}