/* Intersection -- Automatically generated by TreeBuilder (2024-10-27T16:48Z) */ package de.uni_freiburg.informatik.ultimate.crocotta.ast; import java.util.List; import java.util.Arrays; import java.util.ArrayList; /** * Represents a intersection which is a special form of a language expression. */ public class Intersection extends LanguageExpression { private static final long serialVersionUID = 1L; private static final java.util.function.Predicate VALIDATOR = CrocottaQuery.VALIDATORS.get(Intersection.class); /** * The expr of this intersection. */ LanguageExpression[] expr; /** * The constructor taking initial values. * @param expr the expr of this intersection. */ public Intersection(LanguageExpression[] expr) { super(); this.expr = expr; assert VALIDATOR == null || VALIDATOR.test(this) : "Invalid Intersection: " + this; } /** * Returns a textual description of this object. */ public String toString() { StringBuffer sb = new StringBuffer(); sb.append("Intersection").append('['); if (expr == null) { sb.append("null"); } else { sb.append('['); for(int i1 = 0; i1 < expr.length; i1++) { if (i1 > 0) sb.append(','); sb.append(expr[i1]); } sb.append(']'); } return sb.append(']').toString(); } /** * Gets the expr of this intersection. * @return the expr of this intersection. */ public LanguageExpression[] getExpr() { return expr; } public List getOutgoingNodes() { List children = super.getOutgoingNodes(); if(expr!=null){ children.addAll(Arrays.asList(expr)); } return children; } public void accept(CrocottaAstVisitor visitor) { if (visitor.visit((LanguageExpression)this)) { //visit parent types higher up if necessary } else { return; } if (visitor.visit(this)) { if(expr!=null){ for (LanguageExpression elem : expr) { elem.accept(visitor); } } } } public LanguageExpression accept(CrocottaAstTransformer visitor) { LanguageExpression node = visitor.transform(this); if(node != this){ return node; } boolean isChanged=false; ArrayList tmpListnewexpr = new ArrayList<>(); if(expr != null){ for(LanguageExpression elem : expr){ LanguageExpression newexpr = (LanguageExpression)elem.accept(visitor); isChanged = isChanged || newexpr != elem; tmpListnewexpr.add(newexpr); } } if(isChanged){ return new Intersection(tmpListnewexpr.toArray(new LanguageExpression[0])); } return this; } }