--- old/src/java.base/share/classes/java/lang/reflect/Executable.java 2017-05-18 00:09:23.693355511 -0700 +++ new/src/java.base/share/classes/java/lang/reflect/Executable.java 2017-05-18 00:09:23.585355515 -0700 @@ -551,12 +551,18 @@ Annotation[][] result = parseParameterAnnotations(parameterAnnotations); - if (result.length != numParameters) - handleParameterNumberMismatch(result.length, numParameters); + if (result.length != numParameters && + handleParameterNumberMismatch(result.length, numParameters)) { + Annotation[][] tmp = new Annotation[result.length+1][]; + // Shift annotations down one to account for an implicit leading parameter + System.arraycopy(result, 0, tmp, 1, result.length); + tmp[0] = new Annotation[0]; + result = tmp; + } return result; } - abstract void handleParameterNumberMismatch(int resultLength, int numParameters); + abstract boolean handleParameterNumberMismatch(int resultLength, int numParameters); /** * {@inheritDoc}