diff options
author | 2016-04-07 18:08:59 +0000 | |
---|---|---|
committer | 2016-04-08 14:34:37 +0000 | |
commit | 8d061b85a91e70df10d2f20f81217386539560c1 (patch) | |
tree | 64a681bb93f5855267b1f25cc5245a5bdc5e76b4 /src | |
parent | 7cb78991f1d23136dbd8541df82c7436521aa21c (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')
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"); + } } |