# HG changeset patch # User lana # Date 1436485096 25200 # Node ID 53fd6459d92c29284257ba786da6307c5ce1bfe1 # Parent f2996b9a96106e4391d96cbff99fe3aa180b3f03# Parent cf4e9520320d0c28504f6f415e862e3150f540ff Merge diff -r f2996b9a9610 -r 53fd6459d92c langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Thu Jul 09 13:49:40 2015 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Thu Jul 09 16:38:16 2015 -0700 @@ -4140,12 +4140,7 @@ public void visitAnnotatedType(JCAnnotatedType tree) { attribAnnotationTypes(tree.annotations, env); - JCExpression underlyingTypeTree = tree.getUnderlyingType(); - Type underlyingType = attribTree(underlyingTypeTree, env, - new ResultInfo(KindSelector.TYP_PCK, Type.noType)); - if (!chk.checkAnnotableType(underlyingType, tree.annotations, underlyingTypeTree.pos())) { - underlyingType = underlyingTypeTree.type = syms.errType; - } + Type underlyingType = attribType(tree.underlyingType, env); Type annotatedType = underlyingType.annotatedType(Annotations.TO_BE_SET); if (!env.info.isNewClass) @@ -4636,7 +4631,16 @@ } } else if (enclTr.hasTag(ANNOTATED_TYPE)) { JCAnnotatedType at = (JCTree.JCAnnotatedType) enclTr; - if (!chk.checkAnnotableType(enclTy, at.getAnnotations(), at.underlyingType.pos())) { + if (enclTy == null || enclTy.hasTag(NONE)) { + if (at.getAnnotations().size() == 1) { + log.error(at.underlyingType.pos(), "cant.type.annotate.scoping.1", at.getAnnotations().head.attribute); + } else { + ListBuffer comps = new ListBuffer<>(); + for (JCAnnotation an : at.getAnnotations()) { + comps.add(an.attribute); + } + log.error(at.underlyingType.pos(), "cant.type.annotate.scoping", comps.toList()); + } repeat = false; } enclTr = at.underlyingType; diff -r f2996b9a9610 -r 53fd6459d92c langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Jul 09 13:49:40 2015 -0700 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java Thu Jul 09 16:38:16 2015 -0700 @@ -63,8 +63,6 @@ import static com.sun.tools.javac.code.TypeTag.*; import static com.sun.tools.javac.code.TypeTag.WILDCARD; -import static com.sun.tools.javac.resources.CompilerProperties.Errors.CantTypeAnnotateScoping; -import static com.sun.tools.javac.resources.CompilerProperties.Errors.CantTypeAnnotateScoping1; import static com.sun.tools.javac.tree.JCTree.Tag.*; /** Type checking helper class for the attribution phase. @@ -2694,29 +2692,6 @@ * Check annotations **************************************************************************/ - /** Verify that a component of a qualified type name being type annotated - * can indeed be legally be annotated. For example, package names and type - * names used to access static members cannot be annotated. - * - * @param typeComponent the component of the qualified name being annotated - * @param annotations the annotations - * @param pos diagnostic position - * @return true if all is swell, false otherwise. - */ - boolean checkAnnotableType(Type typeComponent, List annotations, DiagnosticPosition pos) { - if (typeComponent == null || typeComponent.hasTag(PACKAGE) || typeComponent.hasTag(NONE)) { - ListBuffer lb = new ListBuffer<>(); - for (JCAnnotation annotation : annotations) { - lb.append(annotation.annotationType.type.tsym); - } - List symbols = lb.toList(); - log.error(pos, - symbols.size() > 1 ? CantTypeAnnotateScoping(symbols) - : CantTypeAnnotateScoping1(symbols.get(0))); - return false; - } - return true; - } /** * Recursively validate annotations values */ diff -r f2996b9a9610 -r 53fd6459d92c langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotatePackages.java --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotatePackages.java Thu Jul 09 13:49:40 2015 -0700 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotatePackages.java Thu Jul 09 16:38:16 2015 -0700 @@ -1,12 +1,12 @@ /* * @test /nodynamiccopyright/ - * @bug 8026564 8074346 + * @bug 8026564 * @summary The parts of a fully-qualified type can't be annotated. * @author Werner Dietl + * @ignore 8057679 clarify error messages trying to annotate scoping * @compile/fail/ref=CantAnnotatePackages.out -XDrawDiagnostics CantAnnotatePackages.java */ - import java.lang.annotation.*; import java.util.List; @@ -21,8 +21,6 @@ java. @TA lang.Object of3; List of4; - List<@CantAnnotatePackages_TB java.lang.Object> of5; // test that we do reasonable things for missing types. - // TODO: also note the order of error messages. } diff -r f2996b9a9610 -r 53fd6459d92c langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotatePackages.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotatePackages.out Thu Jul 09 13:49:40 2015 -0700 +++ b/langtools/test/tools/javac/annotations/typeAnnotations/failures/CantAnnotatePackages.out Thu Jul 09 16:38:16 2015 -0700 @@ -1,7 +1,5 @@ -CantAnnotatePackages.java:20:14: compiler.err.cant.type.annotate.scoping.1: TA -CantAnnotatePackages.java:21:9: compiler.err.cant.type.annotate.scoping.1: TA -CantAnnotatePackages.java:22:14: compiler.err.cant.type.annotate.scoping.1: TA -CantAnnotatePackages.java:24:11: compiler.err.cant.resolve.location: kindname.class, CantAnnotatePackages_TB, , , (compiler.misc.location: kindname.class, CantAnnotatePackages, null) -CantAnnotatePackages.java:24:35: compiler.err.cant.type.annotate.scoping.1: CantAnnotatePackages_TB -CantAnnotatePackages.java:15:18: compiler.err.cant.type.annotate.scoping.1: @TA -6 errors +CantAnnotatePackages.java:14:13: compiler.err.cant.type.annotate.scoping.1: @TA +CantAnnotatePackages.java:19:18: compiler.err.cant.type.annotate.scoping.1: @TA +CantAnnotatePackages.java:20:19: compiler.err.cant.type.annotate.scoping.1: @TA +CantAnnotatePackages.java:21:24: compiler.err.cant.type.annotate.scoping.1: @TA +4 errors diff -r f2996b9a9610 -r 53fd6459d92c langtools/test/tools/javac/annotations/typeAnnotations/failures/T8074346.java --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/T8074346.java Thu Jul 09 13:49:40 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -/* - * @test /nodynamiccopyright/ - * @bug 8074346 - * @author sadayapalam - * @summary Test that type annotation on a qualified type doesn't cause spurious 'cannot find symbol' errors - * @compile/fail/ref=T8074346.out -XDrawDiagnostics T8074346.java -*/ - -abstract class T8074346 implements - @T8074346_TA @T8074346_TB java.util.Map<@T8074346_TA java.lang.String, java.lang.@T8074346_TA String>, - java.util.@T8074346_TA List { -} - -@java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) -@interface T8074346_TA { } - -@java.lang.annotation.Target(java.lang.annotation.ElementType.TYPE_USE) -@interface T8074346_TB { } \ No newline at end of file diff -r f2996b9a9610 -r 53fd6459d92c langtools/test/tools/javac/annotations/typeAnnotations/failures/T8074346.out --- a/langtools/test/tools/javac/annotations/typeAnnotations/failures/T8074346.out Thu Jul 09 13:49:40 2015 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -T8074346.java:10:35: compiler.err.cant.type.annotate.scoping: T8074346_TA,T8074346_TB -T8074346.java:10:62: compiler.err.cant.type.annotate.scoping.1: T8074346_TA -2 errors \ No newline at end of file diff -r f2996b9a9610 -r 53fd6459d92c langtools/test/tools/javac/generics/inference/8078024/T8078024.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/inference/8078024/T8078024.java Thu Jul 09 16:38:16 2015 -0700 @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2015, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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 8078024 + * @summary before the patch for JDK-8078024 this code wasn't accepted by the compiler. After the + * mentioned patch the second method is selected as applicable and the code is accepted. + * @compile T8078024.java + */ + +import java.util.Arrays; +import java.util.List; + +class T8078024 { + public static List> cartesianProduct(List... lists) { + return cartesianProduct(Arrays.asList(lists)); + } + + public static List> cartesianProduct(List> lists) { + return null; + } +}