org_aspectj_ajde_core_tests_CompilerMessagesTest_java
org.aspectj.weaver.bcel.AtAjAttributes
public static List<AjAttribute> readAj5MethodAttributes(Method method, BcelMethod bMethod, ResolvedType type, ResolvedPointcutDefinition preResolvedPointcut, ISourceContext context, IMessageHandler msgHandler) {
        if (method.getName().startsWith("ajc$")) {
            return Collections.emptyList();
        }
        AjAttributeMethodStruct struct = new AjAttributeMethodStruct(method, bMethod, type, context, msgHandler);
        Attribute[] attributes = method.getAttributes();
        boolean hasAtAspectJAnnotation = false;
        boolean hasAtAspectJAnnotationMustReturnVoid = false;
        for (Attribute attribute : attributes) {
            try {
                if (!AtAjAttributes.acceptAttribute(attribute)) continue;
                RuntimeAnnos rvs = (RuntimeAnnos)attribute;
                hasAtAspectJAnnotationMustReturnVoid = hasAtAspectJAnnotationMustReturnVoid || AtAjAttributes.handleBeforeAnnotation(rvs, struct, preResolvedPointcut);
                hasAtAspectJAnnotationMustReturnVoid = hasAtAspectJAnnotationMustReturnVoid || AtAjAttributes.handleAfterAnnotation(rvs, struct, preResolvedPointcut);
                hasAtAspectJAnnotationMustReturnVoid = hasAtAspectJAnnotationMustReturnVoid || AtAjAttributes.handleAfterReturningAnnotation(rvs, struct, preResolvedPointcut, bMethod);
                hasAtAspectJAnnotationMustReturnVoid = hasAtAspectJAnnotationMustReturnVoid || AtAjAttributes.handleAfterThrowingAnnotation(rvs, struct, preResolvedPointcut, bMethod);
                hasAtAspectJAnnotation = hasAtAspectJAnnotation || AtAjAttributes.handleAroundAnnotation(rvs, struct, preResolvedPointcut);
                break;
            }
            catch (ReturningFormalNotDeclaredInAdviceSignatureException e) {
                msgHandler.handleMessage(new Message(WeaverMessages.format("returningFormalNotDeclaredInAdvice", e.getFormalName()), IMessage.ERROR, null, bMethod.getSourceLocation()));
            }
            catch (ThrownFormalNotDeclaredInAdviceSignatureException e) {
                msgHandler.handleMessage(new Message(WeaverMessages.format("thrownFormalNotDeclaredInAdvice", e.getFormalName()), IMessage.ERROR, null, bMethod.getSourceLocation()));
            }
        }
        boolean bl = hasAtAspectJAnnotation = hasAtAspectJAnnotation || hasAtAspectJAnnotationMustReturnVoid;
        if (hasAtAspectJAnnotation && !type.isAspect()) {
            msgHandler.handleMessage(new Message("Found @AspectJ annotations in a non @Aspect type '" + type.getName() + "'", IMessage.WARNING, null, type.getSourceLocation()));
        }
        if (hasAtAspectJAnnotation && !struct.method.isPublic()) {
            msgHandler.handleMessage(new Message("Found @AspectJ annotation on a non public advice '" + AtAjAttributes.methodToString(struct.method) + "'", IMessage.ERROR, null, type.getSourceLocation()));
        }
        if (hasAtAspectJAnnotation && struct.method.isStatic()) {
            msgHandler.handleMessage(MessageUtil.error("Advice cannot be declared static '" + AtAjAttributes.methodToString(struct.method) + "'", type.getSourceLocation()));
        }
        if (hasAtAspectJAnnotationMustReturnVoid && !Type.VOID.equals(struct.method.getReturnType())) {
            msgHandler.handleMessage(new Message("Found @AspectJ annotation on a non around advice not returning void '" + AtAjAttributes.methodToString(struct.method) + "'", IMessage.ERROR, null, type.getSourceLocation()));
        }
        return struct.ajAttributes;
    }
 -> java.lang.String.startsWith(java.lang.String): boolean -> java.util.Collections.emptyList(): java.util.List
 [CALL] [CALL] [EXIT] -> java.lang.String.startsWith(java.lang.String): boolean -> java.util.Collections.emptyList(): java.util.List [EXIT]