RFR: 8268788: Annotations with lambda expressions can still cause AnnotationFormatError

Sergei Ustimenko fdesu at protonmail.com
Wed Jul 7 16:17:12 UTC 2021


Hi Joe,

Thanks, I appreciate your feedback very much!

There was one more thing I wanted to discuss: there is something that
might be improved in the AnnotationInvocationHandler#validateAnnotationMethods
and I wanted to know if it makes sense to go ahead with the change.

There are `if` statements that set the variable called `valid` to false
in case validation fails. Later, depending on the value of the `valid`, an
instance of AnnotationFormatError being thrown. I was thinking if it makes sense
to simplify the validation loop (this is not the complete diff - just gives a
gist of what I mean):

@@ -493,10 +493,7 @@ class AnnotationInvocationHandler implements InvocationHandler, Serializable {
          * Specification citations below are from JLS
          * 9.6.1. Annotation Type Elements
          */
-        boolean valid = true;
-        Method currentMethod = null;
         for(Method method : memberMethods) {
-            currentMethod = method;
             int modifiers = method.getModifiers();
             // Skip over methods that may be a static initializer or
             // similar construct. A static initializer may be used for
@@ -524,8 +521,7 @@ class AnnotationInvocationHandler implements InvocationHandler, Serializable {
                 method.isDefault() ||
                 method.getParameterCount() != 0 ||
                 method.getExceptionTypes().length != 0) {
-                valid = false;
-                break;
+                throw newAnnotationFormatErrorOf(method);
             }

 ...
         }
-        if (valid)
-            return;
-        else
-            throw new AnnotationFormatError("Malformed method on an annotation type: " +
-                                            currentMethod.toString());
+    }
+
+    private static AnnotationFormatError newAnnotationFormatErrorOf(Method malformedMethod) {
+        return new AnnotationFormatError("Malformed method on an annotation type: " + malformedMethod);
     }


What do you think? Does it make sense?

Thanks,
Sergei



‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐

On Tuesday, July 6th, 2021 at 16:01, Joe Darcy <joe.darcy at oracle.com> wrote:

> Hello,
>
> I should be able to look at this within the next week or two; thanks,
>
> -Joe
>



More information about the core-libs-dev mailing list