5 public class ClassDescriptor extends Descriptor {
6 public ClassDescriptor(String classname) {
9 flags=new SymbolTable();
10 fields=new SymbolTable();
11 methods=new SymbolTable();
14 private static int UIDCount=0;
15 private final int classid;
17 ClassDescriptor superdesc;
29 public Iterator getMethods() {
30 return methods.getDescriptorsIterator();
33 public Iterator getFields() {
34 return fields.getDescriptorsIterator();
37 public Iterator getFlags() {
38 return flags.getDescriptorsIterator();
41 public SymbolTable getFieldTable() {
45 public SymbolTable getFlagTable() {
49 public SymbolTable getMethodTable() {
53 public String getSafeDescriptor() {
54 return "L"+safename.replace('.','/');
57 public String printTree(State state) {
59 String st=modifiers.toString()+"class "+getSymbol();
61 st+="extends "+superclass.toString();
63 indent=TreeNode.INDENT;
64 boolean printcr=false;
66 for(Iterator it=getFlags();it.hasNext();) {
67 FlagDescriptor fd=(FlagDescriptor)it.next();
68 st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
76 for(Iterator it=getFields();it.hasNext();) {
77 FieldDescriptor fd=(FieldDescriptor)it.next();
78 st+=TreeNode.printSpace(indent)+fd.toString()+"\n";
84 for(Iterator it=getMethods();it.hasNext();) {
85 MethodDescriptor md=(MethodDescriptor)it.next();
86 st+=TreeNode.printSpace(indent)+md.toString()+" ";
87 BlockNode bn=state.getMethodBody(md);
88 st+=bn.printNode(indent)+"\n\n";
94 public void addFlag(FlagDescriptor fd) {
95 if (flags.contains(fd.getSymbol()))
96 throw new Error(fd.getSymbol()+" already defined");
100 public void addField(FieldDescriptor fd) {
101 if (fields.contains(fd.getSymbol()))
102 throw new Error(fd.getSymbol()+" already defined");
106 public void addMethod(MethodDescriptor md) {
110 public void setModifiers(Modifiers modifiers) {
111 this.modifiers=modifiers;
114 public void setSuper(String superclass) {
115 this.superclass=superclass;
118 public ClassDescriptor getSuperDesc() {
122 public void setSuper(ClassDescriptor scd) {
126 public String getSuper() {