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.soot.*;
00039 import ca.mcgill.sable.util.*;
00040 import java.util.*;
00041 public class LocalDeclarationStmtAnnotation extends SequentialAnnotation {
00042 private Hashtable declaredLocals = new Hashtable();
00043 private Type type;
00044 private int modifiers = 0;
00045
00046
00047
00048
00049 public LocalDeclarationStmtAnnotation(edu.ksu.cis.bandera.jjjc.node.Node node) {
00050 super(node);
00051 }
00052
00053
00054
00055
00056
00057 public void addDeclaredLocal(String actualName, Local local) {
00058 declaredLocals.put(actualName, local);
00059 }
00060 public void apply(Switch sw)
00061 {
00062 ((AnnotationSwitch) sw).caseLocalDeclarationStmtAnnotation(this);
00063 }
00064
00065
00066
00067
00068 public Object clone() {
00069 LocalDeclarationStmtAnnotation result = new LocalDeclarationStmtAnnotation((Node) node.clone());
00070
00071
00072
00073
00074
00075
00076
00077 return result;
00078 }
00079
00080
00081
00082
00083 public Hashtable getDeclaredLocals() {
00084 return declaredLocals;
00085 }
00086
00087
00088
00089
00090 public int getModifiers() {
00091 return modifiers;
00092 }
00093
00094
00095
00096
00097 public Type getType() {
00098 return type;
00099 }
00100
00101
00102
00103
00104 public void setModifiers(int modifiers) {
00105 this.modifiers = modifiers;
00106 }
00107
00108
00109
00110
00111 public void setType(Type type) {
00112 this.type = type;
00113 }
00114
00115
00116
00117
00118 public void validate(JimpleBody body) {
00119 super.validate(body);
00120 for (Enumeration e = declaredLocals.keys(); e.hasMoreElements();) {
00121 String actualName = (String) e.nextElement();
00122 String jimpleName = ((Local) declaredLocals.get(actualName)).getName().trim();
00123 if (!body.declaresLocal(jimpleName)) {
00124 declaredLocals.remove(actualName);
00125 }
00126 }
00127 }
00128 }