Program: 74100
Project: 74100
Buggy source:
public void tableChanged(TableModelEvent event){
  if (event.getType() != TableModelEvent.UPDATE) {
    return;
  }
  int row=event.getFirstRow();
  int column=event.getColumn();
  if (column != TableModelEvent.ALL_COLUMNS && row == event.getLastRow()) {
    TransformationRule transformer=(TransformationRule)getModel();
    Pattern pattern=transformer.getPattern();
    Replacement replacement=transformer.getReplacement();
    String newValue=_getCellEditorValue((JPanel)_tableModel.getValueAt(row,column));
    String previousString=_cellEditor.getPreviousString();
    if (previousString.equals(newValue)) {
      return;
    }
    if (column == 1) {
      String patternObjectName=newValue;
      if (patternObjectName.length() > 0) {
        NamedObj patternObject=pattern.getEntity(patternObjectName);
        if (patternObject == null) {
          patternObject=pattern.getRelation(patternObjectName);
        }
        if (patternObject == null) {
          String message="String_Node_Str" + patternObjectName + "String_Node_Str"+ "String_Node_Str";
          _showTableError(message,row,column,previousString);
          return;
        }
      }
      String replacementObjectName=_getCellEditorValue((JPanel)_tableModel.getValueAt(row,2));
      if (replacementObjectName.length() > 0) {
        NamedObj replacementObject=replacement.getEntity(replacementObjectName);
        if (replacementObject == null) {
          replacementObject=replacement.getRelation(replacementObjectName);
        }
        if (replacementObject == null) {
          String message="String_Node_Str" + replacementObjectName + "String_Node_Str"+ "String_Node_Str";
          _showTableError(message,row,column,previousString);
          return;
        }
        PatternObjectAttribute attribute=GTTools.getPatternObjectAttribute(replacementObject);
        if (attribute == null) {
          try {
            attribute=new PatternObjectAttribute(replacementObject,"String_Node_Str");
          }
 catch (          KernelException e) {
            throw new KernelRuntimeException(e,"String_Node_Str" + "String_Node_Str");
          }
        }
        if (!attribute.getExpression().equals(patternObjectName)) {
          _setPatternObject(replacementObject,patternObjectName,false);
        }
      }
    }
 else     if (column == 2) {
      String replacementObjectName=newValue;
      if (replacementObjectName.length() > 0) {
        NamedObj replacementObject=replacement.getEntity(replacementObjectName);
        if (replacementObject == null) {
          replacementObject=replacement.getRelation(replacementObjectName);
        }
        if (replacementObject == null) {
          String message="String_Node_Str" + replacementObjectName + "String_Node_Str"+ "String_Node_Str";
          _showTableError(message,row,column,previousString);
          return;
        }
        PatternObjectAttribute attribute=GTTools.getPatternObjectAttribute(replacementObject);
        if (attribute == null) {
          String message="String_Node_Str" + replacementObject + "String_Node_Str"+ "String_Node_Str"+ "String_Node_Str";
          _showTableError(message,row,column,previousString);
          return;
        }
        _cellEditor.setPreviousString(replacementObjectName);
        String patternObjectName=_getCellEditorValue((JPanel)_tableModel.getValueAt(row,1));
        if (previousString.length() > 0) {
          NamedObj previousObject=replacement.getEntity(previousString);
          _setPatternObject(previousObject,"String_Node_Str",false);
        }
        _setPatternObject(replacementObject,patternObjectName,true);
      }
    }
  }
}

Fixed version (ground truth):
public void tableChanged(TableModelEvent event){
  if (event.getType() != TableModelEvent.UPDATE) {
    return;
  }
  int row=event.getFirstRow();
  int column=event.getColumn();
  if (column != TableModelEvent.ALL_COLUMNS && row == event.getLastRow()) {
    TransformationRule transformer=(TransformationRule)getModel();
    Pattern pattern=transformer.getPattern();
    Replacement replacement=transformer.getReplacement();
    String newValue=_getCellEditorValue((JPanel)_tableModel.getValueAt(row,column));
    String previousString=_cellEditor.getPreviousString();
    if (previousString.equals(newValue)) {
      return;
    }
    if (column == 1) {
      String patternObjectName=newValue;
      if (patternObjectName.length() > 0) {
        NamedObj patternObject=pattern.getEntity(patternObjectName);
        if (patternObject == null) {
          patternObject=pattern.getRelation(patternObjectName);
        }
        if (patternObject == null) {
          String message="String_Node_Str" + patternObjectName + "String_Node_Str"+ "String_Node_Str";
          _showTableError(message,row,column,previousString);
          return;
        }
      }
      String replacementObjectName=_getCellEditorValue((JPanel)_tableModel.getValueAt(row,2));
      if (replacementObjectName.length() > 0) {
        NamedObj replacementObject=replacement.getEntity(replacementObjectName);
        if (replacementObject == null) {
          replacementObject=replacement.getRelation(replacementObjectName);
        }
        if (replacementObject == null) {
          String message="String_Node_Str" + replacementObjectName + "String_Node_Str"+ "String_Node_Str";
          _showTableError(message,row,column,previousString);
          return;
        }
        PatternObjectAttribute attribute;
        try {
          attribute=GTTools.getPatternObjectAttribute(replacementObject,true);
        }
 catch (        KernelException e) {
          throw new KernelRuntimeException(e,"String_Node_Str" + "String_Node_Str");
        }
        if (!attribute.getExpression().equals(patternObjectName)) {
          _setPatternObject(replacementObject,patternObjectName,false);
        }
      }
    }
 else     if (column == 2) {
      String replacementObjectName=newValue;
      if (replacementObjectName.length() > 0) {
        NamedObj replacementObject=replacement.getEntity(replacementObjectName);
        if (replacementObject == null) {
          replacementObject=replacement.getRelation(replacementObjectName);
        }
        if (replacementObject == null) {
          String message="String_Node_Str" + replacementObjectName + "String_Node_Str"+ "String_Node_Str";
          _showTableError(message,row,column,previousString);
          return;
        }
        PatternObjectAttribute attribute;
        try {
          attribute=GTTools.getPatternObjectAttribute(replacementObject,true);
        }
 catch (        KernelException e) {
          throw new KernelRuntimeException(e,"String_Node_Str" + "String_Node_Str");
        }
        _cellEditor.setPreviousString(replacementObjectName);
        String patternObjectName=_getCellEditorValue((JPanel)_tableModel.getValueAt(row,1));
        if (previousString.length() > 0) {
          NamedObj previousObject=replacement.getEntity(previousString);
          _setPatternObject(previousObject,"String_Node_Str",false);
        }
        _setPatternObject(replacementObject,patternObjectName,true);
      }
    }
  }
}