5 public class ClassDescriptor extends Descriptor {
6 private static int UIDCount=1; // start from 1 instead of 0 for multicore gc
7 private final int classid;
9 ClassDescriptor superdesc;
10 boolean hasFlags=false;
20 public ClassDescriptor(String classname) {
24 public ClassDescriptor(String packagename, String classname) {
27 flags=new SymbolTable();
28 fields=new SymbolTable();
29 fieldvec=new Vector();
30 methods=new SymbolTable();
32 this.packagename=packagename;
39 public Iterator getMethods() {
40 return methods.getDescriptorsIterator();
43 public Iterator getFields() {
44 return fields.getDescriptorsIterator();
47 public Iterator getFlags() {
48 return flags.getDescriptorsIterator();
51 public SymbolTable getFieldTable() {
55 public Vector getFieldVec() {
59 public SymbolTable getFlagTable() {
63 public SymbolTable getMethodTable() {
67 public String getSafeDescriptor() {
68 return "L"+safename.replace('.','/');
71 public String printTree(State state) {
73 String st=modifiers.toString()+"class "+getSymbol();
75 st+="extends "+superclass.toString();
77 indent=TreeNode.INDENT;
78 boolean printcr=false;
80 for(Iterator it=getFlags(); it.hasNext();) {
81 FlagDescriptor fd=(FlagDescriptor)it.next();
82 st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
90 for(Iterator it=getFields(); it.hasNext();) {
91 FieldDescriptor fd=(FieldDescriptor)it.next();
92 st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
98 for(Iterator it=getMethods(); it.hasNext();) {
99 MethodDescriptor md=(MethodDescriptor)it.next();
100 st+=TreeNode.printSpace(indent)+md.toString()+" ";
101 BlockNode bn=state.getMethodBody(md);
102 st+=bn.printNode(indent)+"\n\n";
108 public void addFlag(FlagDescriptor fd) {
109 if (flags.contains(fd.getSymbol()))
110 throw new Error(fd.getSymbol()+" already defined");
115 public boolean hasFlags() {
116 return hasFlags||getSuperDesc()!=null&&getSuperDesc().hasFlags();
119 public void addField(FieldDescriptor fd) {
120 if (fields.contains(fd.getSymbol()))
121 throw new Error(fd.getSymbol()+" already defined");
126 public void addMethod(MethodDescriptor md) {
130 public void setModifiers(Modifiers modifiers) {
131 this.modifiers=modifiers;
134 public void setSuper(String superclass) {
135 this.superclass=superclass;
138 public ClassDescriptor getSuperDesc() {
142 public void setSuper(ClassDescriptor scd) {
146 public String getSuper() {