26b9f4a2f8b412c7fbd930bf951476b14b606123
[repair.git] / Repair / RepairCompiler / MCC / IR / InclusionPredicate.java
1 package MCC.IR;
2
3 import java.util.*;
4
5 public class InclusionPredicate extends Predicate {
6
7     Expr expr;
8     SetExpr setexpr;
9
10     public InclusionPredicate(Expr expr, SetExpr setexpr) {
11         if (expr == null) {
12             throw new NullPointerException();
13         }
14
15         if (setexpr == null) {
16             throw new NullPointerException();
17         }
18
19         this.expr = expr;
20         this.setexpr = setexpr;
21     }
22
23     public Set getRequiredDescriptors() {
24         Set v = expr.getRequiredDescriptors();
25         v.addAll(setexpr.getRequiredDescriptors());
26         return v;
27     }
28
29     public void generate(CodeWriter writer, VarDescriptor dest) {
30         VarDescriptor var = VarDescriptor.makeNew("exprval");
31         expr.generate(writer, var);
32         setexpr.generate_inclusion(writer, dest, var);
33     }
34
35     public Set getInversedRelations() {
36
37         throw new IRException("unsupported");
38
39         //Set set = setexpr.getInversedRelations();
40         //set.addAll(expr.getInversedRelations());
41         //return set;
42     }
43
44     public int[] getRepairs(boolean negated) {
45         if (setexpr instanceof ImageSetExpr) {
46             if (negated)
47                 return new int[] {AbstractRepair.REMOVEFROMRELATION};
48             else
49                 return new int[] {AbstractRepair.ADDTORELATION};
50         } else {
51             if (negated)
52                 return new int[] {AbstractRepair.REMOVEFROMSET};
53             else
54                 return new int[] {AbstractRepair.ADDTOSET};
55         }
56     }
57 }
58