提交 3784b127 编写于 作者: J jfranck

8038080: annotation processors don't visit declaration parameter annotations

Reviewed-by: darcy
Contributed-by: cushon@google.com, joel.franck@oracle.com
上级 ba90eb5c
...@@ -762,14 +762,14 @@ public class JavacProcessingEnvironment implements ProcessingEnvironment, Closea ...@@ -762,14 +762,14 @@ public class JavacProcessingEnvironment implements ProcessingEnvironment, Closea
public Set<TypeElement> visitType(TypeElement e, Set<TypeElement> p) { public Set<TypeElement> visitType(TypeElement e, Set<TypeElement> p) {
// Type parameters are not considered to be enclosed by a type // Type parameters are not considered to be enclosed by a type
scan(e.getTypeParameters(), p); scan(e.getTypeParameters(), p);
return scan(e.getEnclosedElements(), p); return super.visitType(e, p);
} }
@Override @Override
public Set<TypeElement> visitExecutable(ExecutableElement e, Set<TypeElement> p) { public Set<TypeElement> visitExecutable(ExecutableElement e, Set<TypeElement> p) {
// Type parameters are not considered to be enclosed by an executable // Type parameters are not considered to be enclosed by an executable
scan(e.getTypeParameters(), p); scan(e.getTypeParameters(), p);
return scan(e.getEnclosedElements(), p); return super.visitExecutable(e, p);
} }
void addAnnotations(Element e, Set<TypeElement> p) { void addAnnotations(Element e, Set<TypeElement> p) {
......
...@@ -137,14 +137,14 @@ public class JavacRoundEnvironment implements RoundEnvironment { ...@@ -137,14 +137,14 @@ public class JavacRoundEnvironment implements RoundEnvironment {
public Set<Element> visitType(TypeElement e, TypeElement p) { public Set<Element> visitType(TypeElement e, TypeElement p) {
// Type parameters are not considered to be enclosed by a type // Type parameters are not considered to be enclosed by a type
scan(e.getTypeParameters(), p); scan(e.getTypeParameters(), p);
return scan(e.getEnclosedElements(), p); return super.visitType(e, p);
} }
@Override @Override
public Set<Element> visitExecutable(ExecutableElement e, TypeElement p) { public Set<Element> visitExecutable(ExecutableElement e, TypeElement p) {
// Type parameters are not considered to be enclosed by an executable // Type parameters are not considered to be enclosed by an executable
scan(e.getTypeParameters(), p); scan(e.getTypeParameters(), p);
return scan(e.getEnclosedElements(), p); return super.visitExecutable(e, p);
} }
@Override @Override
......
/*
* Copyright (c) 2014, 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 8038080
* @summary make sure that all declaration annotations are discovered
* by the processing environment
* @library /tools/javac/lib
* @build JavacTestingAbstractProcessor ProcessingEnvAnnoDiscovery
* @compile/process -processor ProcessingEnvAnnoDiscovery ProcessingEnvAnnoDiscovery.java
*/
import java.lang.annotation.*;
import java.util.Set;
import javax.annotation.processing.*;
import javax.lang.model.element.*;
import com.sun.tools.javac.util.*;
@ProcessingEnvAnnoDiscovery.Anno1
public class ProcessingEnvAnnoDiscovery<@ProcessingEnvAnnoDiscovery.Anno4 T>
extends JavacTestingAbstractProcessor {
private int round = 0;
public boolean process(Set<? extends TypeElement> annos, RoundEnvironment rEnv) {
if (round++ == 0) {
System.out.println(annos);
Assert.check(annos.contains(eltUtils.getTypeElement("java.lang.annotation.Target")));
Assert.check(annos.contains(eltUtils.getTypeElement("ProcessingEnvAnnoDiscovery.Anno1")));
Assert.check(annos.contains(eltUtils.getTypeElement("ProcessingEnvAnnoDiscovery.Anno2")));
Assert.check(annos.contains(eltUtils.getTypeElement("ProcessingEnvAnnoDiscovery.Anno3")));
Assert.check(annos.contains(eltUtils.getTypeElement("ProcessingEnvAnnoDiscovery.Anno4")));
Assert.check(annos.contains(eltUtils.getTypeElement("ProcessingEnvAnnoDiscovery.Anno5")));
Assert.check(annos.size() == 6, "Found extra annotations"); //Anno1-5 + @Target
}
return true;
}
@Anno2
public <@Anno5 K> K m(@Anno3 long foo) {
return null;
}
@interface Anno1 {}
@interface Anno2 {}
@interface Anno3 {}
@Target(ElementType.TYPE_PARAMETER)
@interface Anno4 {}
@Target(ElementType.TYPE_PARAMETER)
@interface Anno5 {}
}
/*
* Copyright (c) 2014, 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.lang.annotation.*;
import static java.lang.annotation.RetentionPolicy.*;
@Retention(RUNTIME)
public @interface Anno {}
/*
* Copyright (c) 2014, 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 to hold annotations for ElementsAnnotatedWithTest.
*/
@AnnotatedElementInfo(annotationName="Anno",
expectedSize=1,
names={"annotatedParameter"})
public class ParameterAnnotations {
private void foo(@Anno Object annotatedParameter) {}
}
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
/* /*
* @test * @test
* @bug 6397298 6400986 6425592 6449798 6453386 6508401 6498938 6911854 8030049 * @bug 6397298 6400986 6425592 6449798 6453386 6508401 6498938 6911854 8030049 8038080
* @summary Tests that getElementsAnnotatedWith works properly. * @summary Tests that getElementsAnnotatedWith works properly.
* @author Joseph D. Darcy * @author Joseph D. Darcy
* @library /tools/javac/lib * @library /tools/javac/lib
...@@ -31,12 +31,14 @@ ...@@ -31,12 +31,14 @@
* @compile TestElementsAnnotatedWith.java * @compile TestElementsAnnotatedWith.java
* @compile InheritedAnnotation.java * @compile InheritedAnnotation.java
* @compile TpAnno.java * @compile TpAnno.java
* @compile Anno.java
* @compile -processor TestElementsAnnotatedWith -proc:only SurfaceAnnotations.java * @compile -processor TestElementsAnnotatedWith -proc:only SurfaceAnnotations.java
* @compile -processor TestElementsAnnotatedWith -proc:only BuriedAnnotations.java * @compile -processor TestElementsAnnotatedWith -proc:only BuriedAnnotations.java
* @compile -processor TestElementsAnnotatedWith -proc:only Part1.java Part2.java * @compile -processor TestElementsAnnotatedWith -proc:only Part1.java Part2.java
* @compile -processor TestElementsAnnotatedWith -proc:only C2.java * @compile -processor TestElementsAnnotatedWith -proc:only C2.java
* @compile -processor TestElementsAnnotatedWith -proc:only Foo.java * @compile -processor TestElementsAnnotatedWith -proc:only Foo.java
* @compile -processor TestElementsAnnotatedWith -proc:only TypeParameterAnnotations.java * @compile -processor TestElementsAnnotatedWith -proc:only TypeParameterAnnotations.java
* @compile -processor TestElementsAnnotatedWith -proc:only ParameterAnnotations.java
* @compile/fail/ref=ErroneousAnnotations.out -processor TestElementsAnnotatedWith -proc:only -XDrawDiagnostics ErroneousAnnotations.java * @compile/fail/ref=ErroneousAnnotations.out -processor TestElementsAnnotatedWith -proc:only -XDrawDiagnostics ErroneousAnnotations.java
* @compile Foo.java * @compile Foo.java
* @compile/process -processor TestElementsAnnotatedWith -proc:only Foo * @compile/process -processor TestElementsAnnotatedWith -proc:only Foo
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册