mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 02:54:35 +02:00
8130745: Revert fix pushed for JDK-8074346
Reviewed-by: jlahoda
This commit is contained in:
parent
52cdae26ef
commit
7b64cba44c
6 changed files with 18 additions and 64 deletions
|
@ -4140,12 +4140,7 @@ public class Attr extends JCTree.Visitor {
|
||||||
|
|
||||||
public void visitAnnotatedType(JCAnnotatedType tree) {
|
public void visitAnnotatedType(JCAnnotatedType tree) {
|
||||||
attribAnnotationTypes(tree.annotations, env);
|
attribAnnotationTypes(tree.annotations, env);
|
||||||
JCExpression underlyingTypeTree = tree.getUnderlyingType();
|
Type underlyingType = attribType(tree.underlyingType, env);
|
||||||
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 annotatedType = underlyingType.annotatedType(Annotations.TO_BE_SET);
|
Type annotatedType = underlyingType.annotatedType(Annotations.TO_BE_SET);
|
||||||
|
|
||||||
if (!env.info.isNewClass)
|
if (!env.info.isNewClass)
|
||||||
|
@ -4636,7 +4631,16 @@ public class Attr extends JCTree.Visitor {
|
||||||
}
|
}
|
||||||
} else if (enclTr.hasTag(ANNOTATED_TYPE)) {
|
} else if (enclTr.hasTag(ANNOTATED_TYPE)) {
|
||||||
JCAnnotatedType at = (JCTree.JCAnnotatedType) enclTr;
|
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<Attribute.Compound> 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;
|
repeat = false;
|
||||||
}
|
}
|
||||||
enclTr = at.underlyingType;
|
enclTr = at.underlyingType;
|
||||||
|
|
|
@ -63,8 +63,6 @@ import static com.sun.tools.javac.code.Scope.LookupKind.NON_RECURSIVE;
|
||||||
import static com.sun.tools.javac.code.TypeTag.*;
|
import static com.sun.tools.javac.code.TypeTag.*;
|
||||||
import static com.sun.tools.javac.code.TypeTag.WILDCARD;
|
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.*;
|
import static com.sun.tools.javac.tree.JCTree.Tag.*;
|
||||||
|
|
||||||
/** Type checking helper class for the attribution phase.
|
/** Type checking helper class for the attribution phase.
|
||||||
|
@ -2694,29 +2692,6 @@ public class Check {
|
||||||
* Check annotations
|
* 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<JCAnnotation> annotations, DiagnosticPosition pos) {
|
|
||||||
if (typeComponent == null || typeComponent.hasTag(PACKAGE) || typeComponent.hasTag(NONE)) {
|
|
||||||
ListBuffer<Symbol> lb = new ListBuffer<>();
|
|
||||||
for (JCAnnotation annotation : annotations) {
|
|
||||||
lb.append(annotation.annotationType.type.tsym);
|
|
||||||
}
|
|
||||||
List<Symbol> symbols = lb.toList();
|
|
||||||
log.error(pos,
|
|
||||||
symbols.size() > 1 ? CantTypeAnnotateScoping(symbols)
|
|
||||||
: CantTypeAnnotateScoping1(symbols.get(0)));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Recursively validate annotations values
|
* Recursively validate annotations values
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
/*
|
/*
|
||||||
* @test /nodynamiccopyright/
|
* @test /nodynamiccopyright/
|
||||||
* @bug 8026564 8074346
|
* @bug 8026564
|
||||||
* @summary The parts of a fully-qualified type can't be annotated.
|
* @summary The parts of a fully-qualified type can't be annotated.
|
||||||
* @author Werner Dietl
|
* @author Werner Dietl
|
||||||
|
* @ignore 8057679 clarify error messages trying to annotate scoping
|
||||||
* @compile/fail/ref=CantAnnotatePackages.out -XDrawDiagnostics CantAnnotatePackages.java
|
* @compile/fail/ref=CantAnnotatePackages.out -XDrawDiagnostics CantAnnotatePackages.java
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
import java.lang.annotation.*;
|
import java.lang.annotation.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -21,8 +21,6 @@ class CantAnnotatePackages {
|
||||||
java. @TA lang.Object of3;
|
java. @TA lang.Object of3;
|
||||||
List<java. @TA lang.Object> of4;
|
List<java. @TA lang.Object> 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.
|
// TODO: also note the order of error messages.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
CantAnnotatePackages.java:20:14: compiler.err.cant.type.annotate.scoping.1: TA
|
CantAnnotatePackages.java:14:13: compiler.err.cant.type.annotate.scoping.1: @TA
|
||||||
CantAnnotatePackages.java:21:9: compiler.err.cant.type.annotate.scoping.1: TA
|
CantAnnotatePackages.java:19:18: compiler.err.cant.type.annotate.scoping.1: @TA
|
||||||
CantAnnotatePackages.java:22:14: compiler.err.cant.type.annotate.scoping.1: TA
|
CantAnnotatePackages.java:20:19: 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:21:24: compiler.err.cant.type.annotate.scoping.1: @TA
|
||||||
CantAnnotatePackages.java:24:35: compiler.err.cant.type.annotate.scoping.1: CantAnnotatePackages_TB
|
4 errors
|
||||||
CantAnnotatePackages.java:15:18: compiler.err.cant.type.annotate.scoping.1: @TA
|
|
||||||
6 errors
|
|
||||||
|
|
|
@ -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 { }
|
|
|
@ -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
|
|
Loading…
Add table
Add a link
Reference in a new issue