List of usage examples for org.eclipse.jdt.core.util IFieldInfo getDescriptor
char[] getDescriptor();
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(); }