List of usage examples for org.eclipse.jdt.internal.compiler.classfmt ClassFileConstants IntegerTag
int IntegerTag
To view the source code for org.eclipse.jdt.internal.compiler.classfmt ClassFileConstants IntegerTag.
Click Source Link
From source file:org.springframework.ide.eclipse.core.java.typehierarchy.BytecodeTypeHierarchyClassReader.java
License:Open Source License
public TypeHierarchyElement readTypeHierarchy(InputStream stream) { try {/*from w w w .j a v a 2s . c om*/ DataInputStream dis = new DataInputStream(new BufferedInputStream(stream)); int magic = dis.readInt(); // magic 0xCAFEBABE if (magic != 0xCAFEBABE) { throw new IllegalStateException("not bytecode, magic was 0x" + Integer.toString(magic, 16)); } skip(dis, 4); int constantPoolCount = dis.readShort(); Object[] constantPoolData = new Object[constantPoolCount]; for (int i = 1; i < constantPoolCount; i++) { int tag = dis.readByte(); switch (tag) { case ClassFileConstants.Utf8Tag: constantPoolData[i] = dis.readUTF(); break; case ClassFileConstants.IntegerTag: skip(dis, 4); break; case ClassFileConstants.FloatTag: skip(dis, 4); break; case ClassFileConstants.LongTag: skip(dis, 8); i++; break; case ClassFileConstants.DoubleTag: skip(dis, 8); i++; break; case ClassFileConstants.ClassTag: constantPoolData[i] = dis.readShort(); break; case ClassFileConstants.StringTag: skip(dis, 2); break; case ClassFileConstants.FieldRefTag: skip(dis, 4); break; case ClassFileConstants.MethodRefTag: skip(dis, 4); break; case ClassFileConstants.InterfaceMethodRefTag: skip(dis, 4); break; case ClassFileConstants.NameAndTypeTag: skip(dis, 4); break; case 15: // ClassFileConstants.MethodHandleTag skip(dis, 3); break; case 16: // ClassFileConstants.MethodTypeTag skip(dis, 2); break; case 18: // ClassFileConstants.InvokeDynamicTag skip(dis, 4); break; } } skip(dis, 2); // classname short classNameIndex = dis.readShort(); short classNameUTF8index = (Short) constantPoolData[classNameIndex]; char[] className = ((String) constantPoolData[classNameUTF8index]).toCharArray(); // superclass name short superclassNameIndex = dis.readShort(); char[] superclassName = null; if (superclassNameIndex != 0) { short superclassNameUTF8index = (Short) constantPoolData[superclassNameIndex]; superclassName = ((String) constantPoolData[superclassNameUTF8index]).toCharArray(); } // interfaces short interfacesCount = dis.readShort(); char[][] interfaceNames = null; if (interfacesCount != 0) { interfaceNames = new char[interfacesCount][]; for (int i = 0; i < interfacesCount; i++) { short interfaceNameIndex = dis.readShort(); short interfaceNameUTF8index = (Short) constantPoolData[interfaceNameIndex]; interfaceNames[i] = ((String) constantPoolData[interfaceNameUTF8index]).toCharArray(); } } return new TypeHierarchyElement(className, superclassName, interfaceNames); } catch (Exception e) { SpringCore.log(e); } return null; }