private static int getClassModifiers(IClassFileReader cfReader) { IInnerClassesAttribute innerClassesAttribute = cfReader.getInnerClassesAttribute(); if (innerClassesAttribute != null) { IInnerClassesAttributeEntry[] entries = innerClassesAttribute.getInnerClassAttributesEntries(); for (int i = 0; i < entries.length; i++) { IInnerClassesAttributeEntry entry = entries[i]; char[] innerClassName = entry.getInnerClassName(); if (innerClassName != null) { if (CharOperation.equals(cfReader.getClassName(), innerClassName)) { return entry.getAccessFlags(); } } } } return cfReader.getAccessFlags(); }
private static IFieldInfo[] getSortedFields(IClassFileReader cfReader) { IFieldInfo[] allFields = cfReader.getFieldInfos(); Arrays.sort(allFields, new Comparator<IFieldInfo>() { @Override public int compare(IFieldInfo o1, IFieldInfo o2) { return CharOperation.compareTo(o1.getName(), o2.getName()); } }); return allFields; }
private static char[][] getSortedInterfacesNames(IClassFileReader cfReader) { char[][] interfaceNames= cfReader.getInterfaceNames(); Arrays.sort(interfaceNames, new Comparator<char[]>() { @Override public int compare(char[] o1, char[] o2) { return CharOperation.compareTo(o1, o2); } }); return interfaceNames; }
private boolean isSynthetic(IClassFileReader classFileReader) { int flags = classFileReader.getAccessFlags(); if ((flags & IModifierConstants.ACC_SYNTHETIC) != 0) { return true; } IClassFileAttribute[] attributes = classFileReader.getAttributes(); for (int i = 0, max = attributes.length; i < max; i++) { if (CharOperation.equals(attributes[i].getAttributeName(), IAttributeNamesConstants.SYNTHETIC)) { return true; } } return false; }
char[] className = classFileReader.getClassName(); if (className == null) { final int accessFlags = classFileReader.getAccessFlags(); final boolean isEnum = (accessFlags & IModifierConstants.ACC_ENUM) != 0; ISourceAttribute sourceAttribute = classFileReader.getSourceFileAttribute(); IClassFileAttribute classFileAttribute = Util.getAttribute(classFileReader, IAttributeNamesConstants.SIGNATURE); ISignatureAttribute signatureAttribute = (ISignatureAttribute) classFileAttribute; if (checkMode(mode, SYSTEM | DETAILED)) { int minorVersion = classFileReader.getMinorVersion(); int majorVersion = classFileReader.getMajorVersion(); buffer.append(Messages.disassembler_begincommentline); if (sourceAttribute != null) { IInnerClassesAttribute innerClassesAttribute = classFileReader.getInnerClassesAttribute(); IClassFileAttribute runtimeVisibleAnnotationsAttribute = Util.getAttribute(classFileReader, IAttributeNamesConstants.RUNTIME_VISIBLE_ANNOTATIONS); IClassFileAttribute runtimeInvisibleAnnotationsAttribute = Util.getAttribute(classFileReader, IAttributeNamesConstants.RUNTIME_INVISIBLE_ANNOTATIONS); char[] innerClassName = entry.getInnerClassName(); if (innerClassName != null) { if (CharOperation.equals(classFileReader.getClassName(), innerClassName)) { decodeModifiersForInnerClasses(buffer, entry.getAccessFlags(), false); decoded = true; if (isEnum) { buffer.append("enum "); //$NON-NLS-1$ } else if (classFileReader.isClass()) { buffer.append("class "); //$NON-NLS-1$
static void computeReferencedTypes(IClassFileReader cfr, Set<String> packages) { char[][] interfaces = cfr.getInterfaceNames(); if (interfaces != null) { for (char[] interfaceName : interfaces) { char[] scn = cfr.getSuperclassName(); if (scn != null) { packages.add(getPackage(new String(scn).replace('/', '.'))); IFieldInfo[] fieldInfos = cfr.getFieldInfos(); for (IFieldInfo fieldInfo : fieldInfos) { IMethodInfo[] methodInfos = cfr.getMethodInfos(); for (IMethodInfo methodInfo : methodInfos) { IExceptionAttribute exceptionAttribute = methodInfo.getExceptionAttribute(); IConstantPool pool = cfr.getConstantPool(); int length = pool.getConstantPoolCount(); for (int i = 1; i < length; i++) {
private void disassembleTypeMembers(IClassFileReader classFileReader, char[] className, StringBuffer buffer, String lineSeparator, int tabNumber, int mode, boolean isEnum) { IFieldInfo[] fields = classFileReader.getFieldInfos(); if (isEnum && checkMode(mode, WORKING_COPY)) { int index = 0; final int fieldsLength = fields.length; IMethodInfo[] methods = classFileReader.getMethodInfos(); char[][] constructorArguments = getConstructorArgumentsForEnum(methods); enumConstantLoop: for (; index < fieldsLength; index++) { disassemble(fields[i], buffer, lineSeparator, tabNumber, mode); IMethodInfo[] methods = classFileReader.getMethodInfos(); for (int i = 0, max = methods.length; i < max; i++) { writeNewLine(buffer, lineSeparator, tabNumber);
continue; // problematic class file char[] className= reader.getClassName(); ISourceAttribute sourceAttribute= reader.getSourceFileAttribute(); if (className != null && sourceAttribute != null && sourceAttribute.getSourceFileName() != null) { IPath packPath= file.getParent().getFullPath();
public static IClassFileAttribute getAttribute(IClassFileReader classFileReader, char[] attributeName) { IClassFileAttribute[] attributes = classFileReader.getAttributes(); for (int i = 0, max = attributes.length; i < max; i++) { if (CharOperation.equals(attributes[i].getAttributeName(), attributeName)) { return attributes[i]; } } return null; }
private static IMethodInfo[] getSortedMethods(IClassFileReader cfReader) { IMethodInfo[] allMethods= cfReader.getMethodInfos(); Arrays.sort(allMethods, new Comparator<IMethodInfo>() { @Override public int compare(IMethodInfo mi1, IMethodInfo mi2) { if (mi1.isConstructor() != mi2.isConstructor()) { return mi1.isConstructor() ? -1 : 1; } else if (mi1.isConstructor()) { return 0; } int res= CharOperation.compareTo(mi1.getName(), mi2.getName()); if (res != 0) { return res; } return CharOperation.compareTo(mi1.getDescriptor(), mi2.getDescriptor()); } }); return allMethods; }
doos.writeUTF(getClassName(cfReader.getClassName())); // class name int mod= getClassModifiers(cfReader);
cfReader= ToolFactory.createDefaultClassFileReader(location.toOSString(), IClassFileReader.CLASSFILE_ATTRIBUTES); if (cfReader != null) { ISourceAttribute sourceAttribute= cfReader.getSourceFileAttribute(); if (sourceAttribute == null) {
/** * Find all classes that are required by given class file. * * @param file * a ".class" file * @return set of strings, each contains a full qualified class name (forward slash as package separator) */ public static Set<String> getRequiredClasses(IFile file) { Set<String> classes = new TreeSet<>(); IClassFile classFile = JavaCore.createClassFileFrom(file); IClassFileReader reader = ToolFactory.createDefaultClassFileReader(classFile, IClassFileReader.CONSTANT_POOL); if (reader == null) { // class not compiled return classes; } IConstantPool pool = reader.getConstantPool(); for (int i = 0; i < pool.getConstantPoolCount(); i++) { if (pool.getEntryKind(i) == IConstantPoolConstant.CONSTANT_Class) { IConstantPoolEntry entry = pool.decodeEntry(i); String classname = new String(entry.getClassInfoName()); // don't return inner classes int index = classname.indexOf('$'); if (index != -1) { classname = classname.substring(0, index); } classes.add(classname); } } return classes; }
char[] className = classFileReader.getClassName(); if (className == null) { final int accessFlags = classFileReader.getAccessFlags(); final boolean isEnum = (accessFlags & IModifierConstants.ACC_ENUM) != 0; ISourceAttribute sourceAttribute = classFileReader.getSourceFileAttribute(); IClassFileAttribute classFileAttribute = Util.getAttribute(classFileReader, IAttributeNamesConstants.SIGNATURE); ISignatureAttribute signatureAttribute = (ISignatureAttribute) classFileAttribute; if (checkMode(mode, SYSTEM | DETAILED)) { int minorVersion = classFileReader.getMinorVersion(); int majorVersion = classFileReader.getMajorVersion(); buffer.append(Messages.disassembler_begincommentline); if (sourceAttribute != null) { IInnerClassesAttribute innerClassesAttribute = classFileReader.getInnerClassesAttribute(); IClassFileAttribute runtimeVisibleAnnotationsAttribute = Util.getAttribute(classFileReader, IAttributeNamesConstants.RUNTIME_VISIBLE_ANNOTATIONS); IClassFileAttribute runtimeInvisibleAnnotationsAttribute = Util.getAttribute(classFileReader, IAttributeNamesConstants.RUNTIME_INVISIBLE_ANNOTATIONS); char[] innerClassName = entry.getInnerClassName(); if (innerClassName != null) { if (CharOperation.equals(classFileReader.getClassName(), innerClassName)) { decodeModifiersForInnerClasses(buffer, entry.getAccessFlags(), false); decoded = true; if (isEnum) { buffer.append("enum "); //$NON-NLS-1$ } else if (classFileReader.isClass()) { buffer.append("class "); //$NON-NLS-1$
private void disassembleTypeMembers(IClassFileReader classFileReader, char[] className, StringBuffer buffer, String lineSeparator, int tabNumber, int mode, boolean isEnum) { IFieldInfo[] fields = classFileReader.getFieldInfos(); if (isEnum && checkMode(mode, WORKING_COPY)) { int index = 0; final int fieldsLength = fields.length; IMethodInfo[] methods = classFileReader.getMethodInfos(); char[][] constructorArguments = getConstructorArgumentsForEnum(methods); enumConstantLoop: for (; index < fieldsLength; index++) { disassemble(fields[i], buffer, lineSeparator, tabNumber, mode); IMethodInfo[] methods = classFileReader.getMethodInfos(); for (int i = 0, max = methods.length; i < max; i++) { writeNewLine(buffer, lineSeparator, tabNumber);
continue; // problematic class file char[] className= reader.getClassName(); ISourceAttribute sourceAttribute= reader.getSourceFileAttribute(); if (className != null && sourceAttribute != null && sourceAttribute.getSourceFileName() != null) { IPath packPath= file.getParent().getFullPath();
private boolean isSynthetic(IClassFileReader classFileReader) { int flags = classFileReader.getAccessFlags(); if ((flags & IModifierConstants.ACC_SYNTHETIC) != 0) { return true; } IClassFileAttribute[] attributes = classFileReader.getAttributes(); for (int i = 0, max = attributes.length; i < max; i++) { if (CharOperation.equals(attributes[i].getAttributeName(), IAttributeNamesConstants.SYNTHETIC)) { return true; } } return false; }
private boolean isDeprecated(IClassFileReader classFileReader) { IClassFileAttribute[] attributes = classFileReader.getAttributes(); for (int i = 0, max = attributes.length; i < max; i++) { if (CharOperation.equals(attributes[i].getAttributeName(), IAttributeNamesConstants.DEPRECATED)) { return true; } } return false; }
private static IMethodInfo[] getSortedMethods(IClassFileReader cfReader) { IMethodInfo[] allMethods= cfReader.getMethodInfos(); Arrays.sort(allMethods, new Comparator<IMethodInfo>() { @Override public int compare(IMethodInfo mi1, IMethodInfo mi2) { if (mi1.isConstructor() != mi2.isConstructor()) { return mi1.isConstructor() ? -1 : 1; } else if (mi1.isConstructor()) { return 0; } int res= CharOperation.compareTo(mi1.getName(), mi2.getName()); if (res != 0) { return res; } return CharOperation.compareTo(mi1.getDescriptor(), mi2.getDescriptor()); } }); return allMethods; }
doos.writeUTF(getClassName(cfReader.getClassName())); // class name int mod = getClassModifiers(cfReader);