Buggy code:
public class MethodReference extends SpelNodeImpl { private final String name ; private final boolean nullSafe ; private volatile MethodReference . CachedMethodExecutor cachedExecutor ; public MethodReference ( boolean nullSafe , String methodName , int pos , SpelNodeImpl ... arguments ) { } public final String getName ( ) { } @ Override protected ValueRef getValueRef ( ExpressionState state ) throws EvaluationException { } @ Override public TypedValue getValueInternal ( ExpressionState state ) throws EvaluationException { } private TypedValue getValueInternal ( EvaluationContext evaluationContext , Object value , TypeDescriptor targetType , Object [ ] arguments ) { } private void throwIfNotNullSafe ( List < TypeDescriptor > argumentTypes ) { } private Object [ ] getArguments ( ExpressionState state ) { } private List < TypeDescriptor > getArgumentTypes ( Object ... arguments ) { } private MethodExecutor getCachedExecutor ( EvaluationContext evaluationContext , Object value , TypeDescriptor target , List < TypeDescriptor > argumentTypes ) { } private MethodExecutor findAccessorForMethod ( String name , List < TypeDescriptor > argumentTypes , Object targetObject , EvaluationContext evaluationContext ) throws SpelEvaluationException { } private void throwSimpleExceptionIfPossible ( Object value , AccessException ex ) { } private void updateExitTypeDescriptor ( ) { } @ Override public String toStringAST ( ) { } @ Override public boolean isCompilable ( ) { } @ Override public void generateCode ( MethodVisitor mv , CodeFlow cf ) { MethodReference . CachedMethodExecutor executorToCheck = this . cachedExecutor ; if ( ( executorToCheck == null ) || ( ! ( ( executorToCheck . get ( ) ) instanceof ReflectiveMethodExecutor ) ) ) { throw new IllegalStateException ( ( "No<seq2seq4repair_space>applicable<seq2seq4repair_space>cached<seq2seq4repair_space>executor<seq2seq4repair_space>found:<seq2seq4repair_space>" + executorToCheck ) ) ; } ReflectiveMethodExecutor methodExecutor = ( ( ReflectiveMethodExecutor ) ( executorToCheck . get ( ) ) ) ; Method method = methodExecutor . getMethod ( ) ; boolean isStaticMethod = Modifier . isStatic ( method . getModifiers ( ) ) ; String descriptor = cf . lastDescriptor ( ) ; if ( ( descriptor == null ) && ( ! isStaticMethod ) ) { cf . loadTarget ( mv ) ; } if ( CodeFlow . isPrimitive ( descriptor ) ) { CodeFlow . insertBoxIfNecessary ( mv , descriptor . charAt ( 0 ) ) ; } boolean itf = method . getDeclaringClass ( ) . isInterface ( ) ; String methodDeclaringClassSlashedDescriptor = null ; if ( Modifier . isPublic ( method . getDeclaringClass ( ) . getModifiers ( ) ) ) { methodDeclaringClassSlashedDescriptor = method . getDeclaringClass ( ) . getName ( ) . replace ( '.' , '//' ) ; } else { methodDeclaringClassSlashedDescriptor = methodExecutor . getPublicDeclaringClass ( ) . getName ( ) . replace ( '.' , '//' ) ; } if ( ! isStaticMethod ) { if ( ( descriptor == null ) || ( ! ( descriptor . substring ( 1 ) . equals ( methodDeclaringClassSlashedDescriptor ) ) ) ) { CodeFlow . insertCheckCast ( mv , ( "L" + methodDeclaringClassSlashedDescriptor ) ) ; } } <START_BUG> CodeFlow . generateCodeForArguments ( mv , cf , method , children ) ; <END_BUG> mv . visitMethodInsn ( ( isStaticMethod ? INVOKESTATIC : INVOKEVIRTUAL ) , methodDeclaringClassSlashedDescriptor , method . getName ( ) , CodeFlow . createSignatureDescriptor ( method ) , itf ) ; cf . pushDescriptor ( this . exitTypeDescriptor ) ; } private class MethodValueRef implements ValueRef { private final EvaluationContext evaluationContext ; private final Object value ; private final TypeDescriptor targetType ; private final Object [ ] arguments ; public MethodValueRef ( ExpressionState state , Object [ ] arguments ) { } @ Override public TypedValue getValue ( ) { } @ Override public void setValue ( Object newValue ) { } @ Override public boolean isWritable ( ) { } } private static class CachedMethodExecutor { private final MethodExecutor methodExecutor ; private final Class < ? > staticClass ; private final TypeDescriptor target ; private final List < TypeDescriptor > argumentTypes ; public CachedMethodExecutor ( MethodExecutor methodExecutor , Class < ? > staticClass , TypeDescriptor target , List < TypeDescriptor > argumentTypes ) { } public boolean isSuitable ( Object value , TypeDescriptor target , List < TypeDescriptor > argumentTypes ) { } public MethodExecutor get ( ) { } } }

Fix:
generateCodeForArguments ( mv , cf , method , children ) ;