Program: 75658
Project: 75658
Buggy source:
public void visitMethodCallNode(ASTPtMethodCallNode node) throws IllegalActionException {
  int argCount=node.jjtGetNumChildren();
  _evaluateAllChildren(node);
  Class[] argTypes=new Class[argCount];
  Object[] argValues=new Object[argCount];
  for (int i=0; i < argCount; i++) {
    argValues[i]=(ptolemy.data.Token)node.jjtGetChild(i).getToken();
    argTypes[i]=argValues[i].getClass();
  }
  Object result=null;
  StringBuffer errorMessage=null;
  try {
    result=CachedMethod.findAndRunMethod(node.getMethodName(),argTypes,argValues,CachedMethod.METHOD);
  }
 catch (  IllegalActionException ex) {
    if (errorMessage == null)     errorMessage=new StringBuffer();
    errorMessage.append("String_Node_Str" + ex.toString());
  }
  ;
  if (result == null) {
    boolean anyArray=false;
    for (int i=0; i < argCount; i++) {
      ptolemy.data.Token child=(ptolemy.data.Token)argValues[i];
      if (child instanceof ArrayToken) {
        anyArray=true;
        argValues[i]=((ArrayToken)child).arrayValue();
        argTypes[i]=argValues[i].getClass();
      }
    }
    if (anyArray) {
      try {
        result=CachedMethod.findAndRunMethod(node.getMethodName(),argTypes,argValues,CachedMethod.METHOD);
      }
 catch (      IllegalActionException ex) {
        if (errorMessage == null)         errorMessage=new StringBuffer();
        errorMessage.append("String_Node_Str" + ex.toString());
      }
    }
  }
  if (result == null) {
    for (int i=1; i < argCount; i++) {
      ptolemy.data.Token child=(ptolemy.data.Token)argValues[i];
      Object[] javaArg=ASTPtFunctionNode.convertTokenToJavaType(child);
      argValues[i]=javaArg[0];
      argTypes[i]=(Class)javaArg[1];
    }
    try {
      result=CachedMethod.findAndRunMethod(node.getMethodName(),argTypes,argValues,CachedMethod.METHOD);
    }
 catch (    IllegalActionException ex) {
      if (errorMessage == null)       errorMessage=new StringBuffer();
      errorMessage.append("String_Node_Str" + ex.toString());
    }
  }
  if (result == null && argValues[0] instanceof ArrayToken) {
    argValues[0]=((ArrayToken)argValues[0]).arrayValue();
    argTypes[0]=argValues[0].getClass();
    result=CachedMethod.findAndRunMethod(node.getMethodName(),argTypes,argValues,CachedMethod.METHOD);
  }
  if (result == null) {
    ptolemy.data.Token child=(ptolemy.data.Token)argValues[0];
    Object[] javaArg=ASTPtFunctionNode.convertTokenToJavaType(child);
    argValues[0]=javaArg[0];
    argTypes[0]=(Class)javaArg[1];
    result=CachedMethod.findAndRunMethod(node.getMethodName(),argTypes,argValues,CachedMethod.METHOD);
  }
  if (result != null) {
    ptolemy.data.Token retval=ASTPtFunctionNode.convertJavaTypeToToken(result);
    if (retval == null) {
      throw new IllegalActionException("String_Node_Str" + result.getClass().toString() + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
    }
    node.setToken(retval);
    return;
  }
  if (errorMessage == null)   errorMessage=new StringBuffer();
  for (int i=1; i < argCount; i++) {
    if (i == 1) {
      errorMessage.append(argValues[i].toString());
    }
 else {
      errorMessage.append("String_Node_Str" + argValues[i].toString());
    }
  }
  throw new IllegalActionException("String_Node_Str" + node.getMethodName() + "String_Node_Str"+ errorMessage+ "String_Node_Str");
}

Fixed version (ground truth):
public void visitMethodCallNode(ASTPtMethodCallNode node) throws IllegalActionException {
  int argCount=node.jjtGetNumChildren();
  _evaluateAllChildren(node);
  Class[] argTypes=new Class[argCount];
  Object[] argValues=new Object[argCount];
  for (int i=0; i < argCount; i++) {
    argValues[i]=(ptolemy.data.Token)node.jjtGetChild(i).getToken();
    argTypes[i]=argValues[i].getClass();
  }
  Object result=null;
  StringBuffer errorMessage=null;
  try {
    result=CachedMethod.findAndRunMethod(node.getMethodName(),argTypes,argValues,CachedMethod.METHOD);
  }
 catch (  IllegalActionException ex) {
    if (errorMessage == null)     errorMessage=new StringBuffer();
    errorMessage.append("String_Node_Str" + ex.toString());
  }
  ;
  if (result == null) {
    boolean anyArray=false;
    for (int i=0; i < argCount; i++) {
      ptolemy.data.Token child=(ptolemy.data.Token)node.jjtGetChild(i).getToken();
      if (child instanceof ArrayToken) {
        anyArray=true;
        argValues[i]=((ArrayToken)child).arrayValue();
        argTypes[i]=argValues[i].getClass();
      }
    }
    if (anyArray) {
      try {
        result=CachedMethod.findAndRunMethod(node.getMethodName(),argTypes,argValues,CachedMethod.METHOD);
      }
 catch (      IllegalActionException ex) {
        if (errorMessage == null)         errorMessage=new StringBuffer();
        errorMessage.append("String_Node_Str" + ex.toString());
      }
    }
  }
  if (result == null) {
    argValues[0]=(ptolemy.data.Token)node.jjtGetChild(0).getToken();
    argTypes[0]=argValues[0].getClass();
    for (int i=1; i < argCount; i++) {
      ptolemy.data.Token child=(ptolemy.data.Token)node.jjtGetChild(i).getToken();
      Object[] javaArg=ASTPtFunctionNode.convertTokenToJavaType(child);
      argValues[i]=javaArg[0];
      argTypes[i]=(Class)javaArg[1];
    }
    try {
      result=CachedMethod.findAndRunMethod(node.getMethodName(),argTypes,argValues,CachedMethod.METHOD);
    }
 catch (    IllegalActionException ex) {
      if (errorMessage == null)       errorMessage=new StringBuffer();
      errorMessage.append("String_Node_Str" + ex.toString());
    }
  }
  if (result == null && argValues[0] instanceof ArrayToken) {
    argValues[0]=((ArrayToken)argValues[0]).arrayValue();
    argTypes[0]=argValues[0].getClass();
    result=CachedMethod.findAndRunMethod(node.getMethodName(),argTypes,argValues,CachedMethod.METHOD);
  }
  if (result == null) {
    ptolemy.data.Token child=(ptolemy.data.Token)node.jjtGetChild(0).getToken();
    Object[] javaArg=ASTPtFunctionNode.convertTokenToJavaType(child);
    argValues[0]=javaArg[0];
    argTypes[0]=(Class)javaArg[1];
    result=CachedMethod.findAndRunMethod(node.getMethodName(),argTypes,argValues,CachedMethod.METHOD);
  }
  if (result != null) {
    ptolemy.data.Token retval=ASTPtFunctionNode.convertJavaTypeToToken(result);
    if (retval == null) {
      throw new IllegalActionException("String_Node_Str" + result.getClass().toString() + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str");
    }
    node.setToken(retval);
    return;
  }
  if (errorMessage == null)   errorMessage=new StringBuffer();
  for (int i=1; i < argCount; i++) {
    if (i == 1) {
      errorMessage.append(argValues[i].toString());
    }
 else {
      errorMessage.append("String_Node_Str" + argValues[i].toString());
    }
  }
  throw new IllegalActionException("String_Node_Str" + node.getMethodName() + "String_Node_Str"+ errorMessage+ "String_Node_Str");
}