-
- AbstractRepair ar=tn2.getAbstract();
- DNFPredicate dpred=ar.getPredicate();
- Set repairnodes=(Set)termination.predtoabstractmap.get(dpred);
- if (repairnodes.size()>1&&
- containsmodify(repairnodes)) {
- /* We are modifying a relation */
- HashSet retainednodes=new HashSet();
- retainednodes.addAll(repairnodes);
- retainednodes.retainAll(nodes);
-
- if (ar.getType()==AbstractRepair.MODIFYRELATION) {
- if (updateset.size()==0) {
- if (retainednodes.size()>1) {
- mustremove.add(gn);
- change=true;
- } else return null; /* Out of luck */
- }
- if (updateset.size()==1&&retainednodes.size()==1)
- toremove.addAll(updateset); /* Required update */
- } else {
- /* Addition or removal to relation */
- assert (ar.getType()==AbstractRepair.ADDTORELATION)||(ar.getType()==AbstractRepair.REMOVEFROMRELATION);
- if (updateset.size()==0) {
- if (containsmodify(retainednodes)) {
- /* Both ADD & REMOVE are no good */
- for(Iterator it=retainednodes.iterator();it.hasNext();) {
- GraphNode gnit=(GraphNode)it.next();
- TermNode tnit=(TermNode)gnit.getOwner();
- AbstractRepair arit=tnit.getAbstract();
- if (arit.getType()!=AbstractRepair.MODIFYRELATION) {
- mustremove.add(gnit);
- change=true;
- }
- }
- } else
- return null; /* Out of luck */
- }
- if (updateset.size()==1&&retainednodes.size()==2)
- toremove.addAll(updateset); /* Required update */
- }
- } else if (updateset.size()==1)