00001 package edu.ksu.cis.bandera.specification.assertion.datastructure;
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.annotation.*;
00036 import edu.ksu.cis.bandera.specification.assertion.exception.*;
00037 import java.util.*;
00038 import edu.ksu.cis.bandera.jjjc.*;
00039 import edu.ksu.cis.bandera.jjjc.symboltable.*;
00040 public class AssertionSet {
00041 private static Hashtable table = new Hashtable();
00042 private static Hashtable defTable = new Hashtable();
00043 private Name name;
00044 private Hashtable assertionTable = new Hashtable();
00045
00046
00047
00048
00049 public AssertionSet(Name name) {
00050 this.name = name;
00051 table.put(name, this);
00052 }
00053
00054
00055
00056
00057
00058 public static Assertion getAssertion(Name name) throws AssertionNotDeclaredException {
00059 try {
00060 AssertionSet as = getAssertionSet(name.getSuperName());
00061 Assertion a = (Assertion) as.assertionTable.get(name);
00062 if (a == null) {
00063 throw new AssertionNotDeclaredException("Assertion named '" + name + "' is not declared");
00064 } else return a;
00065 } catch (AssertionSetNotDeclaredException asnde) {
00066 throw new AssertionNotDeclaredException(asnde.getMessage());
00067 }
00068 }
00069
00070
00071
00072
00073
00074 public static AssertionSet getAssertionSet(Name name) throws AssertionSetNotDeclaredException {
00075 AssertionSet result = (AssertionSet) table.get(name);
00076 if (result == null)
00077 throw new AssertionSetNotDeclaredException("AssertionSet named '" + name + "' is not declared");
00078 return result;
00079 }
00080
00081
00082
00083
00084 public static Hashtable getAssertionSetTable() {
00085 return table;
00086 }
00087
00088
00089
00090
00091 public java.util.Hashtable getAssertionTable() {
00092 return assertionTable;
00093 }
00094
00095
00096
00097
00098
00099 public static TreeSet getDefinedAssertions(Object key) {
00100 TreeSet set = (TreeSet) defTable.get(key);
00101 if (set == null) {
00102 set = new TreeSet();
00103 }
00104 return set;
00105 }
00106
00107
00108
00109
00110 public Name getName() {
00111 return name;
00112 }
00113
00114
00115
00116
00117 public void putAssertion(Assertion assertion) throws DuplicateAssertionException {
00118 Annotation a = assertion.getAnnotation();
00119 if (a instanceof LabeledStmtAnnotation) {
00120 a = CompilationManager.getAnnotationManager().getMethodAnnotationContainingAnnotation(a);
00121 }
00122 if (defTable.get(a) == null) {
00123 defTable.put(a, new TreeSet());
00124 }
00125 TreeSet ts = (TreeSet) defTable.get(a);
00126 ts.add(assertion);
00127 if (assertionTable.put(assertion.getName(), assertion) != null) {
00128 throw new DuplicateAssertionException("Assertion named '" + assertion.getName() + "' has already been declared");
00129 }
00130 }
00131
00132
00133
00134
00135 static void putAssertionSet(AssertionSet assertionSet) {
00136 table.put(assertionSet.getName(), assertionSet);
00137 }
00138
00139
00140
00141 public static void reset() {
00142 table = new Hashtable();
00143 defTable = new Hashtable();
00144 }
00145 }