AdviceType.java

package sprout.aop.advice;

import sprout.aop.annotation.After;
import sprout.aop.annotation.Around;
import sprout.aop.annotation.Before;

import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Optional;

public enum AdviceType {
    AROUND(Around.class),
    BEFORE(Before.class),
    AFTER(After.class);

    private final Class<? extends Annotation> anno;
    AdviceType(Class<? extends Annotation> anno) { this.anno = anno; }

    public static Optional<AdviceType> from(Method m) {
        return Arrays.stream(values())
                .filter(t -> m.isAnnotationPresent(t.anno))
                .findFirst();
    }

    public Class<? extends Annotation> anno() { return anno; }
}