Program: 21646
Project: 21646
Buggy source:
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable {
  String methodName=method.getName();
  if (methodName.equals("String_Node_Str")) {
    WeakReference listenerRef=new WeakReference(args[0]);
    changeListeners.add(listenerRef);
    if (traceListeners && !(args[0] instanceof TraceListener)) {
      System.out.println("String_Node_Str" + proxy + "String_Node_Str"+ args[0]);
      if (changeListenerLabels == null) {
        changeListenerLabels=new HashMap();
        changeListenerLabels.put(listenerRef,"String_Node_Str" + args[0]);
      }
    }
    hasListeners=true;
    return null;
  }
  if (methodName.equals("String_Node_Str")) {
    if (traceListeners) {
      System.out.println("String_Node_Str" + proxy + "String_Node_Str"+ args[0]);
    }
    for (int i=0; i < changeListeners.size(); i++) {
      WeakReference ref=(WeakReference)changeListeners.get(i);
      if (args[0] == ref.get()) {
        changeListeners.remove(i);
        return null;
      }
    }
    if (changeListeners.size() == 0) {
      hasListeners=false;
    }
    return null;
  }
  if (methodName.equals("String_Node_Str")) {
    setDoNotifyListeners(((Boolean)args[0]).booleanValue());
    return null;
  }
  if (methodName.equals("String_Node_Str")) {
    notifyOTChange(null,null,null);
    return null;
  }
  if (methodName.equals("String_Node_Str")) {
    String resourceName=(String)args[0];
    Object resourceValue=dataObject.getResource(resourceName);
    return Boolean.valueOf(resourceValue != null);
  }
 else   if (methodName.startsWith("String_Node_Str")) {
    String resourceName=getResourceName(2,methodName);
    Class returnType=method.getReturnType();
    Class proxyClass=proxy.getClass();
    return handleGet(resourceName,returnType,proxyClass);
  }
 else   if (methodName.startsWith("String_Node_Str")) {
    String resourceName=getResourceName(3,methodName);
    Class returnType=method.getReturnType();
    Class proxyClass=proxy.getClass();
    return handleGet(resourceName,returnType,proxyClass);
  }
 else   if (methodName.startsWith("String_Node_Str")) {
    (new Exception("String_Node_Str")).printStackTrace();
    return null;
  }
 else   if (methodName.startsWith("String_Node_Str")) {
    (new Exception("String_Node_Str")).printStackTrace();
    return null;
  }
 else   if (methodName.equals("String_Node_Str")) {
    return OTrunkImpl.getClassName(dataObject) + "String_Node_Str" + dataObject.getGlobalId();
  }
 else   if (methodName.equals("String_Node_Str")) {
    String str=OTrunkImpl.getClassName(dataObject) + "String_Node_Str" + dataObject.getGlobalId();
    Integer integer=new Integer(str.hashCode());
    return integer;
  }
 else   if (methodName.equals("String_Node_Str")) {
    Object other=args[0];
    if (!(other instanceof OTObject)) {
      return Boolean.FALSE;
    }
    if (proxy == other) {
      return Boolean.TRUE;
    }
    if (((OTObject)other).getGlobalId().equals(dataObject.getGlobalId())) {
      System.err.println("String_Node_Str");
      return Boolean.TRUE;
    }
    return Boolean.FALSE;
  }
 else   if (methodName.startsWith("String_Node_Str")) {
    String resourceName=getResourceName(3,methodName);
    Object resourceValue=args[0];
    setResource(resourceName,resourceValue);
  }
 else   if (methodName.equals("String_Node_Str")) {
    return copyInto(args[0]);
  }
 else {
    System.err.println("String_Node_Str" + methodName + "String_Node_Str"+ proxy.getClass());
  }
  return null;
}

Fixed version (ground truth):
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable {
  String methodName=method.getName();
  if (methodName.equals("String_Node_Str")) {
    WeakReference listenerRef=new WeakReference(args[0]);
    changeListeners.add(listenerRef);
    if (traceListeners && !(args[0] instanceof TraceListener)) {
      System.out.println("String_Node_Str" + proxy + "String_Node_Str"+ args[0]);
      if (changeListenerLabels == null) {
        changeListenerLabels=new HashMap();
        changeListenerLabels.put(listenerRef,"String_Node_Str" + args[0]);
      }
    }
    hasListeners=true;
    return null;
  }
  if (methodName.equals("String_Node_Str")) {
    if (traceListeners) {
      System.out.println("String_Node_Str" + proxy + "String_Node_Str"+ args[0]);
    }
    for (int i=0; i < changeListeners.size(); i++) {
      WeakReference ref=(WeakReference)changeListeners.get(i);
      if (args[0] == ref.get()) {
        changeListeners.remove(i);
        return null;
      }
    }
    if (changeListeners.size() == 0) {
      hasListeners=false;
    }
    return null;
  }
  if (methodName.equals("String_Node_Str")) {
    setDoNotifyListeners(((Boolean)args[0]).booleanValue());
    return null;
  }
  if (methodName.equals("String_Node_Str")) {
    notifyOTChange(null,null,null);
    return null;
  }
  if (methodName.equals("String_Node_Str")) {
    String resourceName=(String)args[0];
    Object resourceValue=dataObject.getResource(resourceName);
    return Boolean.valueOf(resourceValue != null);
  }
 else   if (methodName.startsWith("String_Node_Str")) {
    String resourceName=getResourceName(2,methodName);
    Class returnType=method.getReturnType();
    Class proxyClass=proxy.getClass();
    return handleGet(resourceName,returnType,proxyClass);
  }
 else   if (methodName.startsWith("String_Node_Str")) {
    String resourceName=getResourceName(3,methodName);
    Class returnType=method.getReturnType();
    Class proxyClass=proxy.getClass();
    return handleGet(resourceName,returnType,proxyClass);
  }
 else   if (methodName.startsWith("String_Node_Str")) {
    (new Exception("String_Node_Str")).printStackTrace();
    return null;
  }
 else   if (methodName.startsWith("String_Node_Str")) {
    (new Exception("String_Node_Str")).printStackTrace();
    return null;
  }
 else   if (methodName.equals("String_Node_Str")) {
    return OTrunkImpl.getClassName(dataObject) + "String_Node_Str" + dataObject.getGlobalId();
  }
 else   if (methodName.equals("String_Node_Str")) {
    String str=OTrunkImpl.getClassName(dataObject) + "String_Node_Str" + dataObject.getGlobalId();
    Integer integer=new Integer(str.hashCode());
    return integer;
  }
 else   if (methodName.equals("String_Node_Str")) {
    Object other=args[0];
    if (!(other instanceof OTObject)) {
      return Boolean.FALSE;
    }
    if (proxy == other) {
      return Boolean.TRUE;
    }
    if (((OTObject)other).getGlobalId().equals(dataObject.getGlobalId())) {
      System.err.println("String_Node_Str");
      return Boolean.TRUE;
    }
    return Boolean.FALSE;
  }
 else   if (methodName.startsWith("String_Node_Str")) {
    String resourceName=getResourceName(3,methodName);
    Object resourceValue=args[0];
    setResource(resourceName,resourceValue);
  }
 else {
    System.err.println("String_Node_Str" + methodName + "String_Node_Str"+ proxy.getClass());
  }
  return null;
}