package org.jmlspecs.openjml.esc;
import java.util.LinkedList;
import org.jmlspecs.annotation.*;
import org.jmlspecs.openjml.JmlSpecs;
import org.jmlspecs.openjml.JmlTree.JmlTypeClauseConstraint;
import org.jmlspecs.openjml.JmlTree.JmlTypeClauseExpr;
import com.sun.tools.javac.code.Symbol.ClassSymbol;
import com.sun.tools.javac.code.Symbol.VarSymbol;
import com.sun.tools.javac.tree.JCTree.JCClassDecl;
/** This class holds specification information about a given class.
* Note that all of the expressions are in conventional (i.e. not the
* translated, basic) AST form.
* @author David Cok
*/
public class JmlClassInfo {
public JmlClassInfo(@NonNull JCClassDecl d) { this.decl = d; }
/** The source code declaration - null if no source and no specs */
@Nullable JCClassDecl decl;
/** The symbol for the class */
@NonNull ClassSymbol csym;
/** The type specifications from the specs database */
JmlSpecs.TypeSpecs typeSpecs = null; // Non-null once initialized
/** The instance constraint clauses from typeSpecs */
@NonNull public java.util.List<JmlTypeClauseConstraint> constraints = new LinkedList<JmlTypeClauseConstraint>();
/** The static constraint clauses from typeSpecs */
@NonNull public java.util.List<JmlTypeClauseConstraint> staticconstraints = new LinkedList<JmlTypeClauseConstraint>();
/** The initially clauses from typeSpecs */
@NonNull public java.util.List<JmlTypeClauseExpr> initiallys = new LinkedList<JmlTypeClauseExpr>();
/** The instance invariant clauses from typeSpecs */
@NonNull public java.util.List<JmlTypeClauseExpr> invariants = new LinkedList<JmlTypeClauseExpr>();
/** The static invariant clauses from typeSpecs */
@NonNull public java.util.List<JmlTypeClauseExpr> staticinvariants = new LinkedList<JmlTypeClauseExpr>();
/** The axiom clauses from typeSpecs */
@NonNull public java.util.List<JmlTypeClauseExpr> axioms = new LinkedList<JmlTypeClauseExpr>();
JmlClassInfo superclassInfo;
}