--- a/jdk/src/java.base/share/classes/java/lang/reflect/Constructor.java Wed Jul 05 19:56:33 2017 +0200
+++ b/jdk/src/java.base/share/classes/java/lang/reflect/Constructor.java Mon Aug 18 10:59:36 2014 +0100
@@ -544,15 +544,33 @@
*/
@Override
public AnnotatedType getAnnotatedReceiverType() {
- if (getDeclaringClass().getEnclosingClass() == null)
- return super.getAnnotatedReceiverType();
+ Class<?> thisDeclClass = getDeclaringClass();
+ Class<?> enclosingClass = thisDeclClass.getEnclosingClass();
+
+ if (enclosingClass == null) {
+ // A Constructor for a top-level class
+ return null;
+ }
+ Class<?> outerDeclaringClass = thisDeclClass.getDeclaringClass();
+ if (outerDeclaringClass == null) {
+ // A constructor for a local or anonymous class
+ return null;
+ }
+
+ // Either static nested or inner class
+ if (Modifier.isStatic(thisDeclClass.getModifiers())) {
+ // static nested
+ return null;
+ }
+
+ // A Constructor for an inner class
return TypeAnnotationParser.buildAnnotatedType(getTypeAnnotationBytes0(),
sun.misc.SharedSecrets.getJavaLangAccess().
- getConstantPool(getDeclaringClass()),
+ getConstantPool(thisDeclClass),
this,
- getDeclaringClass(),
- getDeclaringClass().getEnclosingClass(),
+ thisDeclClass,
+ enclosingClass,
TypeAnnotation.TypeAnnotationTarget.METHOD_RECEIVER);
}
}