133 protected void handleClass(String line) { 134 StringTokenizer st = new StringTokenizer(line); 135 st.nextToken(); // ignore "class" 136 if (st.hasMoreTokens()) { 137 String className = st.nextToken(); 138 InstanceKlass klass = SystemDictionaryHelper.findInstanceKlass(className); 139 if (klass == null) { 140 out.println("class " + className + " not found"); 141 } else { 142 // klass.iterate(new OopPrinter(out), true); 143 144 // base class 145 InstanceKlass base = (InstanceKlass) klass.getSuper(); 146 if (base != null) { 147 out.println("super"); 148 out.print("\t"); 149 out.println(base.getName().asString().replace('/', '.')); 150 } 151 152 // list immediate fields only 153 TypeArray fields = klass.getFields(); 154 int numFields = (int) fields.getLength(); 155 ConstantPool cp = klass.getConstants(); 156 out.println("fields"); 157 if (numFields != 0) { 158 for (int f = 0; f < numFields; f += InstanceKlass.NEXT_OFFSET) { 159 int nameIndex = fields.getShortAt(f + InstanceKlass.NAME_INDEX_OFFSET); 160 int sigIndex = fields.getShortAt(f + InstanceKlass.SIGNATURE_INDEX_OFFSET); 161 Symbol f_name = cp.getSymbolAt(nameIndex); 162 Symbol f_sig = cp.getSymbolAt(sigIndex); 163 StringBuffer sigBuf = new StringBuffer(); 164 new SignatureConverter(f_sig, sigBuf).dispatchField(); 165 out.print('\t'); 166 out.print(sigBuf.toString().replace('/', '.')); 167 out.print(' '); 168 out.println(f_name.asString()); 169 } 170 } else { 171 out.println("\tno fields in this class"); 172 } 173 } 174 } else { 175 out.println("usage: class <name of the class>"); 176 } 177 } 178 179 protected Oop getOopAtAddress(Address addr) { 180 OopHandle oopHandle = addr.addOffsetToAsOopHandle(0); 181 return VM.getVM().getObjectHeap().newOop(oopHandle); 182 } | 133 protected void handleClass(String line) { 134 StringTokenizer st = new StringTokenizer(line); 135 st.nextToken(); // ignore "class" 136 if (st.hasMoreTokens()) { 137 String className = st.nextToken(); 138 InstanceKlass klass = SystemDictionaryHelper.findInstanceKlass(className); 139 if (klass == null) { 140 out.println("class " + className + " not found"); 141 } else { 142 // klass.iterate(new OopPrinter(out), true); 143 144 // base class 145 InstanceKlass base = (InstanceKlass) klass.getSuper(); 146 if (base != null) { 147 out.println("super"); 148 out.print("\t"); 149 out.println(base.getName().asString().replace('/', '.')); 150 } 151 152 // list immediate fields only 153 int numFields = klass.getJavaFieldsCount(); 154 ConstantPool cp = klass.getConstants(); 155 out.println("fields"); 156 if (numFields != 0) { 157 for (int f = 0; f < numFields; f++){ 158 Symbol f_name = klass.getFieldName(f); 159 Symbol f_sig = klass.getFieldSignature(f); 160 StringBuffer sigBuf = new StringBuffer(); 161 new SignatureConverter(f_sig, sigBuf).dispatchField(); 162 out.print('\t'); 163 out.print(sigBuf.toString().replace('/', '.')); 164 out.print(' '); 165 out.println(f_name.asString()); 166 } 167 } else { 168 out.println("\tno fields in this class"); 169 } 170 } 171 } else { 172 out.println("usage: class <name of the class>"); 173 } 174 } 175 176 protected Oop getOopAtAddress(Address addr) { 177 OopHandle oopHandle = addr.addOffsetToAsOopHandle(0); 178 return VM.getVM().getObjectHeap().newOop(oopHandle); 179 } |