[Demonstration 1]

[Buggy Method]
public static void main(String[] args) throws Exception {
    CaseFrame.createRuleCaseFrame();
    Relation[] relations = new Relation[18];
    for (int i = 0; i < relations.length; i += 2) {
        relations[i] = Network.defineRelation((char) ('A' + i / 2) + "1", "Infimum", "none", 1);
        relations[i + 1] = Network.defineRelation((char) ('A' + i / 2) + "2", "Infimum", "none", 1);
    }
    VariableNode[] varNodes = getVarNodes(10);
    ArrayList<LinkedList<RCFP>> relationsProperties = getRelProp(relations);
    CaseFrame[] caseFrames = getCaseFrames(relationsProperties);
    NodeWithVar[] antNodesTemp = buildNodes(varNodes, relations, caseFrames);
    MolecularNode consequentNode = buildConsequent(varNodes);
    System.out.println("Relations: " + Arrays.toString(relations));
    System.out.println("Variable Nodes: " + Arrays.toString(varNodes));
    System.out.println("Antecedent Nodes: " + Arrays.toString(antNodesTemp));
    System.out.println("Consequent Node: " + consequentNode);
    getAndNode(antNodesTemp, consequentNode);
    NodeSet nodeSet = new NodeSet();
    for (NodeWithVar mn : antNodesTemp) nodeSet.addNode((Node) mn);
    PTree tree = new PTree(null);
    tree.buildTree(nodeSet);
    for (PSubTree subTree : tree.getSubTrees()) {
        System.out.println("====================================");
        System.out.println("A PSubTree:");
        subTree.printTreePatterns();
    }
    System.out.println("====================================");
    RuleUseInfo rui = getRui((Node) antNodesTemp[0]);
    RuleUseInfoSet ruis = tree.insert(rui);
    System.out.println(ruis.cardinality());
}

[Buggy Hunk]
RuleUseInfoSet ruis = tree.insert(rui);

[Patch]
RuleUseInfoSet ruis = tree.insertRUI(rui);

[Demonstration 2]

[Buggy Method]
public void testAddRemoveGetChangeListener() {
    brm.removeChangeListener(listener);
    SimpleChangeListener listener1 = new SimpleChangeListener("first");
    SimpleChangeListener listener2 = new SimpleChangeListener("second");
    SimpleChangeListener listener3 = new SimpleChangeListener("third");
    ChangeListener[] changeListsners = brm.getChangeListeners();
    ChangeListener[] listeners = brm.getListeners(ChangeListener.class);
    assertNotNull(changeListsners);
    assertNotNull(listeners);
    assertEquals(0, changeListsners.length);
    assertEquals(0, listeners.length);
    brm.addChangeListener(listener1);
    changeListsners = brm.getChangeListeners();
    listeners = brm.getListeners(ChangeListener.class);
    assertEquals(1, changeListsners.length);
    assertEquals(1, listeners.length);
    assertEquals(changeListsners[0], listener1);
    brm.addChangeListener(listener2);
    changeListsners = brm.getChangeListeners();
    listeners = brm.getListeners(ChangeListener.class);
    assertEquals(2, changeListsners.length);
    assertEquals(2, listeners.length);
    assertEquals(changeListsners[0], listener2);
    assertEquals(changeListsners[1], listener1);
    brm.addChangeListener(listener3);
    changeListsners = brm.getChangeListeners();
    listeners = brm.getListeners(ChangeListener.class);
    assertEquals(3, changeListsners.length);
    assertEquals(3, listeners.length);
    assertEquals(changeListsners[0], listener3);
    assertEquals(changeListsners[1], listener2);
    assertEquals(changeListsners[2], listener1);
    listeners = brm.listenerList.getListeners(ChangeListener.class);
    assertEquals(3, listeners.length);
    assertEquals(listeners[0], listener3);
    assertEquals(listeners[1], listener2);
    assertEquals(listeners[2], listener1);
    brm.removeChangeListener(listener3);
    changeListsners = brm.getChangeListeners();
    listeners = brm.getListeners(ChangeListener.class);
    assertEquals(2, changeListsners.length);
    assertEquals(2, listeners.length);
    assertEquals(changeListsners[0], listener2);
    assertEquals(changeListsners[1], listener1);
    brm.removeChangeListener(listener1);
    changeListsners = brm.getChangeListeners();
    listeners = brm.getListeners(ChangeListener.class);
    assertEquals(1, changeListsners.length);
    assertEquals(1, listeners.length);
    assertEquals(changeListsners[0], listener2);
    brm.removeChangeListener(listener2);
    changeListsners = brm.getChangeListeners();
    listeners = brm.getListeners(ChangeListener.class);
    assertEquals(0, changeListsners.length);
    assertEquals(0, listeners.length);
}

[Buggy Hunk]
listeners = brm.listenerList.getListeners(ChangeListener.class);

[Patch]
listeners = brm.getListeners(ChangeListener.class);

[Demonstration 3]

[Buggy Method]
public static void loadModel(RuleBase ruleBase, KnowledgeBase knowledgeBase) {
    getCurrentRuleLoader().load(ruleBase, knowledgeBase);
}

[Buggy Hunk]
getCurrentRuleLoader().load(ruleBase, knowledgeBase);

[Patch]
currentLoader.load(ruleBase, knowledgeBase);