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

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

Introduction

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

Prototype

int getAccessFlags();

Source Link

Document

Answer back the access flag 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]));
    }// ww  w. j av  a  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>
 * //from   w  w  w.  j  a  va 2s  . com
 * @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   ww  w  .  j  a va2 s .  c om*/
 */
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();
}