/* LoopAnnot -- Automatically generated by TreeBuilder (2024-10-27T16:47Z) */ package de.uni_freiburg.informatik.ultimate.model.acsl.ast; import java.util.List; import java.util.Arrays; import java.util.ArrayList; import de.uni_freiburg.informatik.ultimate.model.acsl.ACSLNode; /** * LoopAnnotation * TODO: Not sure if this works properly. Because a LoopAnnotation * can be mixed up with behaviours and loop statements. Multiple Inheritance * seems to be better, but does not work with ASTBuilder. */ public class LoopAnnot extends ACSLNode { private static final java.util.function.Predicate VALIDATOR = ACSLNode.VALIDATORS.get(LoopAnnot.class); /** * The loop behavior of this loop annot. */ LoopForBehavior[] loopBehavior; /** * The loop stmt of this loop annot. */ LoopStatement[] loopStmt; /** * The constructor taking initial values. * @param loopBehavior the loop behavior of this loop annot. * @param loopStmt the loop stmt of this loop annot. */ public LoopAnnot(LoopForBehavior[] loopBehavior, LoopStatement[] loopStmt) { super(); this.loopBehavior = loopBehavior; this.loopStmt = loopStmt; assert VALIDATOR == null || VALIDATOR.test(this) : "Invalid LoopAnnot: " + this; } /** * Returns a textual description of this object. */ public String toString() { StringBuffer sb = new StringBuffer(); sb.append("LoopAnnot").append('['); if (loopBehavior == null) { sb.append("null"); } else { sb.append('['); for(int i1 = 0; i1 < loopBehavior.length; i1++) { if (i1 > 0) sb.append(','); sb.append(loopBehavior[i1]); } sb.append(']'); } sb.append(','); if (loopStmt == null) { sb.append("null"); } else { sb.append('['); for(int i1 = 0; i1 < loopStmt.length; i1++) { if (i1 > 0) sb.append(','); sb.append(loopStmt[i1]); } sb.append(']'); } return sb.append(']').toString(); } /** * Gets the loop behavior of this loop annot. * @return the loop behavior of this loop annot. */ public LoopForBehavior[] getLoopBehavior() { return loopBehavior; } /** * Gets the loop stmt of this loop annot. * @return the loop stmt of this loop annot. */ public LoopStatement[] getLoopStmt() { return loopStmt; } public List getOutgoingNodes() { List children = super.getOutgoingNodes(); if(loopBehavior!=null){ children.addAll(Arrays.asList(loopBehavior)); } if(loopStmt!=null){ children.addAll(Arrays.asList(loopStmt)); } return children; } public void accept(ACSLVisitor visitor) { if (visitor.visit(this)) { if(loopBehavior!=null){ for (LoopForBehavior elem : loopBehavior) { elem.accept(visitor); } } if(loopStmt!=null){ for (LoopStatement elem : loopStmt) { elem.accept(visitor); } } } } public LoopAnnot accept(ACSLTransformer visitor) { LoopAnnot node = visitor.transform(this); if(node != this){ return node; } boolean isChanged=false; ArrayList tmpListnewloopBehavior = new ArrayList<>(); if(loopBehavior != null){ for(LoopForBehavior elem : loopBehavior){ LoopForBehavior newloopBehavior = (LoopForBehavior)elem.accept(visitor); isChanged = isChanged || newloopBehavior != elem; tmpListnewloopBehavior.add(newloopBehavior); } } ArrayList tmpListnewloopStmt = new ArrayList<>(); if(loopStmt != null){ for(LoopStatement elem : loopStmt){ LoopStatement newloopStmt = (LoopStatement)elem.accept(visitor); isChanged = isChanged || newloopStmt != elem; tmpListnewloopStmt.add(newloopStmt); } } if(isChanged){ return new LoopAnnot(tmpListnewloopBehavior.toArray(new LoopForBehavior[0]), tmpListnewloopStmt.toArray(new LoopStatement[0])); } return this; } }