# HG changeset patch # User lana # Date 1283540421 25200 # Node ID 68e765b1e9ed38ead6dd93de3728bc7896b480ec # Parent 3fba23db9619dd035a873c52a73ff71f2c1a03fa# Parent d54300fb35547127cc530601e293ed9c292293e2 Merge diff -r 3fba23db9619 -r 68e765b1e9ed src/share/classes/com/sun/tools/javac/comp/Attr.java --- a/src/share/classes/com/sun/tools/javac/comp/Attr.java Thu Sep 02 22:11:39 2010 -0700 +++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java Fri Sep 03 12:00:21 2010 -0700 @@ -328,6 +328,12 @@ attribExpr(expr, env); } catch (BreakAttr b) { return b.env; + } catch (AssertionError ae) { + if (ae.getCause() instanceof BreakAttr) { + return ((BreakAttr)(ae.getCause())).env; + } else { + throw ae; + } } finally { breakTree = null; log.useSource(prev); @@ -342,6 +348,12 @@ attribStat(stmt, env); } catch (BreakAttr b) { return b.env; + } catch (AssertionError ae) { + if (ae.getCause() instanceof BreakAttr) { + return ((BreakAttr)(ae.getCause())).env; + } else { + throw ae; + } } finally { breakTree = null; log.useSource(prev); diff -r 3fba23db9619 -r 68e765b1e9ed src/share/classes/com/sun/tools/javac/tree/TreeInfo.java --- a/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Thu Sep 02 22:11:39 2010 -0700 +++ b/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Fri Sep 03 12:00:21 2010 -0700 @@ -501,6 +501,10 @@ if (that.sym == sym) result = that; else super.visitVarDef(that); } + public void visitTypeParameter(JCTypeParameter that) { + if (that.type.tsym == sym) result = that; + else super.visitTypeParameter(that); + } } DeclScanner s = new DeclScanner(); tree.accept(s); diff -r 3fba23db9619 -r 68e765b1e9ed test/tools/javac/T6458823/MyProcessor.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/T6458823/MyProcessor.java Fri Sep 03 12:00:21 2010 -0700 @@ -0,0 +1,55 @@ + /* + * Copyright (c) 2010, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.util.Set; +import javax.annotation.processing.*; +import javax.lang.model.element.*; +import javax.lang.model.util.ElementFilter; +import javax.lang.model.SourceVersion; +import static javax.tools.Diagnostic.Kind.*; + +@SupportedAnnotationTypes("*") +public class MyProcessor extends AbstractProcessor { + private Messager messager; + public void init(ProcessingEnvironment processingEnv) { + this.messager = processingEnv.getMessager(); + } + + public boolean process(Set tes, RoundEnvironment renv) { + if (!renv.processingOver()) { + for(TypeElement e : ElementFilter.typesIn(renv.getRootElements())) { + for (TypeParameterElement tp : e.getTypeParameters()) { + if (tp.getSimpleName().toString().length() > 1) { + messager.printMessage(WARNING, + "Type param names should be of length 1", tp); + } + } + } + } + return true; + } + + public SourceVersion getSupportedSourceVersion() { + return SourceVersion.latest(); + } +} diff -r 3fba23db9619 -r 68e765b1e9ed test/tools/javac/T6458823/T6458823.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/T6458823/T6458823.java Fri Sep 03 12:00:21 2010 -0700 @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6458823 + * @summary Messager messages on TypeParamterElements to not include position information. + * + * @compile MyProcessor.java T6458823.java + * @run main T6458823 + */ + +import java.io.File; +import java.io.IOException; +import java.io.Writer; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.tools.Diagnostic; +import javax.tools.DiagnosticCollector; +import javax.tools.JavaCompiler; +import javax.tools.JavaCompiler.CompilationTask; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.ToolProvider; + +public class T6458823 { + public static void main(String[] args) throws Exception { + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + if (compiler == null) { + throw new RuntimeException("can't get javax.tools.JavaCompiler!"); + } + DiagnosticCollector diagColl = + new DiagnosticCollector(); + StandardJavaFileManager fm = compiler.getStandardFileManager(null, null, null); + List options = new ArrayList(); + options.add("-processor"); + options.add("MyProcessor"); + options.add("-proc:only"); + List files = new ArrayList(); + files.add(new File(T6458823.class.getResource("TestClass.java").toURI())); + final CompilationTask task = compiler.getTask(null, fm, diagColl, + options, null, fm.getJavaFileObjectsFromFiles(files)); + task.call(); + int diagCount = 0; + for (Diagnostic diag : diagColl.getDiagnostics()) { + if (diag.getKind() != Diagnostic.Kind.WARNING) { + throw new AssertionError("Only warnings expected"); + } + System.out.println(diag); + if (diag.getPosition() == Diagnostic.NOPOS) { + throw new AssertionError("No position info in message"); + } + if (diag.getSource() == null) { + throw new AssertionError("No source info in message"); + } + diagCount++; + } + if (diagCount != 2) { + throw new AssertionError("unexpected number of warnings: " + + diagCount + ", expected: 2"); + } + } +} diff -r 3fba23db9619 -r 68e765b1e9ed test/tools/javac/T6458823/TestClass.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/T6458823/TestClass.java Fri Sep 03 12:00:21 2010 -0700 @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +class TestClass { +} diff -r 3fba23db9619 -r 68e765b1e9ed test/tools/javac/T6956462/T6956462.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/T6956462/T6956462.java Fri Sep 03 12:00:21 2010 -0700 @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* + * @test + * @bug 6956462 + * @summary AssertionError exception throws in the Compiler Tree API in JDK 7. + * + * @build TestClass T6956462 + * @run main T6956462 + */ + +import java.io.*; +import java.net.URISyntaxException; +import java.util.*; +import javax.tools.*; +import javax.tools.JavaCompiler.CompilationTask; +import com.sun.source.tree.*; +import com.sun.source.util.*; + +public class T6956462 { + public static void main(String[] args) throws Exception { + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + if (compiler == null) { + throw new RuntimeException("can't get javax.tools.JavaCompiler!"); + } + StandardJavaFileManager fm = compiler.getStandardFileManager(null, null, null); + List files = new ArrayList(); + files.add(new File(T6956462.class.getResource("TestClass.java").toURI())); + final CompilationTask task = compiler.getTask(null, fm, null, + null, null, fm.getJavaFileObjectsFromFiles(files)); + JavacTask javacTask = (JavacTask) task; + for (CompilationUnitTree cu : javacTask.parse()) { + cu.accept(new MyVisitor(javacTask), null); + } + } + + private static class MyVisitor extends SimpleTreeVisitor { + private final Trees trees; + private CompilationUnitTree file; + + private MyVisitor(JavacTask javac) { + this.trees = Trees.instance(javac); + } + + @Override + public Tree visitCompilationUnit(CompilationUnitTree file, Void v) { + this.file = file; + for (Tree typeDecl : file.getTypeDecls()) { + typeDecl.accept(this, v); + } + return null; + } + + @Override + public Tree visitImport(ImportTree imp, Void v) { + return null; + } + + @Override + public Tree visitMethodInvocation(MethodInvocationTree invoke, Void v) { + invoke.getMethodSelect().accept(this, v); + return null; + } + + @Override + public Tree visitBlock(BlockTree block, Void v) { + for (StatementTree stat : block.getStatements()) { + stat.accept(this, v); + } + return null; + } + + @Override + public Tree visitClass(ClassTree clazz, Void v) { + for (Tree member : clazz.getMembers()) { + member.accept(this, v); + } + return null; + } + + @Override + public Tree visitIdentifier(IdentifierTree ident, Void v) { + trees.getScope(trees.getPath(file, ident)); + return null; + } + + @Override + public Tree visitMethod(MethodTree method, Void v) { + method.getBody().accept(this, v); + return null; + } + + @Override + public Tree visitMemberSelect(MemberSelectTree select, Void v) { + select.getExpression().accept(this, v); + return null; + } + + @Override + public Tree visitVariable(VariableTree var, Void v) { + var.getInitializer().accept(this, v); + return null; + } + } +} diff -r 3fba23db9619 -r 68e765b1e9ed test/tools/javac/T6956462/TestClass.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/tools/javac/T6956462/TestClass.java Fri Sep 03 12:00:21 2010 -0700 @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2010, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.io.PrintStream; + +abstract class TestClass { + private void test() { + final PrintStream out = System.out; + } +}