5 public class ClassDescriptor extends Descriptor {
6 private static int UIDCount=0;
7 private final int classid;
9 ClassDescriptor superdesc;
10 boolean hasFlags=false;
19 public ClassDescriptor(String classname) {
23 public ClassDescriptor(String packagename, String classname) {
26 flags=new SymbolTable();
27 fields=new SymbolTable();
28 methods=new SymbolTable();
30 this.packagename=packagename;
37 public Iterator getMethods() {
38 return methods.getDescriptorsIterator();
41 public Iterator getFields() {
42 return fields.getDescriptorsIterator();
45 public Iterator getFlags() {
46 return flags.getDescriptorsIterator();
49 public SymbolTable getFieldTable() {
53 public SymbolTable getFlagTable() {
57 public SymbolTable getMethodTable() {
61 public String getSafeDescriptor() {
62 return "L"+safename.replace('.','/');
65 public String printTree(State state) {
67 String st=modifiers.toString()+"class "+getSymbol();
69 st+="extends "+superclass.toString();
71 indent=TreeNode.INDENT;
72 boolean printcr=false;
74 for(Iterator it=getFlags();it.hasNext();) {
75 FlagDescriptor fd=(FlagDescriptor)it.next();
76 st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
84 for(Iterator it=getFields();it.hasNext();) {
85 FieldDescriptor fd=(FieldDescriptor)it.next();
86 st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
92 for(Iterator it=getMethods();it.hasNext();) {
93 MethodDescriptor md=(MethodDescriptor)it.next();
94 st+=TreeNode.printSpace(indent)+md.toString()+" ";
95 BlockNode bn=state.getMethodBody(md);
96 st+=bn.printNode(indent)+"\n\n";
102 public void addFlag(FlagDescriptor fd) {
103 if (flags.contains(fd.getSymbol()))
104 throw new Error(fd.getSymbol()+" already defined");
109 public boolean hasFlags() {
113 public void addField(FieldDescriptor fd) {
114 if (fields.contains(fd.getSymbol()))
115 throw new Error(fd.getSymbol()+" already defined");
119 public void addMethod(MethodDescriptor md) {
123 public void setModifiers(Modifiers modifiers) {
124 this.modifiers=modifiers;
127 public void setSuper(String superclass) {
128 this.superclass=superclass;
131 public ClassDescriptor getSuperDesc() {
135 public void setSuper(ClassDescriptor scd) {
139 public String getSuper() {