e0d0d77ccbf4665b0c2f60dfcb77e42d49ad02e6
[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 boolean inverted() {
11         return setexpr.inverted();
12     }
13
14
15     public InclusionPredicate(Expr expr, SetExpr setexpr) {
16         if (expr == null) {
17             throw new NullPointerException();
18         }
19
20         if (setexpr == null) {
21             throw new NullPointerException();
22         }
23
24         this.expr = expr;
25         this.setexpr = setexpr;
26     }
27
28     public Set getRequiredDescriptors() {
29         Set v = expr.getRequiredDescriptors();
30         v.addAll(setexpr.getRequiredDescriptors());
31         return v;
32     }
33
34     public void generate(CodeWriter writer, VarDescriptor dest) {
35         VarDescriptor var = VarDescriptor.makeNew("exprval");
36         expr.generate(writer, var);
37         setexpr.generate_inclusion(writer, dest, var);
38     }
39
40     public Set getInversedRelations() {
41
42         throw new IRException("unsupported");
43
44         //Set set = setexpr.getInversedRelations();
45         //set.addAll(expr.getInversedRelations());
46         //return set;
47     }
48
49     public Descriptor getDescriptor() {
50         if (setexpr instanceof ImageSetExpr) {
51             return ((ImageSetExpr)setexpr).getRelation();
52         } else
53             return setexpr.sd;
54     }
55
56     public int[] getRepairs(boolean negated) {
57         if (setexpr instanceof ImageSetExpr) {
58             if (negated)
59                 return new int[] {AbstractRepair.REMOVEFROMRELATION};
60             else
61                 return new int[] {AbstractRepair.ADDTORELATION};
62         } else {
63             if (negated)
64                 return new int[] {AbstractRepair.REMOVEFROMSET};
65             else
66                 return new int[] {AbstractRepair.ADDTOSET};
67         }
68     }
69 }
70     
71