test/tools/sjavac/SJavac.java

Print this page

        

*** 23,33 **** /* * @test * @summary Test all aspects of sjavac. ! * @bug 8004658 8042441 8042699 8054461 8054474 * * @build Wrapper * @run main Wrapper SJavac */ --- 23,33 ---- /* * @test * @summary Test all aspects of sjavac. ! * @bug 8004658 8042441 8042699 8054461 8054474 8054717 * * @build Wrapper * @run main Wrapper SJavac */
*** 62,92 **** --- 62,96 ---- Path gensrc2; Path gensrc3; // Where to put compiled classes. Path bin; + Path bin2; // Where to put c-header files. Path headers; // The sjavac compiler. Main main = new Main(); // Remember the previous bin and headers state here. Map<String,Long> previous_bin_state; + Map<String,Long> previous_bin2_state; Map<String,Long> previous_headers_state; public void test() throws Exception { gensrc = defaultfs.getPath("gensrc"); gensrc2 = defaultfs.getPath("gensrc2"); gensrc3 = defaultfs.getPath("gensrc3"); bin = defaultfs.getPath("bin"); + bin2 = defaultfs.getPath("bin2"); headers = defaultfs.getPath("headers"); Files.createDirectory(gensrc); Files.createDirectory(gensrc2); Files.createDirectory(gensrc3); Files.createDirectory(bin); + Files.createDirectory(bin2); Files.createDirectory(headers); initialCompile(); incrementalCompileNoChanges(); incrementalCompileDroppingClasses();
*** 97,106 **** --- 101,111 ---- compileWithOverrideSource(); compileWithInvisibleSources(); compileCircularSources(); compileExcludingDependency(); incrementalCompileTestFullyQualifiedRef(); + compileTestingClasspathPubapis(); compileWithAtFile(); testStateDir(); delete(gensrc); delete(gensrc2);
*** 464,473 **** --- 469,541 ---- "bin/beta/B.class", "bin/javac_state"); } /** + * Tests that we track the pubapis of classes on the classpath. + * @throws Exception If test fails + */ + void compileTestingClasspathPubapis() throws Exception { + System.out.println("\nTest pubapi changes of classes on the classpath."); + System.out.println("--------------------------------------------------"); + + delete(gensrc); + delete(gensrc2); + delete(bin); + delete(bin2); + + populate(gensrc, + "alfa/omega/A.java", + "package alfa.omega; import beta.B; public class A { B b; }", + "beta/B.java", + "package beta; public class B { }"); + + populate(gensrc2, + "gamma/C.java", + "package gamma; import alfa.omega.A; public class C { A a; }"); + System.out.println("Compiling bin..."); + compile("-src", "gensrc", "-d", "bin", "--server:portfile=testserver,background=false"); + System.out.println("Compiling bin2..."); + compile("-classpath", "bin", "-src", "gensrc2", "-d", "bin2", "--server:portfile=testserver,background=false"); + + previous_bin2_state = collectState(bin2); + populate(gensrc, + "alfa/omega/AA.java", + "package alfa.omega; public class AA { }"); + + System.out.println("Compiling bin again..."); + compile("-src", "gensrc", "-d", "bin", "--server:portfile=testserver,background=false"); + System.out.println("Compiling bin2 again..."); + compile("-classpath", "bin", "-src", "gensrc2", "-d", "bin2", "--server:portfile=testserver,background=false"); + + Map<String,Long> new_bin2_state = collectState(bin2); + // Adding the class AA to alfa.A does not change the pubapi of the classes in alfa.A that + // is actually used. Thus there should be no change of bin2. If alfa.A had been inside a jar + // file, then bin2/javac_state would have been updated with a new timestamp for the jar. + verifyNewerFiles(previous_bin2_state, new_bin2_state, + "bin2/javac_state"); + + // Now modify pubapi of A + previous_bin2_state = collectState(bin2); + populate(gensrc, + "alfa/omega/A.java", + "package alfa.omega; import beta.B; public class A { B b; public int a; }"); + + System.out.println("Compiling bin again..."); + compile("-src", "gensrc", "-d", "bin", "--server:portfile=testserver,background=false"); + System.out.println("Compiling bin2 again"); + compile("-classpath", "bin", "-src", "gensrc2", "-d", "bin2", "--server:portfile=testserver,background=false"); + + new_bin2_state = collectState(bin2); + // Check that C was really recompiled due to the change in A:s pubapi. + verifyNewerFiles(previous_bin2_state, new_bin2_state, + "bin2/gamma/C.class", + "bin2/javac_state"); + + } + + /** * Tests @atfile * @throws Exception If test fails */ void compileWithAtFile() throws Exception { System.out.println("\nTest @atfile with command line content.");