org_aspectj_ajde_core_tests_model_SavedModelConsistencyTest_java
org.aspectj.weaver.bcel.AtAjAttributes
public static List<AjAttribute> readAj5ClassAttributes(AsmManager model, JavaClass javaClass, ReferenceType type, ISourceContext context, IMessageHandler msgHandler, boolean isCodeStyleAspect) {
        Field[] fs;
        Constant[] cpool;
        boolean ignoreThisClass;
        boolean bl = ignoreThisClass = javaClass.getClassName().charAt(0) == PACKAGE_INITIAL_CHAR && javaClass.getClassName().startsWith(ASPECTJ_ANNOTATION_PACKAGE);
        if (ignoreThisClass) {
            return NO_ATTRIBUTES;
        }
        boolean containsPointcut = false;
        boolean containsAnnotationClassReference = false;
        for (Constant constant : cpool = javaClass.getConstantPool().getConstantPool()) {
            String constantValue;
            if (constant == null || constant.getTag() != 1 || (constantValue = ((ConstantUtf8)constant).getValue()).length() <= 28 || constantValue.charAt(1) != PACKAGE_INITIAL_CHAR || !constantValue.startsWith("Lorg/aspectj/lang/annotation")) continue;
            containsAnnotationClassReference = true;
            if ("Lorg/aspectj/lang/annotation/DeclareAnnotation;".equals(constantValue)) {
                msgHandler.handleMessage(new Message("Found @DeclareAnnotation while current release does not support it (see '" + type.getName() + "')", IMessage.WARNING, null, type.getSourceLocation()));
            }
            if (!"Lorg/aspectj/lang/annotation/Pointcut;".equals(constantValue)) continue;
            containsPointcut = true;
        }
        if (!containsAnnotationClassReference) {
            return NO_ATTRIBUTES;
        }
        AjAttributeStruct struct = new AjAttributeStruct(type, context, msgHandler);
        Attribute[] attributes = javaClass.getAttributes();
        boolean hasAtAspectAnnotation = false;
        boolean hasAtPrecedenceAnnotation = false;
        AjAttribute.WeaverVersionInfo wvinfo = null;
        for (Attribute attribute : attributes) {
            if (!AtAjAttributes.acceptAttribute(attribute)) continue;
            RuntimeAnnos rvs = (RuntimeAnnos)attribute;
            if (isCodeStyleAspect || javaClass.isInterface()) break;
            hasAtAspectAnnotation = AtAjAttributes.handleAspectAnnotation(rvs, struct);
            hasAtPrecedenceAnnotation = AtAjAttributes.handlePrecedenceAnnotation(rvs, struct);
            break;
        }
        for (int i = attributes.length - 1; i >= 0; --i) {
            Attribute attribute = attributes[i];
            if (!attribute.getName().equals("org.aspectj.weaver.WeaverVersion")) continue;
            try {
                VersionedDataInputStream s = new VersionedDataInputStream(new ByteArrayInputStream(((Unknown)attribute).getBytes()), null);
                wvinfo = AjAttribute.WeaverVersionInfo.read(s);
                struct.ajAttributes.add(0, wvinfo);
                continue;
            }
            catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }
        if (wvinfo == null) {
            ReferenceTypeDelegate delegate = type.getDelegate();
            if (delegate instanceof BcelObjectType && (wvinfo = ((BcelObjectType)delegate).getWeaverVersionAttribute()) != null) {
                if (wvinfo.getMajorVersion() != 0) {
                    struct.ajAttributes.add(0, wvinfo);
                } else {
                    wvinfo = null;
                }
            }
            if (wvinfo == null) {
                wvinfo = new AjAttribute.WeaverVersionInfo();
                struct.ajAttributes.add(0, wvinfo);
            }
        }
        if (hasAtPrecedenceAnnotation && !hasAtAspectAnnotation) {
            msgHandler.handleMessage(new Message("Found @DeclarePrecedence on a non @Aspect type '" + type.getName() + "'", IMessage.WARNING, null, type.getSourceLocation()));
            return NO_ATTRIBUTES;
        }
        if (!(hasAtAspectAnnotation || isCodeStyleAspect || containsPointcut)) {
            return NO_ATTRIBUTES;
        }
        for (int i = 0; i < javaClass.getMethods().length; ++i) {
            Attribute[] mattributes;
            Method method = javaClass.getMethods()[i];
            if (method.getName().startsWith("ajc$")) continue;
            AjAttributeMethodStruct mstruct = null;
            boolean processedPointcut = false;
            for (Attribute mattribute : mattributes = method.getAttributes()) {
                if (!AtAjAttributes.acceptAttribute(mattribute)) continue;
                mstruct = new AjAttributeMethodStruct(method, null, type, context, msgHandler);
                processedPointcut = AtAjAttributes.handlePointcutAnnotation((RuntimeAnnos)mattribute, mstruct);
                if (processedPointcut) break;
                processedPointcut = AtAjAttributes.handleDeclareMixinAnnotation((RuntimeAnnos)mattribute, mstruct);
                break;
            }
            if (!processedPointcut) continue;
            struct.ajAttributes.addAll(mstruct.ajAttributes);
        }
        for (Field field : fs = javaClass.getFields()) {
            Attribute[] fattributes;
            if (field.getName().startsWith("ajc$")) continue;
            AjAttributeFieldStruct fstruct = new AjAttributeFieldStruct(field, null, type, context, msgHandler);
            for (Attribute fattribute : fattributes = field.getAttributes()) {
                if (!AtAjAttributes.acceptAttribute(fattribute)) continue;
                RuntimeAnnos frvs = (RuntimeAnnos)fattribute;
                if (!AtAjAttributes.handleDeclareErrorOrWarningAnnotation(model, frvs, fstruct) && !AtAjAttributes.handleDeclareParentsAnnotation(frvs, fstruct) || type.isAnnotationStyleAspect() || isCodeStyleAspect) break;
                msgHandler.handleMessage(new Message("Found @AspectJ annotations in a non @Aspect type '" + type.getName() + "'", IMessage.WARNING, null, type.getSourceLocation()));
                break;
            }
            struct.ajAttributes.addAll(fstruct.ajAttributes);
        }
        return struct.ajAttributes;
    }
 -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.charAt(int): char -> java.lang.String.length(): int -> java.lang.String.length(): int -> java.lang.String.charAt(int): char
 [CALL] [CALL] [EXIT] -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int [CALL] [EXIT] [CALL] [EXIT] -> java.lang.String.length(): int -> java.lang.String.charAt(int): char [EXIT]