00001 package edu.ksu.cis.bandera.annotation;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 import edu.ksu.cis.bandera.jjjc.node.*;
00036 import edu.ksu.cis.bandera.jjjc.util.*;
00037 import ca.mcgill.sable.soot.jimple.*;
00038 import ca.mcgill.sable.util.*;
00039 import java.util.*;
00040 public class DoWhileStmtAnnotation extends ControlFlowAnnotation {
00041
00042
00043
00044
00045 public DoWhileStmtAnnotation(Node node) {
00046 super(node);
00047 }
00048 public void apply(Switch sw)
00049 {
00050 ((AnnotationSwitch) sw).caseDoWhileStmtAnnotation(this);
00051 }
00052
00053
00054
00055
00056 public Object clone() {
00057 DoWhileStmtAnnotation result = new DoWhileStmtAnnotation((Node) node.clone());
00058
00059
00060
00061
00062
00063
00064
00065
00066 if (blockAnnotation != null) result.setBlockAnnotation((Annotation) blockAnnotation.clone());
00067 result.setIndefinite(indefinite);
00068 return result;
00069 }
00070
00071
00072
00073
00074
00075 public Vector getAllAnnotations(boolean includeSequential) {
00076 Vector result = new Vector();
00077 result.addElement(this);
00078 for (Enumeration e = blockAnnotation.getAllAnnotations(includeSequential).elements(); e.hasMoreElements();) {
00079 result.addElement(e.nextElement());
00080 }
00081 return result;
00082 }
00083
00084
00085
00086
00087 public Stmt getBackpointStmt() {
00088 int size = getNumOfStatements();
00089 if (size > 0)
00090 return getStmtAt(size - 1);
00091 else
00092 return null;
00093 }
00094
00095
00096
00097
00098 public Stmt[] getStatements() {
00099 Stmt[] stmts = (blockAnnotation != null) ? blockAnnotation.getStatements() : new Stmt[0];
00100
00101 Stmt[] testStmts = super.toArray();
00102
00103 Stmt[] result = new Stmt[stmts.length + testStmts.length];
00104
00105 for (int i = 0; i < stmts.length; i++) {
00106 result[i] = stmts[i];
00107 }
00108
00109 for (int i = 0; i < testStmts.length; i++) {
00110 result[i + stmts.length] = testStmts[i];
00111 }
00112
00113 return result;
00114 }
00115
00116
00117
00118
00119 public String toString() {
00120 return (blockAnnotation == null) ?
00121 "do while (" + ((ADoStmt) node).getExp().toString().trim() + ")"
00122 : "do ... while (" + ((ADoStmt) node).getExp().toString().trim() + ")";
00123 }
00124 }