AspectJPointcutAdapter.java
package sprout.aop.advisor;
import org.aspectj.weaver.tools.PointcutExpression;
import org.aspectj.weaver.tools.PointcutParser;
import org.aspectj.weaver.tools.PointcutPrimitive;
import java.lang.reflect.Method;
import java.util.EnumSet;
public final class AspectJPointcutAdapter implements Pointcut {
private static final PointcutParser PARSER =
PointcutParser.getPointcutParserSupportingAllPrimitivesAndUsingContextClassloaderForResolution();
private final PointcutExpression expression;
public AspectJPointcutAdapter(String expr) {
this.expression = PARSER.parsePointcutExpression(expr);
}
@Override
public boolean matches(Class<?> targetClass, Method method) {
if (!expression.couldMatchJoinPointsInType(targetClass)) {
return false;
}
var sm = expression.matchesMethodExecution(method);
return sm.alwaysMatches() || sm.maybeMatches();
}
@Override
public String toString() {
return "AspectJPointcutAdapter{" + expression.getPointcutExpression() + '}';
}
}