+ if (ar.getDescriptor()==dp.getPredicate().getDescriptor()&&
+
+ (ar.getType()==AbstractRepair.MODIFYRELATION)&&
+ (dp.getPredicate() instanceof ExprPredicate)&&
+ (dp.getPredicate().inverted()==ar.getPredicate().getPredicate().inverted())&&
+ (((ExprPredicate)dp.getPredicate()).getType()==ExprPredicate.COMPARISON)) {
+
+ boolean neg1=ar.getPredicate().isNegated();
+ Opcode op1=((ExprPredicate)ar.getPredicate().getPredicate()).getOp();
+ boolean isInt1=((ExprPredicate)ar.getPredicate().getPredicate()).isRightInt();
+ int size1=isInt1?((ExprPredicate)ar.getPredicate().getPredicate()).rightSize():0;
+ Expr expr1=((OpExpr)((ExprPredicate)ar.getPredicate().getPredicate()).expr).right;
+
+
+ boolean neg2=dp.isNegated();
+ Opcode op2=((ExprPredicate)dp.getPredicate()).getOp();
+ boolean isInt2=((ExprPredicate)dp.getPredicate()).isRightInt();
+ int size2=isInt2?((ExprPredicate)dp.getPredicate()).rightSize():0;
+ Expr expr2=((OpExpr)((ExprPredicate)ar.getPredicate().getPredicate()).expr).right;
+
+ /* Translate the opcodes */
+ op1=translateOpcode(neg1,op1);
+ op2=translateOpcode(neg2,op2);
+
+ /* Obvious cases which can't interfere */
+ if (((op1==Opcode.GT)||
+ (op1==Opcode.GE))&&
+ ((op2==Opcode.GT)||
+ (op2==Opcode.GE)))
+ return false;
+
+ if (((op1==Opcode.LT)||
+ (op1==Opcode.LE))&&
+ ((op2==Opcode.LT)||
+ (op2==Opcode.LE)))
+ return false;
+
+ if (isInt1&&isInt2) {
+ if (((op1==Opcode.EQ)||(op1==Opcode.GE)||(op1==Opcode.LE))&&
+ ((op2==Opcode.EQ)||(op2==Opcode.GE)||(op2==Opcode.LE))&&
+ size1==size2)
+ return false;
+ int size1a=size1;
+ int size2a=size2;
+ if (op1==Opcode.GT)
+ size1a++;
+ if (op1==Opcode.LT)
+ size1a--;
+ if (op1==Opcode.NE)
+ size1a++; /*FLAGNE this is current behavior for NE repairs */
+
+ if (op2==Opcode.GT)
+ size2a++;
+ if (op2==Opcode.LT)
+ size2a--;
+
+ if (((op1==Opcode.GE)||(op1==Opcode.GT))&&
+ ((op2==Opcode.LE)||(op2==Opcode.EQ)||(op2==Opcode.LT))&&
+ (size1a<=size2a))
+ return false;
+
+ if (((op1==Opcode.LE)||(op1==Opcode.LT))&&
+ ((op2==Opcode.GE)||(op2==Opcode.EQ)||(op2==Opcode.GT))&&
+ (size1a>=size2a))
+ return false;
+
+ if ((op1==Opcode.EQ)&&(op2==Opcode.EQ)&&
+ (size1a==size2a))
+ return false;
+
+ if ((op1==Opcode.EQ)&&
+ ((op2==Opcode.LE)||(op2==Opcode.LT))&&
+ (size1a<=size2a))
+ return false;
+
+ if ((op1==Opcode.EQ)&&
+ ((op2==Opcode.GE)||(op2==Opcode.GT))&&
+ (size1a>=size2a))
+ return false;
+
+ if (op2==Opcode.NE) /*FLAGNE this is current behavior for NE repairs */
+ if (size1a!=size2)
+ return false;
+
+ if ((op1==Opcode.NE)&&
+ (op2==Opcode.EQ)&&
+ (size1!=size2))
+ return false;
+
+ if ((op1==Opcode.NE)&& /* FLAGNE relies on increasing or decreasing by 1 */
+ ((op2==Opcode.GT)||(op2==Opcode.GE))&&
+ (size1!=size2a))
+ return false;
+
+ if ((op1==Opcode.NE)&& /* FLAGNE relies on increasing or decreasing by 1 */
+ ((op2==Opcode.LT)||(op2==Opcode.LE))&&
+ (size1!=size2a))
+ return false;
+ }
+ }
+