This commit is contained in:
Lana Steuck 2010-01-22 09:34:46 -08:00
commit 8fb9c68bfb
22 changed files with 464 additions and 38 deletions

View File

@ -144,8 +144,8 @@ else
ifdef ALT_JDK_TOPDIR
ANT_OPTIONS += -Dimport.jdk=$(ALT_JDK_TOPDIR)
else
ifdef ALT_JDK_IMPORT_DIR
ANT_OPTIONS += -Dimport.jdk=$(ALT_JDK_IMPORT_DIR)
ifdef ALT_JDK_IMPORT_PATH
ANT_OPTIONS += -Dimport.jdk=$(ALT_JDK_IMPORT_PATH)
endif
endif
endif

View File

@ -107,14 +107,21 @@
ignoresystemclasses="true"
classpath="${import.jdk}/jre/lib/rt.jar" classname="java.nio.file.Path"/>
<!-- Set the default value of the sourcepath used for javac. -->
<condition property="javac.sourcepath" value="${build.genstubs.dir}" else="">
<isset property="import.jdk.src.dir"/>
</condition>
<!-- Set the default value of the classpath used for javac. -->
<property name="javac.classpath" value=""/>
<!-- Set the default bootclasspath option used for javac.
Note that different variants of the option are used, meaning we can't just
define the value for the option.
Note the explicit use of the standard property ${path.separator} in the following.
This is because Ant is not clever enough to handle direct use of : or ; -->
<condition property="javac.bootclasspath.opt"
value="-Xbootclasspath:${build.classes.dir}:${import.jdk.jar}"
value="-Xbootclasspath:${build.classes.dir}${path.separator}${import.jdk.jar}"
else="-Xbootclasspath/p:${build.classes.dir}">
<isset property="import.jdk.jar"/>
</condition>

View File

@ -101,7 +101,7 @@ public class CompileProperties {
boolean ok = true;
/* Original usage */
if (args.length == 2 && args[0].charAt(0) != '-' ) {
ok = createFile(args[0], args[1], "ListResourceBundle");
ok = createFile(args[0], args[1], "java.util.ListResourceBundle");
} else if (args.length == 3) {
ok = createFile(args[0], args[1], args[2]);
} else if (args.length == 0) {
@ -285,9 +285,9 @@ public class CompileProperties {
log.info(" java CompileProperties {-compile path_to_properties_file path_to_java_output_file super_class} -or- -optionsfile filename");
log.info("");
log.info("Example:");
log.info(" java CompileProperties -compile test.properties test.java ListResourceBundle");
log.info(" java CompileProperties -compile test.properties test.java java.util.ListResourceBundle");
log.info(" java CompileProperties -optionsfile option_file");
log.info("option_file contains: -compile test.properties test.java ListResourceBundle");
log.info("option_file contains: -compile test.properties test.java java.util.ListResourceBundle");
}
private static String escape(String theString) {
@ -379,7 +379,6 @@ public class CompileProperties {
private static final String FORMAT =
"{0}" +
"import java.util.ListResourceBundle;\n\n" +
"public final class {1} extends {2} '{'\n" +
" protected final Object[][] getContents() '{'\n" +
" return new Object[][] '{'\n" +

View File

@ -45,6 +45,7 @@ public class CompilePropertiesTask extends MatchingTask {
this.superclass = superclass;
}
@Override
public void execute() {
CompileProperties.Log log = new CompileProperties.Log() {
public void error(String msg, Exception e) {
@ -84,7 +85,7 @@ public class CompilePropertiesTask extends MatchingTask {
log("Generating " + count + " resource files to " + destDir, Project.MSG_INFO);
CompileProperties cp = new CompileProperties();
cp.setLog(log);
boolean ok = cp.run((String[])mainOpts.toArray(new String[mainOpts.size()]));
boolean ok = cp.run(mainOpts.toArray(new String[mainOpts.size()]));
if (!ok)
throw new BuildException("CompileProperties failed.");
}

View File

@ -22,6 +22,7 @@
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
import java.io.*;
import java.util.*;
import javax.tools.JavaFileObject;
@ -41,15 +42,22 @@ import com.sun.tools.javac.api.JavacTool;
import com.sun.tools.javac.code.Flags;
import com.sun.tools.javac.code.TypeTags;
import com.sun.tools.javac.tree.JCTree;
import com.sun.tools.javac.tree.JCTree.JCBlock;
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit;
import com.sun.tools.javac.tree.JCTree.JCFieldAccess;
import com.sun.tools.javac.tree.JCTree.JCIdent;
import com.sun.tools.javac.tree.JCTree.JCImport;
import com.sun.tools.javac.tree.JCTree.JCLiteral;
import com.sun.tools.javac.tree.JCTree.JCMethodDecl;
import com.sun.tools.javac.tree.JCTree.JCModifiers;
import com.sun.tools.javac.tree.JCTree.JCStatement;
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
import com.sun.tools.javac.tree.Pretty;
import com.sun.tools.javac.tree.TreeMaker;
import com.sun.tools.javac.tree.TreeScanner;
import com.sun.tools.javac.tree.TreeTranslator;
import com.sun.tools.javac.util.Context;
import com.sun.tools.javac.util.ListBuffer;
import com.sun.tools.javac.util.Name;
import javax.tools.JavaFileManager;
/**
* Generate stub source files by removing implementation details from input files.
@ -161,6 +169,7 @@ public class GenStubs {
void makeStub(StandardJavaFileManager fm, CompilationUnitTree tree) throws IOException {
CompilationUnitTree tree2 = new StubMaker().translate(tree);
CompilationUnitTree tree3 = new ImportCleaner(fm).removeRedundantImports(tree2);
String className = fm.inferBinaryName(StandardLocation.SOURCE_PATH, tree.getSourceFile());
JavaFileObject fo = fm.getJavaFileForOutput(StandardLocation.SOURCE_OUTPUT,
@ -168,7 +177,7 @@ public class GenStubs {
// System.err.println("Writing " + className + " to " + fo.getName());
Writer out = fo.openWriter();
try {
new Pretty(out, true).printExpr((JCTree) tree2);
new Pretty(out, true).printExpr((JCTree) tree3);
} finally {
out.close();
}
@ -272,6 +281,53 @@ public class GenStubs {
}
}
class ImportCleaner extends TreeScanner {
private Set<Name> names = new HashSet<Name>();
private TreeMaker m;
ImportCleaner(JavaFileManager fm) {
// ImportCleaner itself doesn't require a filemanager, but instantiating
// a TreeMaker does, indirectly (via ClassReader, sigh)
Context c = new Context();
c.put(JavaFileManager.class, fm);
m = TreeMaker.instance(c);
}
CompilationUnitTree removeRedundantImports(CompilationUnitTree t) {
JCCompilationUnit tree = (JCCompilationUnit) t;
tree.accept(this);
ListBuffer<JCTree> defs = new ListBuffer<JCTree>();
for (JCTree def: tree.defs) {
if (def.getTag() == JCTree.IMPORT) {
JCImport imp = (JCImport) def;
if (imp.qualid.getTag() == JCTree.SELECT) {
JCFieldAccess qualid = (JCFieldAccess) imp.qualid;
if (!qualid.name.toString().equals("*")
&& !names.contains(qualid.name)) {
continue;
}
}
}
defs.add(def);
}
return m.TopLevel(tree.packageAnnotations, tree.pid, defs.toList());
}
@Override
public void visitImport(JCImport tree) { } // ignore names found in imports
@Override
public void visitIdent(JCIdent tree) {
names.add(tree.name);
}
@Override
public void visitSelect(JCFieldAccess tree) {
super.visitSelect(tree);
names.add(tree.name);
}
}
//---------- Ant Invocation ------------------------------------------------
public static class Ant extends MatchingTask {

View File

@ -38,7 +38,7 @@ mylib="`dirname $mydir`"/lib
# dependent jar files for additional dependencies.
if [ "$LANGTOOLS_USE_BOOTCLASSPATH" != "no" ]; then
cp=`unzip -c $mylib/#PROGRAM#.jar META-INF/MANIFEST.MF |
cp=`unzip -c "$mylib/#PROGRAM#.jar" META-INF/MANIFEST.MF |
grep "Class-Path:" |
sed -e 's|Class-Path: *||' -e 's|\([a-z]*\.jar\) *|'"$mylib"'/\1:|g'`
bcp="$mylib/#PROGRAM#.jar":$cp

View File

@ -309,7 +309,7 @@ abstract class PathFileObject implements JavaFileObject {
}
protected static String toBinaryName(String relativePath, String sep) {
return removeExtension(relativePath).replaceAll(sep, ".");
return removeExtension(relativePath).replace(sep, ".");
}
protected static String removeExtension(String fileName) {

View File

@ -2613,12 +2613,12 @@ public class JavacParser implements Parser {
body = toP(F.at(identPos).AnonymousClassDef(mods1, defs));
}
if (args.isEmpty() && body == null)
createPos = Position.NOPOS;
JCIdent ident = F.at(Position.NOPOS).Ident(enumName);
createPos = identPos;
JCIdent ident = F.at(identPos).Ident(enumName);
JCNewClass create = F.at(createPos).NewClass(null, typeArgs, ident, args, body);
if (createPos != Position.NOPOS)
if (createPos != identPos)
storeEnd(create, S.prevEndPos());
ident = F.at(Position.NOPOS).Ident(enumName);
ident = F.at(identPos).Ident(enumName);
JCTree result = toP(F.at(pos).VarDef(mods, name, ident, create));
attach(result, dc);
return result;

View File

@ -51,12 +51,10 @@ public class Keywords {
return instance;
}
private final Log log;
private final Names names;
protected Keywords(Context context) {
context.put(keywordsKey, this);
log = Log.instance(context);
names = Names.instance(context);
for (Token t : Token.values()) {

View File

@ -704,7 +704,7 @@ compiler.warn.override.bridge=\
{0}; overridden method is a bridge method
compiler.warn.pkg-info.already.seen=\
[package-info] a package-info.java file has already been seen for package {0}
a package-info.java file has already been seen for package {0}
compiler.warn.path.element.not.found=\
[path] bad path element "{0}": no such file or directory
compiler.warn.possible.fall-through.into.case=\

View File

@ -468,6 +468,10 @@ public class Pretty extends JCTree.Visitor {
print(" throws ");
printExprs(tree.thrown);
}
if (tree.defaultValue != null) {
print(" default ");
printExpr(tree.defaultValue);
}
if (tree.body != null) {
print(" ");
printStat(tree.body);
@ -1148,20 +1152,7 @@ public class Pretty extends JCTree.Visitor {
// Prints the inner element type of a nested array
private void printBaseElementType(JCTree tree) throws IOException {
switch (tree.getTag()) {
case JCTree.TYPEARRAY:
printBaseElementType(((JCArrayTypeTree)tree).elemtype);
return;
case JCTree.WILDCARD:
printBaseElementType(((JCWildcard)tree).inner);
return;
case JCTree.ANNOTATED_TYPE:
printBaseElementType(((JCAnnotatedType)tree).underlyingType);
return;
default:
printExpr(tree);
return;
}
printExpr(TreeInfo.innermostType(tree));
}
// prints the brackets of a nested array in reverse order

View File

@ -891,4 +891,17 @@ public class TreeInfo {
throw new AssertionError("Unexpected type tree: " + tree);
}
}
public static JCTree innermostType(JCTree type) {
switch (type.getTag()) {
case JCTree.TYPEARRAY:
return innermostType(((JCArrayTypeTree)type).elemtype);
case JCTree.WILDCARD:
return innermostType(((JCWildcard)type).inner);
case JCTree.ANNOTATED_TYPE:
return innermostType(((JCAnnotatedType)type).underlyingType);
default:
return type;
}
}
}

View File

@ -49,7 +49,7 @@ public interface LayoutCharacters {
/** Tabulator character.
*/
final static byte TAB = 0x8;
final static byte TAB = 0x9;
/** Line feed character.
*/

View File

@ -145,7 +145,10 @@ public class Log extends AbstractLog {
private int getIntOption(Options options, String optionName, int defaultValue) {
String s = options.get(optionName);
try {
if (s != null) return Integer.parseInt(s);
if (s != null) {
int n = Integer.parseInt(s);
return (n <= 0 ? Integer.MAX_VALUE : n);
}
} catch (NumberFormatException e) {
// silently ignore ill-formed numbers
}

View File

@ -0,0 +1,76 @@
/*
* Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6326754
* @summary Compiler will fail to handle -Xmaxerrs with -ve numbers
*
* @compile/fail/ref=T6326754.out -XDrawDiagnostics -Xmaxerrs -1 T6326754.java
* @compile/fail/ref=T6326754.out -XDrawDiagnostics -Xmaxerrs 0 T6326754.java
* @compile/fail/ref=T6326754.out -XDrawDiagnostics -Xmaxerrs 10 T6326754.java
* @compile/fail/ref=T6326754.out -XDrawDiagnostics T6326754.java
*/
class TestConstructor<T,K>{
T t;
K k;
public TestConstructor(T t,K k){
this.t =t;
}
public TestConstructor(K k){
this.k = k;
this.t = null;
}
public TestConstructor(T t){
this.t=t;
this.k=null;
}
public void setT(T t){
this.t=t;
this.k=null;
}
public void setT(K k){
this.k = k;
this.t = null;
}
public void setT(T t,K k){
this.t = t;
this.k = k;
}
}
class TestC<T>{
T t;
public <T>void setT(T t){
this.t = t;
}
}
public class T6326754{
public static void main(String... arg){
TestC tC =new TestC();
tC.setT();
TestConstructor tc = new TestConstructor("saaa");
tc.setT("sasa");
TestC<Integer> tC1 = new TestC();
tC1.setT(545);
}
}

View File

@ -0,0 +1,7 @@
T6326754.java:44:12: compiler.err.name.clash.same.erasure: TestConstructor(T), TestConstructor(K)
T6326754.java:52:17: compiler.err.name.clash.same.erasure: setT(K), setT(T)
T6326754.java:64:18: compiler.err.prob.found.req: (compiler.misc.incompatible.types), T, T
T6326754.java:70:11: compiler.err.cant.apply.symbol: kindname.method, setT, java.lang.Object, compiler.misc.no.args, kindname.class, TestC<T>, null
- compiler.note.unchecked.filename: T6326754.java
- compiler.note.unchecked.recompile
4 errors

View File

@ -0,0 +1,81 @@
/*
* Copyright 2006-2010 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6472751
* @summary SourcePositions.getStartPos returns incorrect value for enum constants
* @author Peter Ahe
*/
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.Tree;
import com.sun.source.tree.Tree.Kind;
import com.sun.source.util.JavacTask;
import com.sun.source.util.SourcePositions;
import com.sun.source.util.TreeScanner;
import com.sun.source.util.Trees;
import com.sun.tools.javac.util.List;
import java.io.IOException;
import java.net.URI;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
import javax.tools.ToolProvider;
public class T6472751 {
static class MyFileObject extends SimpleJavaFileObject {
public MyFileObject() {
super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
}
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return "public enum Test { ABC, DEF; }";
}
}
static Trees trees;
static SourcePositions positions;
public static void main(String[] args) throws IOException {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
JavacTask task = (JavacTask) compiler.getTask(null, null, null, null, null, List.of(new MyFileObject()));
trees = Trees.instance(task);
positions = trees.getSourcePositions();
Iterable<? extends CompilationUnitTree> asts = task.parse();
for (CompilationUnitTree ast : asts) {
new MyVisitor().scan(ast, null);
}
}
static class MyVisitor extends TreeScanner<Void,Void> {
@Override
public Void scan(Tree node, Void ignored) {
if (node == null)
return null;
Kind k = node.getKind();
long pos = positions.getStartPosition(null,node);
System.out.format("%s: %s%n", k, pos);
if (k != Kind.MODIFIERS && pos < 0)
throw new Error("unexpected position found");
return super.scan(node, ignored);
}
}
}

View File

@ -0,0 +1,11 @@
/*
* @test /nodynamiccopyright/
* @bug 6567414
* @summary javac compiler reports no source file or line on enum constant declaration error
* @compile/fail/ref=T6567414.out -XDrawDiagnostics T6567414.java
*/
enum Test {
FOO;
Test() throws Exception {}
}

View File

@ -0,0 +1,2 @@
T6567414.java:8:3: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
1 error

View File

@ -0,0 +1,81 @@
/*
* Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6665791
* @summary com.sun.source.tree.MethodTree.toString() does not output default values
*/
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import com.sun.source.tree.ClassTree;
import com.sun.source.util.JavacTask;
import com.sun.source.util.TreeScanner;
import java.io.FileWriter;
public class T6665791 {
static String test = "public @interface Annotation { boolean booleanProperty() default false; }";
static File test_java = new File("Test.java");
public static void main(String[] args) throws Exception {
write(test_java, test);
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager manager =
compiler.getStandardFileManager(null, null, null);
Iterable<? extends JavaFileObject> units = manager.getJavaFileObjects(test_java);
final StringWriter sw = new StringWriter();
JavacTask task = (JavacTask) compiler.getTask(sw, manager, null, null,
null, units);
new TreeScanner<Boolean, Void>() {
@Override
public Boolean visitClass(ClassTree arg0, Void arg1) {
sw.write(arg0.toString());
return super.visitClass(arg0, arg1);
}
}.scan(task.parse(), null);
System.out.println("output:");
System.out.println(sw.toString());
String found = sw.toString().replaceAll("\\s+", " ").trim();
String expect = test.replaceAll("\\s+", " ").trim();
if (!expect.equals(found)) {
System.out.println("expect: " + expect);
System.out.println("found: " + found);
throw new Exception("unexpected output");
}
}
static void write(File file, String body) throws IOException {
FileWriter out = new FileWriter(file);
out.write(body);
out.close();
}
}

View File

@ -0,0 +1,95 @@
/*
* Copyright 2010 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
/*
* @test
* @bug 6855236
* @summary Compiler Tree API TreePath class generates NullPointerException from Iterator
* @compile T6855236.java
* @compile -processor T6855236 -proc:only T6855236.java
*/
import java.util.*;
import javax.annotation.processing.*;
import javax.lang.model.*;
import javax.lang.model.element.*;
import com.sun.source.tree.*;
import com.sun.source.util.*;
@SupportedSourceVersion(SourceVersion.RELEASE_6)
@SupportedAnnotationTypes("*")
public class T6855236 extends AbstractProcessor {
private Trees trees;
@Override
public void init(ProcessingEnvironment pe) {
super.init(pe);
trees = Trees.instance(pe);
}
@Override
public boolean process(Set<? extends TypeElement> arg0, RoundEnvironment roundEnvironment) {
// Scanner class to scan through various component elements
CodeVisitor visitor = new CodeVisitor();
for (Element e : roundEnvironment.getRootElements()) {
TreePath tp = trees.getPath(e);
visitor.scan(tp, trees);
}
return true;
}
class CodeVisitor extends TreePathScanner<Object, Trees> {
@Override
public Object visitMethodInvocation(MethodInvocationTree node, Trees p) {
System.out.print("current path: ");
for (Tree t : getCurrentPath()) {
System.out.print('/');
System.out.print(t);
}
System.out.println();
System.out.println("parent path: " + getCurrentPath().getParentPath());
System.out.println("method select: " + node.getMethodSelect().toString());
for (ExpressionTree arg : node.getArguments()) {
System.out.println("argument: " + arg.toString());
}
return super.visitMethodInvocation(node, p);
}
@Override
public Object visitExpressionStatement(ExpressionStatementTree node, Trees p) {
ExpressionTree t = node.getExpression();
System.out.println("expression statement: " + t.toString());
return super.visitExpressionStatement(node, p);
}
}
}

View File

@ -23,7 +23,9 @@
/**
* @test
* @compile HelloPathWorld.java
* @bug 6906175 6915476 6915497
* @summary Path-based JavaFileManager
* @compile -g HelloPathWorld.java
* @run main CompileTest
*/
@ -92,7 +94,8 @@ public class CompileTest {
options.addAll(Arrays.asList(opts));
options.addAll(Arrays.asList(
"-verbose", "-XDverboseCompilePolicy",
"-d", classes.toString()
"-d", classes.toString(),
"-g"
));
Iterable<? extends JavaFileObject> compilationUnits =
fm.getJavaFileObjects(testSrcDir.resolve(className + ".java"));
@ -109,6 +112,8 @@ public class CompileTest {
File expect = new File("classes." + count + "/" + className + ".class");
if (!expect.exists())
throw new Exception("expected file not found: " + expect);
// Note that we explicitly specify -g for compiling both the actual class and the expected class.
// This isolates the expected class from javac options that might be given to jtreg.
long expectedSize = new File(testClassesDir.toString(), className + ".class").length();
long actualSize = expect.length();
if (expectedSize != actualSize)