Example usage for org.eclipse.jdt.core.util IFieldInfo getDescriptor

List of usage examples for org.eclipse.jdt.core.util IFieldInfo getDescriptor

Introduction

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

Prototype

char[] getDescriptor();

Source Link

Document

Answer back the descriptor of this field info.

Usage

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

License:Open Source License

private static Long calculateSerialVersionId(IClassFileReader cfReader) throws IOException {
    // implementing algorithm specified on http://java.sun.com/j2se/1.5.0/docs/guide/serialization/spec/class.html#4100

    ByteArrayOutputStream os = new ByteArrayOutputStream();
    DataOutputStream doos = new DataOutputStream(os);
    doos.writeUTF(getClassName(cfReader.getClassName())); // class name
    int mod = getClassModifiers(cfReader);
    //      System.out.println(Integer.toHexString(mod) + ' ' + Flags.toString(mod));

    int classModifiers = mod & (Flags.AccPublic | Flags.AccFinal | Flags.AccInterface | Flags.AccAbstract);

    doos.writeInt(classModifiers); // class modifiers
    char[][] interfaces = getSortedInterfacesNames(cfReader);
    for (int i = 0; i < interfaces.length; i++) {
        doos.writeUTF(getClassName(interfaces[i]));
    }/*from  w  w  w  .j  a va  2  s .  co m*/
    IFieldInfo[] sortedFields = getSortedFields(cfReader);
    for (int i = 0; i < sortedFields.length; i++) {
        IFieldInfo curr = sortedFields[i];
        int flags = curr.getAccessFlags();
        if (!Flags.isPrivate(flags) || (!Flags.isStatic(flags) && !Flags.isTransient(flags))) {
            doos.writeUTF(new String(curr.getName()));
            doos.writeInt(flags & (Flags.AccPublic | Flags.AccPrivate | Flags.AccProtected | Flags.AccStatic
                    | Flags.AccFinal | Flags.AccVolatile | Flags.AccTransient)); // field modifiers
            doos.writeUTF(new String(curr.getDescriptor()));
        }
    }
    if (hasStaticClassInitializer(cfReader)) {
        doos.writeUTF(STATIC_CLASS_INITIALIZER);
        doos.writeInt(Flags.AccStatic);
        doos.writeUTF("()V"); //$NON-NLS-1$
    }
    IMethodInfo[] sortedMethods = getSortedMethods(cfReader);
    for (int i = 0; i < sortedMethods.length; i++) {
        IMethodInfo curr = sortedMethods[i];
        int flags = curr.getAccessFlags();
        if (!Flags.isPrivate(flags) && !curr.isClinit()) {
            doos.writeUTF(new String(curr.getName()));
            doos.writeInt(flags & (Flags.AccPublic | Flags.AccPrivate | Flags.AccProtected | Flags.AccStatic
                    | Flags.AccFinal | Flags.AccSynchronized | Flags.AccNative | Flags.AccAbstract
                    | Flags.AccStrictfp)); // method modifiers
            doos.writeUTF(getClassName(curr.getDescriptor()));
        }
    }
    doos.flush();
    return computeHash(os.toByteArray());
}

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

License:Open Source License

/**
 * compares two IFieldInfo instances to find any change from <code>field1</code> to <code>field2</code>
 * //w  ww .java 2s. c  om
 * @param className name of class to which <code>field1</code>(and <code>field2</code>) belongs
 * @param field1 IFieldInfo instance
 * @param field2 IFieldInfo instance
 */
private void compareFieldInfos(String className, IFieldInfo field1, IFieldInfo field2) {
    // compare AccessFlags (AccessFlags defines the modifiers of a field (e.g. public static final IVersionCompare.PLUGIN_ID = "org.eclipse.pde.tools.versioning")
    int accessFlag1 = field1.getAccessFlags();
    int accessFlag2 = field2.getAccessFlags();
    // we just care about field who was public or protected
    if (!(Flags.isPublic(accessFlag2) || Flags.isProtected(accessFlag2))) {
        return;
    }
    if (isModifierNarrowed(accessFlag1, accessFlag2)) {
        // get what modifiers have been changed
        int change = accessFlag1 ^ accessFlag2;
        // if the visibility of a field which was public or protected has been narrowed, it is a change should be caught 
        Object[] msg = { FIELD_TITLE, charsToString(field1.getName()),
                createChangedModifierString(accessFlag2, change),
                createChangedModifierString(accessFlag1, change), className };
        finalResult.merge(resultStatusHandler(IStatus.INFO,
                IVersionCompare.CLASS_DETAIL_STATUS | IVersionCompare.MAJOR_CHANGE,
                NLS.bind(Messages.JavaClassVersionCompare_ModifierChangedMsg, msg), null));
    }
    // compare Descriptor (Descriptor describes the type of a field)
    String descriptor1 = charsToString(field1.getDescriptor());
    String descriptor2 = charsToString(field2.getDescriptor());
    if (!descriptor1.equals(descriptor2)) {
        String[] msg = { charsToString(field1.getName()), Signature.toString(descriptor2),
                Signature.toString(descriptor1), className };
        finalResult.merge(resultStatusHandler(IStatus.INFO,
                IVersionCompare.CLASS_DETAIL_STATUS | IVersionCompare.MAJOR_CHANGE,
                NLS.bind(Messages.JavaClassVersionCompare_descriptorChangedMsg, msg), null));
    }
    // compare isDeprecated (if a field has been deprecated)
    if (field1.isDeprecated() && !field2.isDeprecated()) {
        Object[] msg = { FIELD_TITLE, charsToString(field1.getName()), className };
        finalResult.merge(resultStatusHandler(IStatus.INFO,
                IVersionCompare.CLASS_DETAIL_STATUS | IVersionCompare.MICRO_CHANGE,
                NLS.bind(Messages.JavaClassVersionCompare_deprecatedChangedMsg, msg), null));
    }
}

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

License:Open Source License

/**
 * converts the given object signature to a readable string
 * @param object IFieldInfo instance of IMethodInfo instance
 * @return String type signature//from w w  w .j a  v  a2 s.c  o m
 */
private String getSignatureString(Object object) {
    StringBuffer buffer = new StringBuffer();
    if (object instanceof IMethodInfo) {
        IMethodInfo method = (IMethodInfo) object;
        buffer.append(Flags.toString(method.getAccessFlags()));
        buffer.append(SPACE);
        buffer.append(Signature.toString(charsToString(method.getDescriptor()), charsToString(method.getName()),
                null, false, true));
    } else {
        IFieldInfo field = (IFieldInfo) object;
        buffer.append(Flags.toString(field.getAccessFlags()));
        buffer.append(SPACE);
        buffer.append(Signature.toString(charsToString(field.getDescriptor())));
        buffer.append(SPACE);
        buffer.append(charsToString(field.getName()));
    }
    return buffer.toString();
}