Program: 73381
Project: 73381
Buggy source:
/** 
 * Return the replacement string of the given macro. Subclass of GenericCodeGenerator may overriding this method to extend or support a different set of macros.
 * @param macro The given macro.
 * @param parameter The given parameter to the macro.
 * @return The replacement string of the given macro.
 * @exception IllegalActionException Thrown if the given macro orparameter is not valid.
 */
protected String _replaceMacro(String macro,String parameter) throws IllegalActionException {
  if (_codeGenerator == null) {
    throw new NullPointerException("String_Node_Str" + "String_Node_Str");
  }
  int indexOfDollarSign=macro.indexOf('$');
  if (indexOfDollarSign >= 0) {
    String result="String_Node_Str" + macro.substring(0,indexOfDollarSign);
    String innerMacro=macro.substring(indexOfDollarSign + 1,macro.length());
    result+=_replaceMacro(innerMacro,parameter);
    return result;
  }
  if (macro.equals("String_Node_Str")) {
    return _replaceGetMacro(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    return _replacePutMacro(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    return _replaceHasTokenMacro(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    CGException.throwException("String_Node_Str" + "String_Node_Str");
  }
 else   if (macro.equals("String_Node_Str")) {
    return _replaceParameter(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    TypedIOPort port=getPort(parameter);
    if (port != null) {
      return _getCodeGenerator().targetType(port.getType());
    }
    Variable variable=_getVariable(parameter);
    if (variable != null) {
      return _getCodeGenerator().targetType(variable.getType());
    }
    CGException.throwException(parameter + "String_Node_Str");
  }
 else   if (macro.equals("String_Node_Str") || macro.equals("String_Node_Str")) {
    String type="String_Node_Str";
    if (macro.equals("String_Node_Str")) {
      type="String_Node_Str";
    }
    TypedIOPort port=getPort(parameter);
    if (port != null) {
      return type + _getCodeGenerator().codeGenType(port.getType());
    }
    Variable variable=_getVariable(parameter);
    if (variable != null) {
      return type + _getCodeGenerator().codeGenType(variable.getType());
    }
    CGException.throwException(parameter + "String_Node_Str");
  }
 else   if (macro.equals("String_Node_Str")) {
    return getParameterValue(parameter,(NamedObj)_component);
  }
 else   if (macro.equals("String_Node_Str")) {
    return "String_Node_Str" + getSize(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    if (parameter.trim().length() == 0) {
      return _codeGenerator.generateVariableName(((NamedObj)_component));
    }
 else {
      return _codeGenerator.generateVariableName(((NamedObj)_component)) + "String_Node_Str" + processCode(parameter);
    }
  }
 else   if (macro.equals("String_Node_Str")) {
    return ((NamedObj)_component).getClassName().replace('.','_') + "String_Node_Str" + processCode(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    return getNewInvocation(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    return getFunctionInvocation(parameter,false);
  }
 else   if (macro.equals("String_Node_Str")) {
    return getFunctionInvocation(parameter,true);
  }
 else {
    try {
      Method method=getClass().getMethod(macro,new Class[0]);
      return (String)method.invoke(this,new Object[0]);
    }
 catch (    Exception ex) {
    }
    Method handler=null;
    Method checker=null;
    Class<?> userMacro=null;
    try {
      userMacro=Class.forName("String_Node_Str" + macro);
      handler=userMacro.getMethod("String_Node_Str",new Class[]{List.class});
      checker=userMacro.getMethod("String_Node_Str",new Class[]{List.class});
    }
 catch (    Throwable throwable) {
      return null;
    }
    try {
      checker.invoke(userMacro,new Object[]{parseList(parameter)});
      return (String)handler.invoke(userMacro,new Object[]{parseList(parameter)});
    }
 catch (    Throwable throwable) {
      CGException.throwException(_component,throwable,"String_Node_Str" + macro + "String_Node_Str");
    }
  }
  return "String_Node_Str";
}

Fixed version (ground truth):
/** 
 * Return the replacement string of the given macro. Subclass of GenericCodeGenerator may overriding this method to extend or support a different set of macros.
 * @param macro The given macro.
 * @param parameter The given parameter to the macro.
 * @return The replacement string of the given macro.
 * @exception IllegalActionException Thrown if the given macro orparameter is not valid.
 */
protected String _replaceMacro(String macro,String parameter) throws IllegalActionException {
  if (_codeGenerator == null) {
    throw new NullPointerException("String_Node_Str" + "String_Node_Str");
  }
  int indexOfDollarSign=macro.indexOf('$');
  if (indexOfDollarSign >= 0) {
    String result="String_Node_Str" + macro.substring(0,indexOfDollarSign);
    String innerMacro=macro.substring(indexOfDollarSign + 1,macro.length());
    result+=_replaceMacro(innerMacro,parameter);
    return result;
  }
  if (macro.equals("String_Node_Str")) {
    return _replaceGetMacro(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    return _replacePutMacro(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    return _replaceHasTokenMacro(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    CGException.throwException("String_Node_Str" + "String_Node_Str");
  }
 else   if (macro.equals("String_Node_Str")) {
    return _replaceParameter(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    TypedIOPort port=getPort(parameter);
    if (port != null) {
      return _getCodeGenerator().targetType(port.getType());
    }
    Variable variable=_getVariable(parameter);
    if (variable != null) {
      return _getCodeGenerator().targetType(variable.getType());
    }
    CGException.throwException(parameter + "String_Node_Str");
  }
 else   if (macro.equals("String_Node_Str") || macro.equals("String_Node_Str")) {
    String type="String_Node_Str";
    if (macro.equals("String_Node_Str")) {
      type="String_Node_Str";
    }
    TypedIOPort port=getPort(parameter);
    if (port != null) {
      return type + _getCodeGenerator().codeGenType(port.getType());
    }
    Variable variable=_getVariable(parameter);
    if (variable != null) {
      return type + _getCodeGenerator().codeGenType(variable.getType());
    }
    CGException.throwException(parameter + "String_Node_Str");
  }
 else   if (macro.equals("String_Node_Str")) {
    return getParameterValue(parameter,(NamedObj)_component);
  }
 else   if (macro.equals("String_Node_Str")) {
    return "String_Node_Str" + getSize(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    if (parameter.trim().length() == 0) {
      return _codeGenerator.generateVariableName(((NamedObj)_component));
    }
 else {
      return _codeGenerator.generateVariableName(((NamedObj)_component)) + "String_Node_Str" + processCode(parameter);
    }
  }
 else   if (macro.equals("String_Node_Str")) {
    return ((NamedObj)_component).getClassName().replace('.','_') + "String_Node_Str" + processCode(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    return getNewInvocation(parameter);
  }
 else   if (macro.equals("String_Node_Str")) {
    return getFunctionInvocation(parameter,false);
  }
 else   if (macro.equals("String_Node_Str")) {
    return getFunctionInvocation(parameter,true);
  }
 else {
    try {
      Method method=getClass().getMethod(macro,new Class[0]);
      return (String)method.invoke(this,new Object[0]);
    }
 catch (    Throwable throwable) {
    }
    Method handler=null;
    Method checker=null;
    Class<?> userMacro=null;
    try {
      userMacro=Class.forName("String_Node_Str" + macro);
      handler=userMacro.getMethod("String_Node_Str",new Class[]{List.class});
      checker=userMacro.getMethod("String_Node_Str",new Class[]{List.class});
    }
 catch (    Throwable throwable) {
      return null;
    }
    try {
      checker.invoke(userMacro,new Object[]{parseList(parameter)});
      return (String)handler.invoke(userMacro,new Object[]{parseList(parameter)});
    }
 catch (    Throwable throwable) {
      CGException.throwException(_component,throwable,"String_Node_Str" + macro + "String_Node_Str");
    }
  }
  return "String_Node_Str";
}