--- old/src/share/classes/java/lang/reflect/Executable.java 2013-06-21 15:44:14.326613756 -0400 +++ new/src/share/classes/java/lang/reflect/Executable.java 2013-06-21 15:44:14.117611559 -0400 @@ -326,8 +326,12 @@ tmp = getParameters0(); // If we get back nothing, then synthesize parameters - if (tmp == null) + if (tmp == null) { + hasRealParameterData = false; tmp = synthesizeAllParams(); + } else { + hasRealParameterData = true; + } parameters = tmp; } @@ -335,6 +339,16 @@ return tmp; } + boolean hasRealParameterData() { + // If this somehow gets called before parameters gets + // initialized, force it into existence. + if (parameters == null) + privateGetParameters(); + + return hasRealParameterData; + } + + private boolean hasRealParameterData; private transient volatile Parameter[] parameters; private native Parameter[] getParameters0();