Main Page   Packages   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

PredicateSet.java

00001 package edu.ksu.cis.bandera.specification.predicate.datastructure;
00002 
00003 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
00004  * Bandera, a Java(TM) analysis and transformation toolkit           *
00005  * Copyright (C) 2000   Robby (robby@cis.ksu.edu)                    *
00006  * All rights reserved.                                              *
00007  *                                                                   *
00008  * This work was done as a project in the SAnToS Laboratory,         *
00009  * Department of Computing and Information Sciences, Kansas State    *
00010  * University, USA (http://www.cis.ksu.edu/santos).                  *
00011  * It is understood that any modification not identified as such is  *
00012  * not covered by the preceding statement.                           *
00013  *                                                                   *
00014  * This work is free software; you can redistribute it and/or        *
00015  * modify it under the terms of the GNU Library General Public       *
00016  * License as published by the Free Software Foundation; either      *
00017  * version 2 of the License, or (at your option) any later version.  *
00018  *                                                                   *
00019  * This work is distributed in the hope that it will be useful,      *
00020  * but WITHOUT ANY WARRANTY; without even the implied warranty of    *
00021  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU *
00022  * Library General Public License for more details.                  *
00023  *                                                                   *
00024  * You should have received a copy of the GNU Library General Public *
00025  * License along with this toolkit; if not, write to the             *
00026  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,      *
00027  * Boston, MA  02111-1307, USA.                                      *
00028  *                                                                   *
00029  * Java is a trademark of Sun Microsystems, Inc.                     *
00030  *                                                                   *
00031  * To submit a bug report, send a comment, or get the latest news on *
00032  * this project and other SAnToS projects, please visit the web-site *
00033  *                http://www.cis.ksu.edu/santos                      *
00034  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
00035 import edu.ksu.cis.bandera.annotation.*;
00036 import ca.mcgill.sable.soot.SootClass;
00037 import edu.ksu.cis.bandera.specification.predicate.exception.*;
00038 import java.util.*;
00039 import edu.ksu.cis.bandera.jjjc.symboltable.*;
00040 import edu.ksu.cis.bandera.jjjc.*;
00041 public class PredicateSet {
00042     private static Hashtable table = new Hashtable();
00043     private static Hashtable defTable = new Hashtable();
00044     private Name name;
00045     private Hashtable predTable = new Hashtable();
00046 /**
00047  * 
00048  * @param name edu.ksu.cis.bandera.jjjc.symboltable.Name
00049  */
00050 public PredicateSet(Name name) {
00051     this.name = name;
00052     table.put(name, this);
00053 }
00054 /**
00055  * 
00056  * @return java.util.TreeSet
00057  * @param key java.lang.Object
00058  */
00059 public static TreeSet getDefinedPredicates(Object key) {
00060     TreeSet set = (TreeSet) defTable.get(key);
00061     if (set == null) {
00062         set = new TreeSet();
00063     }
00064     return set;
00065 }
00066 /**
00067  * 
00068  * @return edu.ksu.cis.bandera.jjjc.symboltable.Name
00069  */
00070 public Name getName() {
00071     return name;
00072 }
00073 /**
00074  * 
00075  * @return edu.ksu.cis.bandera.predicate.datastructure.Predicate
00076  * @param name edu.ksu.cis.bandera.jjjc.symboltable.Name
00077  */
00078 public static Predicate getPredicate(Name name) throws PredicateNotDeclaredException {
00079     try {
00080         PredicateSet ps = getPredicateSet(name.getSuperName());
00081         Predicate p = (Predicate) ps.predTable.get(name);
00082         if (p == null) {
00083             throw new PredicateNotDeclaredException("Predicate named '" + name + "' is not declared");
00084         } else return p;
00085     } catch (PredicateSetNotDeclaredException psnde) {
00086         throw new PredicateNotDeclaredException(psnde.getMessage());
00087     }
00088 }
00089 /**
00090  * 
00091  * @return edu.ksu.cis.bandera.predicate.datastructure.PredicateSet
00092  * @param name edu.ksu.cis.bandera.jjjc.symboltable.Name
00093  */
00094 public static PredicateSet getPredicateSet(Name name) throws PredicateSetNotDeclaredException {
00095     PredicateSet result = (PredicateSet) table.get(name);
00096     if (result == null)
00097         throw new PredicateSetNotDeclaredException("PredicateSet named '" + name + "' is not declared");
00098     return result;
00099 }
00100 /**
00101  *
00102  * @return java.util.Hashtable
00103  */
00104 public static Hashtable getPredicateSetTable() {
00105     return table;
00106 }
00107 /**
00108  * 
00109  * @return java.util.Hashtable
00110  */
00111 public java.util.Hashtable getPredicateTable() {
00112     return predTable;
00113 }
00114 /**
00115  * 
00116  * @param predicate edu.ksu.cis.bandera.predicate.datastructure.Predicate
00117  */
00118 public void putPredicate(Predicate predicate) throws DuplicatePredicateException {
00119     if (predicate instanceof ExpressionPredicate) {
00120         SootClass sc = (SootClass) CompilationManager.getCompiledClasses().get(predicate.getType().getName().toString());
00121         if (defTable.get(sc) == null) {
00122             defTable.put(sc, new TreeSet());
00123         }
00124         TreeSet ts = (TreeSet) defTable.get(sc);
00125         ts.add(predicate);
00126     } else {
00127         Annotation a = predicate.getAnnotation();
00128         if (a instanceof LabeledStmtAnnotation) {
00129             a = CompilationManager.getAnnotationManager().getMethodAnnotationContainingAnnotation(a);
00130         }
00131         if (defTable.get(a) == null) {
00132             defTable.put(a, new TreeSet());
00133         }
00134         TreeSet ts = (TreeSet) defTable.get(a);
00135         ts.add(predicate);
00136     }
00137     if (predTable.put(predicate.getName(), predicate) != null) {
00138         throw new DuplicatePredicateException("Predicate named '" + predicate.getName() + "' has already been declared");
00139     }
00140 }
00141 /**
00142  * 
00143  * @param predicateSet edu.ksu.cis.bandera.predicate.datastructure.PredicateSet
00144  */
00145 static void putPredicateSet(PredicateSet predicateSet) {
00146     table.put(predicateSet.getName(), predicateSet);
00147 }
00148 /**
00149  * 
00150  */
00151 public static void reset() {
00152     table = new Hashtable();
00153     defTable = new Hashtable();
00154 }
00155 }

Generated at Thu Feb 7 06:52:40 2002 for Bandera by doxygen1.2.10 written by Dimitri van Heesch, © 1997-2001