5 public class InclusionPredicate extends Predicate {
10 public boolean inverted() {
11 return setexpr.inverted();
14 public String name() {
15 return expr.name() + " in "+setexpr.name();
18 public InclusionPredicate(Expr expr, SetExpr setexpr) {
20 throw new NullPointerException();
23 if (setexpr == null) {
24 throw new NullPointerException();
28 this.setexpr = setexpr;
31 public Set getRequiredDescriptors() {
32 Set v = expr.getRequiredDescriptors();
33 v.addAll(setexpr.getRequiredDescriptors());
37 public void generate(CodeWriter writer, VarDescriptor dest) {
38 VarDescriptor var = VarDescriptor.makeNew("exprval");
39 expr.generate(writer, var);
40 setexpr.generate_inclusion(writer, dest, var);
43 public Set getInversedRelations() {
45 throw new IRException("unsupported");
47 //Set set = setexpr.getInversedRelations();
48 //set.addAll(expr.getInversedRelations());
52 public Descriptor getDescriptor() {
53 if (setexpr instanceof ImageSetExpr) {
54 return ((ImageSetExpr)setexpr).getRelation();
59 public int[] getRepairs(boolean negated) {
60 if (setexpr instanceof ImageSetExpr) {
62 return new int[] {AbstractRepair.REMOVEFROMRELATION};
64 return new int[] {AbstractRepair.ADDTORELATION};
67 return new int[] {AbstractRepair.REMOVEFROMSET};
69 return new int[] {AbstractRepair.ADDTOSET};