Example usage for org.eclipse.jdt.core.util IClassFileReader getFieldInfos

List of usage examples for org.eclipse.jdt.core.util IClassFileReader getFieldInfos

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.util IClassFileReader getFieldInfos.

Prototype

IFieldInfo[] getFieldInfos();

Source Link

Document

Answer back the array of field infos of the .class file, an empty array if none.

Usage

From source file:com.siteview.mde.internal.ui.search.dependencies.PackageFinder.java

License:Open Source License

static void computeReferencedTypes(IClassFileReader cfr, Set packages) {

    char[][] interfaces = cfr.getInterfaceNames();
    if (interfaces != null) {
        for (int i = 0; i < interfaces.length; i++) {
            //note: have to convert names like Ljava/lang/Object; to java.lang.Object
            packages.add(getPackage(new String(interfaces[i]).replace('/', '.')));
        }/*from   w  w w. j  a va 2s.  c  o  m*/
    }

    char[] scn = cfr.getSuperclassName();
    if (scn != null) {
        packages.add(getPackage(new String(scn).replace('/', '.')));
    }

    IFieldInfo[] fieldInfo = cfr.getFieldInfos();
    for (int i = 0; i < fieldInfo.length; i++) {

        String fieldName = new String(fieldInfo[i].getDescriptor());
        if (!isPrimitiveTypeSignature(fieldName)) {
            String fieldDescriptor = extractFullyQualifiedTopLevelType(fieldName);
            packages.add(getPackage(new String(fieldDescriptor)));
        }
    }

    IMethodInfo[] methodInfo = cfr.getMethodInfos();
    for (int i = 0; i < methodInfo.length; i++) {
        IExceptionAttribute exceptionAttribute = methodInfo[i].getExceptionAttribute();
        if (exceptionAttribute != null) {
            char[][] exceptionNames = exceptionAttribute.getExceptionNames();
            for (int j = 0; j < exceptionNames.length; j++) {
                packages.add(getPackage(new String(exceptionNames[j]).replace('/', '.')));
            }
        }

        String descriptor = new String(methodInfo[i].getDescriptor());
        //add parameter types
        String[] parameterTypes = Signature.getParameterTypes(descriptor);
        for (int j = 0; j < parameterTypes.length; j++) {
            //have to parse to convert [Ljava/lang/String; to java.lang.String
            if (!isPrimitiveTypeSignature(parameterTypes[j])) {
                packages.add(getPackage(new String(extractFullyQualifiedTopLevelType(parameterTypes[j]))));
            }
        }
        //add return type
        String returnType = Signature.getReturnType(descriptor);
        if (!isPrimitiveTypeSignature(returnType)) {
            returnType = extractFullyQualifiedTopLevelType(returnType);
            packages.add(getPackage(returnType));
        }
    }

    // Is there more to extract from the constant pool??
    IConstantPoolEntry entry;
    IConstantPool pool = cfr.getConstantPool();
    int length = pool.getConstantPoolCount();
    for (int i = 1; i < length; i++) {
        switch (pool.getEntryKind(i)) {
        case IConstantPoolConstant.CONSTANT_Class:
            // add reference to the class
            entry = pool.decodeEntry(i);
            //note: may have to convert names like Ljava/lang/Object; to java.lang.Object
            String className = new String(entry.getClassInfoName()).replace('/', '.');
            className = className.indexOf(';') >= 0 ? extractFullyQualifiedTopLevelType(className) : className;
            packages.add(getPackage(className));
            break;

        case IConstantPoolConstant.CONSTANT_NameAndType:
            // add reference to the name and type
            entry = pool.decodeEntry(i);
            int descIndex = entry.getNameAndTypeInfoDescriptorIndex();
            if (pool.getEntryKind(descIndex) == IConstantPoolConstant.CONSTANT_Utf8) {
                entry = pool.decodeEntry(descIndex);
                char[] type = entry.getUtf8Value();
                if (type[0] == '(') {
                    // Method signature.

                    //add parameter types
                    String descriptor = new String(type);
                    String[] parameterTypes = Signature.getParameterTypes(descriptor);
                    for (int j = 0; j < parameterTypes.length; j++) {
                        if (!isPrimitiveTypeSignature(parameterTypes[j])) {
                            packages.add(getPackage(extractFullyQualifiedTopLevelType(parameterTypes[j])));
                        }
                    }
                    //add return type
                    String returnType = Signature.getReturnType(descriptor);
                    if (!isPrimitiveTypeSignature(returnType)) {
                        returnType = extractFullyQualifiedTopLevelType(returnType);
                        packages.add(getPackage(returnType));
                    }

                } else {
                    // Field type.
                    String typeString = new String(type);
                    if (!isPrimitiveTypeSignature(typeString)) {
                        packages.add(getPackage(extractFullyQualifiedTopLevelType(typeString)));
                    }
                }
            }
            break;
        }
    }
    packages.remove(""); // removes default package if it exists //$NON-NLS-1$
}

From source file:org.eclipse.ajdt.internal.ui.editor.quickfix.AJSerialVersionHashOperation.java

License:Open Source License

private static IFieldInfo[] getSortedFields(IClassFileReader cfReader) {
    IFieldInfo[] allFields = cfReader.getFieldInfos();
    Arrays.sort(allFields, new Comparator() {
        public int compare(Object o1, Object o2) {
            return CharOperation.compareTo(((IFieldInfo) o1).getName(), ((IFieldInfo) o2).getName());
        }/* ww  w.  j a va  2s  .  c  om*/
    });
    return allFields;
}

From source file:org.eclipse.jpt.common.eclipselink.core.internal.libval.EclipseLinkLibraryValidatorTools.java

License:Open Source License

private static IStatus validateEclipseLinkVersion(Iterable<IClasspathEntry> libraryEntries,
        VersionRange versionRange) {//from   w  w w. ja va 2s  .c  om
    Version version = null;
    for (IClasspathEntry libraryEntry : libraryEntries) {
        if (libraryEntry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
            String versionString = null;
            IClassFileReader classReader = buildClassFileReader(libraryEntry);
            if (classReader != null) {
                for (IFieldInfo field : classReader.getFieldInfos()) {
                    if (Arrays.equals(field.getName(), VERSION_FIELD_NAME_CHAR_ARRAY)) {
                        try {
                            versionString = field.getConstantValueAttribute().getConstantValue()
                                    .getStringValue();
                        } catch (RuntimeException ex) {
                            // assume the field has no value
                        }
                        break;
                    }
                }
            }
            if (versionString != null) {
                if (version != null) {
                    return buildErrorStatus(
                            JptCommonEclipseLinkCoreMessages.ECLIPSELINK_LIBRARY_VALIDATOR__MULTIPLE_ECLIPSELINK_VERSIONS);
                }
                version = new Version(versionString);
            }
        }
    }

    if (version == null) {
        return buildErrorStatus(
                JptCommonEclipseLinkCoreMessages.ECLIPSELINK_LIBRARY_VALIDATOR__NO_ECLIPSELINK_VERSION);
    }

    if (!versionRange.isIncluded(version)) {
        return buildErrorStatus(
                JptCommonEclipseLinkCoreMessages.ECLIPSELINK_LIBRARY_VALIDATOR__IMPROPER_ECLIPSELINK_VERSION);
    }

    return Status.OK_STATUS;
}

From source file:org.eclipse.pde.internal.ui.search.dependencies.PackageFinder.java

License:Open Source License

static void computeReferencedTypes(IClassFileReader cfr, Set<String> packages) {

    char[][] interfaces = cfr.getInterfaceNames();
    if (interfaces != null) {
        for (int i = 0; i < interfaces.length; i++) {
            //note: have to convert names like Ljava/lang/Object; to java.lang.Object
            packages.add(getPackage(new String(interfaces[i]).replace('/', '.')));
        }//from   ww w  . jav a 2  s  . c o m
    }

    char[] scn = cfr.getSuperclassName();
    if (scn != null) {
        packages.add(getPackage(new String(scn).replace('/', '.')));
    }

    IFieldInfo[] fieldInfo = cfr.getFieldInfos();
    for (int i = 0; i < fieldInfo.length; i++) {

        String fieldName = new String(fieldInfo[i].getDescriptor());
        if (!isPrimitiveTypeSignature(fieldName)) {
            String fieldDescriptor = extractFullyQualifiedTopLevelType(fieldName);
            packages.add(getPackage(new String(fieldDescriptor)));
        }
    }

    IMethodInfo[] methodInfo = cfr.getMethodInfos();
    for (int i = 0; i < methodInfo.length; i++) {
        IExceptionAttribute exceptionAttribute = methodInfo[i].getExceptionAttribute();
        if (exceptionAttribute != null) {
            char[][] exceptionNames = exceptionAttribute.getExceptionNames();
            for (int j = 0; j < exceptionNames.length; j++) {
                packages.add(getPackage(new String(exceptionNames[j]).replace('/', '.')));
            }
        }

        String descriptor = new String(methodInfo[i].getDescriptor());
        //add parameter types
        String[] parameterTypes = Signature.getParameterTypes(descriptor);
        for (int j = 0; j < parameterTypes.length; j++) {
            //have to parse to convert [Ljava/lang/String; to java.lang.String
            if (!isPrimitiveTypeSignature(parameterTypes[j])) {
                packages.add(getPackage(new String(extractFullyQualifiedTopLevelType(parameterTypes[j]))));
            }
        }
        //add return type
        String returnType = Signature.getReturnType(descriptor);
        if (!isPrimitiveTypeSignature(returnType)) {
            returnType = extractFullyQualifiedTopLevelType(returnType);
            packages.add(getPackage(returnType));
        }
    }

    // Is there more to extract from the constant pool??
    IConstantPoolEntry entry;
    IConstantPool pool = cfr.getConstantPool();
    int length = pool.getConstantPoolCount();
    for (int i = 1; i < length; i++) {
        switch (pool.getEntryKind(i)) {
        case IConstantPoolConstant.CONSTANT_Class:
            // add reference to the class
            entry = pool.decodeEntry(i);
            //note: may have to convert names like Ljava/lang/Object; to java.lang.Object
            String className = new String(entry.getClassInfoName()).replace('/', '.');
            className = className.indexOf(';') >= 0 ? extractFullyQualifiedTopLevelType(className) : className;
            packages.add(getPackage(className));
            break;

        case IConstantPoolConstant.CONSTANT_NameAndType:
            // add reference to the name and type
            entry = pool.decodeEntry(i);
            int descIndex = entry.getNameAndTypeInfoDescriptorIndex();
            if (pool.getEntryKind(descIndex) == IConstantPoolConstant.CONSTANT_Utf8) {
                entry = pool.decodeEntry(descIndex);
                char[] type = entry.getUtf8Value();
                if (type[0] == '(') {
                    // Method signature.

                    //add parameter types
                    String descriptor = new String(type);
                    String[] parameterTypes = Signature.getParameterTypes(descriptor);
                    for (int j = 0; j < parameterTypes.length; j++) {
                        if (!isPrimitiveTypeSignature(parameterTypes[j])) {
                            packages.add(getPackage(extractFullyQualifiedTopLevelType(parameterTypes[j])));
                        }
                    }
                    //add return type
                    String returnType = Signature.getReturnType(descriptor);
                    if (!isPrimitiveTypeSignature(returnType)) {
                        returnType = extractFullyQualifiedTopLevelType(returnType);
                        packages.add(getPackage(returnType));
                    }

                } else {
                    // Field type.
                    String typeString = new String(type);
                    if (!isPrimitiveTypeSignature(typeString)) {
                        packages.add(getPackage(extractFullyQualifiedTopLevelType(typeString)));
                    }
                }
            }
            break;
        }
    }
    packages.remove(""); // removes default package if it exists //$NON-NLS-1$
}

From source file:org.eclipse.pde.tools.internal.versioning.JavaClassVersionCompare.java

License:Open Source License

/**
 * compares two java classes denoted by <code>classFileReader1</code> and <code>classFileReader2</code>,
 * and check if there is any change from <code>classFileReader2</code> to <code>classFileReader1</code>.
 * // ww w.j  a  va 2s .c o m
 * @param classFileReader1
 * @param classFileReader2
 * @param monitor IProgressMonitor instance
 * @return compare result IStatus instance
 */
private IStatus compareJavaClasses(IClassFileReader classFileReader1, IClassFileReader classFileReader2,
        IProgressMonitor monitor) {
    try {
        monitor.beginTask("", 100); //$NON-NLS-1$
        // compare class names
        String name1 = charsToString(classFileReader1.getClassName());
        String name2 = charsToString(classFileReader2.getClassName());
        if (!name1.equals(name2)) {
            finalResult.merge(resultStatusHandler(IStatus.WARNING, IVersionCompare.PROCESS_ERROR_STATUS,
                    NLS.bind(Messages.JavaClassVersionCompare_differentClassNameMsg, name1, name2), null));
            return finalResult;
        }
        // worked 5%
        monitor.worked(5);
        // compare super classes
        checkSuperClasses(name1, classFileReader1.getSuperclassName(), classFileReader2.getSuperclassName());
        // worked 5%
        monitor.worked(5);
        // compare interfaces
        checkInterfaces(name1, generateList(classFileReader1.getInterfaceNames()),
                generateList(classFileReader2.getInterfaceNames()));
        // worked 5%
        monitor.worked(5);
        // compare modifier of classes
        checkClassModifiers(name1, classFileReader1.getAccessFlags(), classFileReader2.getAccessFlags());
        // worked 5%
        monitor.worked(5);
        // compare fields
        checkElements(name1, generateTable(classFileReader1.getFieldInfos()),
                generateTable(classFileReader2.getFieldInfos()));
        // worked 40%
        monitor.worked(40);
        // compare methods (40%)
        checkElements(name1, generateTable(classFileReader1.getMethodInfos()),
                generateTable(classFileReader2.getMethodInfos()));
        return finalResult;
    } finally {
        monitor.done();
    }
}

From source file:org.fusesource.ide.imports.sap.IDoc3Archive.java

License:Open Source License

private void readVersion() throws IOException {
    Map<String, byte[]> idoc3Contents = new HashMap<String, byte[]>();
    readJARFile(sapidoc3jar, idoc3Contents);
    byte[] jco3IdocContents = idoc3Contents.get(JCOIDOC_CLASSFILE_ENTRY);
    ByteArrayInputStream bais = new ByteArrayInputStream(jco3IdocContents);
    IClassFileReader classfileReader = ToolFactory.createDefaultClassFileReader(bais, IClassFileReader.ALL);
    IFieldInfo[] fieldInfos = classfileReader.getFieldInfos();
    for (int i = 0; i < fieldInfos.length; i++) {
        if (Arrays.equals(fieldInfos[i].getName(), VERSION_NAME)) {
            IConstantValueAttribute constantValueAttribute = fieldInfos[i].getConstantValueAttribute();
            if (constantValueAttribute != null) {
                IConstantPoolEntry constantPoolEntry = constantValueAttribute.getConstantValue();
                if (constantPoolEntry.getKind() == IConstantPoolConstant.CONSTANT_String) {
                    version = constantPoolEntry.getStringValue();
                    if (version != null) {
                        version = version.split(JCOIDOC_VERSION_STRING_DELIMITER)[0];
                    }//from  ww  w  . ja va  2  s .  co m
                    break;
                }
            }
        }
    }
}