Merge
This commit is contained in:
commit
8fb9c68bfb
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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" +
|
||||
|
@ -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.");
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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()) {
|
||||
|
@ -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=\
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -49,7 +49,7 @@ public interface LayoutCharacters {
|
||||
|
||||
/** Tabulator character.
|
||||
*/
|
||||
final static byte TAB = 0x8;
|
||||
final static byte TAB = 0x9;
|
||||
|
||||
/** Line feed character.
|
||||
*/
|
||||
|
@ -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
|
||||
}
|
||||
|
76
langtools/test/tools/javac/T6326754.java
Normal file
76
langtools/test/tools/javac/T6326754.java
Normal 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);
|
||||
}
|
||||
}
|
7
langtools/test/tools/javac/T6326754.out
Normal file
7
langtools/test/tools/javac/T6326754.out
Normal 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
|
81
langtools/test/tools/javac/T6472751.java
Normal file
81
langtools/test/tools/javac/T6472751.java
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
11
langtools/test/tools/javac/T6567414.java
Normal file
11
langtools/test/tools/javac/T6567414.java
Normal 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 {}
|
||||
}
|
||||
|
2
langtools/test/tools/javac/T6567414.out
Normal file
2
langtools/test/tools/javac/T6567414.out
Normal file
@ -0,0 +1,2 @@
|
||||
T6567414.java:8:3: compiler.err.unreported.exception.need.to.catch.or.throw: java.lang.Exception
|
||||
1 error
|
81
langtools/test/tools/javac/T6665791.java
Normal file
81
langtools/test/tools/javac/T6665791.java
Normal 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();
|
||||
}
|
||||
}
|
95
langtools/test/tools/javac/T6855236.java
Normal file
95
langtools/test/tools/javac/T6855236.java
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user