2370N/A/*
2685N/A * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
2370N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2370N/A *
2370N/A * This code is free software; you can redistribute it and/or modify it
2370N/A * under the terms of the GNU General Public License version 2 only, as
2685N/A * published by the Free Software Foundation.
2370N/A *
2685N/A * This code is distributed in the hope that it will be useful, but WITHOUT
2370N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2370N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
2370N/A * version 2 for more details (a copy is included in the LICENSE file that
2370N/A * accompanied this code).
2370N/A *
2370N/A * You should have received a copy of the GNU General Public License version
2370N/A * 2 along with this work; if not, write to the Free Software Foundation,
2370N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2370N/A *
2370N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2370N/A * or visit www.oracle.com if you need additional information or have any
2685N/A * questions.
2685N/A */
2685N/A
2370N/A/*
2370N/A * @test
2370N/A * @bug 6350124 6410012
2370N/A * @summary javac -s does not have the generated source files
2370N/A */
2370N/A
2370N/Aimport java.io.File;
2370N/Aimport java.io.PrintWriter;
2370N/Aimport javax.tools.Tool;
2370N/Aimport javax.tools.ToolProvider;
2370N/A
2370N/Apublic class T6350124 {
2370N/A public static void main(String[] args) {
2370N/A String classpath = System.getProperty("java.class.path");
2370N/A File srcDir = new File(System.getProperty("test.src"));
2370N/A
2370N/A // ensure the output directories are empty
2370N/A mkCleanDir(new File("aClasses"));
2370N/A mkCleanDir(new File("newClasses"));
2370N/A mkCleanDir(new File("newSrc"));
2370N/A
2370N/A // compile the annotation processor
2370N/A compile("-cp", classpath,
2370N/A "-d", "aClasses", path(srcDir, "HelloWorldAP.java"));
2370N/A
2370N/A // compile the test program, invoking the anotation processor
2370N/A compile("-cp", classpath,
2370N/A "-sourcepath", srcDir.getPath(),
2370N/A "-d", "newClasses",
2370N/A "-s", "newSrc",
2370N/A "-processorpath", "aClasses",
2370N/A "-processor", "HelloWorldAP", // specify processor for simplicity
2370N/A "-proc:only",
2370N/A path(srcDir, "Marked.java"));
2370N/A
2370N/A File hw = new File("newSrc", "HelloWorld.java");
2370N/A if (!hw.exists())
2370N/A throw new AssertionError("generated source file not found");
2370N/A
2370N/A File dc = new File("newClasses", "HelloWorldAP.class");
2370N/A if (!dc.exists())
2370N/A throw new AssertionError("generated class file not found");
2370N/A }
2370N/A
2370N/A //--- the following can be considered "library code" for the test
2370N/A
2370N/A // note: jtreg @clean will only clean class files; not source files
2370N/A static void clean(File file) {
2370N/A if (!file.exists())
2370N/A return;
2370N/A if (file.isDirectory()) {
2370N/A for (File f: file.listFiles())
2370N/A clean(f);
2370N/A }
2370N/A file.delete();
2370N/A }
static void mkCleanDir(File dir) {
clean(dir);
dir.mkdirs();
}
// note: jtreg @compile does not allow -d to be specified
static void compile(String... args) {
StringBuffer sb = new StringBuffer("compile:");
for (String a: args)
sb.append(' ').append(a);
System.err.println(sb);
Tool t = ToolProvider.getSystemJavaCompiler();
int rc = t.run(System.in, System.out, System.err, args);
System.out.flush();
System.err.flush();
if (rc != 0)
throw new Error("compilation failed");
}
static String path(File dir, String name) {
return new File(dir, name).getPath();
}
}