public String rawString() { switch (type) { case CLASS: return AccessFlags.classString(accFlags); case FIELD: return AccessFlags.fieldString(accFlags); case METHOD: return AccessFlags.methodString(accFlags); default: return "?"; } }
CstMethodRef meth = new CstMethodRef(thisClass, one.getNat()); int accessFlags = one.getAccessFlags(); boolean isStatic = AccessFlags.isStatic(accessFlags); boolean isPrivate = AccessFlags.isPrivate(accessFlags); boolean isNative = AccessFlags.isNative(accessFlags); boolean isAbstract = AccessFlags.isAbstract(accessFlags); boolean isConstructor = meth.isInstanceInit() || meth.isClassInit(); if (AccessFlags.isSynchronized(accessFlags)) { accessFlags |= AccessFlags.ACC_DECLARED_SYNCHRONIZED;
/** {@inheritDoc} */ @Override protected String humanAccessFlags(int accessFlags) { return AccessFlags.fieldString(accessFlags); }
/** {@inheritDoc} */ @Override protected String humanAccessFlags(int accessFlags) { return AccessFlags.methodString(accessFlags); }
observer.parsed(bytes, at, 2, "access_flags: " + AccessFlags.classString(accessFlags)); observer.parsed(bytes, at + 2, 2, "this_class: " + thisClass); observer.parsed(bytes, at + 4, 2, "super_class: " +
/** * Returns a human-oriented string representing the given access flags, * as defined on inner classes. * * @param flags the flags * @return {@code non-null;} human-oriented string */ public static String innerClassString(int flags) { return humanHelper(flags, INNER_CLASS_FLAGS, CONV_CLASS); }
/** * Sets attributes in the element according to the access flags given. */ private static void processAccessFlags(int accessFlags, Element element) { boolean isStatic= AccessFlags.isStatic(accessFlags); boolean isPrivate= AccessFlags.isPrivate(accessFlags); boolean isPublic= AccessFlags.isPublic(accessFlags); boolean isNative= AccessFlags.isNative(accessFlags); boolean isAbstract= AccessFlags.isAbstract(accessFlags); boolean isSynthetic= AccessFlags.isSynthetic(accessFlags); boolean isInterface= AccessFlags.isInterface(accessFlags); setAttributeIfTrue(element, "isStatic", isStatic); setAttributeIfTrue(element, "isPrivate", isPrivate); setAttributeIfTrue(element, "isPublic", isPublic); setAttributeIfTrue(element, "isNative", isNative); setAttributeIfTrue(element, "isAbstract", isAbstract); setAttributeIfTrue(element, "isSynthetic", isSynthetic); setAttributeIfTrue(element, "isInterface", isInterface); }
/** * Extracts the code block from the given method of the given class, or * <code>null</code>, if method is native or abstract. */ private static DalvCode getCode(Method method, DirectClassFile classFile) { boolean isNative= AccessFlags.isNative(method.getAccessFlags()); boolean isStatic= AccessFlags.isStatic(method.getAccessFlags()); boolean isAbstract= AccessFlags.isAbstract(method.getAccessFlags()); if (isNative || isAbstract) { return null; } ConcreteMethod concrete= new ConcreteMethod(method, classFile, false, false); TranslationAdvice advice= DexTranslationAdvice.THE_ONE; RopMethod rmeth= Ropper.convert(concrete, advice); CstMethodRef meth= new CstMethodRef(method.getDefiningClass(), method.getNat()); int paramSize= meth.getParameterWordCount(isStatic); DalvCode code= RopTranslator.translate(rmeth, PositionList.NONE, null, paramSize); DalvCode.AssignIndicesCallback callback= new DalvCode.AssignIndicesCallback() { public int getIndex(Constant cst) { // Everything is at index 0! return 0; } }; code.assignIndices(callback); return code; }
/** * Constructs an instance. * * @param definingClass {@code non-null;} the defining class * @param accessFlags access flags * @param nat {@code non-null;} member name and type (descriptor) * @param attributes {@code non-null;} list of associated attributes */ public StdMethod(CstType definingClass, int accessFlags, CstNat nat, AttributeList attributes) { super(definingClass, accessFlags, nat, attributes); String descStr = getDescriptor().getString(); effectiveDescriptor = Prototype.intern(descStr, definingClass.getClassType(), AccessFlags.isStatic(accessFlags), nat.isInstanceInit()); }
if (AccessFlags.isAnnotation(cf.getAccessFlags())) { Annotation annotationDefault = translateAnnotationDefaults(cf);
observer.parsed(bytes, offset + 6, 2, " access_flags: " + AccessFlags.innerClassString(accessFlags));
CstMethodRef meth = new CstMethodRef(thisClass, one.getNat()); int accessFlags = one.getAccessFlags(); boolean isStatic = AccessFlags.isStatic(accessFlags); boolean isPrivate = AccessFlags.isPrivate(accessFlags); boolean isNative = AccessFlags.isNative(accessFlags); boolean isAbstract = AccessFlags.isAbstract(accessFlags); boolean isConstructor = meth.isInstanceInit() || meth.isClassInit(); if (AccessFlags.isSynchronized(accessFlags)) { accessFlags |= AccessFlags.ACC_DECLARED_SYNCHRONIZED;
/** {@inheritDoc} */ @Override protected String humanAccessFlags(int accessFlags) { return AccessFlags.fieldString(accessFlags); }
/** {@inheritDoc} */ @Override protected String humanAccessFlags(int accessFlags) { return AccessFlags.methodString(accessFlags); }
observer.parsed(bytes, at, 2, "access_flags: " + AccessFlags.classString(accessFlags)); observer.parsed(bytes, at + 2, 2, "this_class: " + thisClass); observer.parsed(bytes, at + 4, 2, "super_class: " +
/** * Returns a human-oriented string representing the given access flags, * as defined on methods (not classes or fields). * * @param flags the flags * @return {@code non-null;} human-oriented string */ public static String methodString(int flags) { return humanHelper(flags, METHOD_FLAGS, CONV_METHOD); }
boolean isNative= AccessFlags.isNative(accessFlags); boolean isStatic= AccessFlags.isStatic(accessFlags); boolean isAbstract= AccessFlags.isAbstract(accessFlags);
/** * Constructs an instance. * * @param definingClass {@code non-null;} the defining class * @param accessFlags access flags * @param nat {@code non-null;} member name and type (descriptor) * @param attributes {@code non-null;} list of associated attributes */ public StdMethod(CstType definingClass, int accessFlags, CstNat nat, AttributeList attributes) { super(definingClass, accessFlags, nat, attributes); String descStr = getDescriptor().getString(); effectiveDescriptor = Prototype.intern(descStr, definingClass.getClassType(), AccessFlags.isStatic(accessFlags), nat.isInstanceInit()); }
if (AccessFlags.isAnnotation(cf.getAccessFlags())) { Annotation annotationDefault = translateAnnotationDefaults(cf);