add context Object to check methods and create the ability to have a specific method for each type of context or one for all by using the superclass and casting yourself
This commit is contained in:
parent
019ba8f552
commit
659218682e
@ -2,22 +2,36 @@ package net.tomatentum.marinara.checks;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
|
||||
import net.tomatentum.marinara.util.ReflectionUtil;
|
||||
|
||||
public record AppliedCheck(InteractionCheck<?> check, Annotation annotation) {
|
||||
|
||||
public boolean pre() {
|
||||
public boolean pre(Object context) {
|
||||
Method[] methods = Arrays.stream(check.getClass().getMethods())
|
||||
.filter(x -> x.getName().equals("preExec"))
|
||||
.toArray(s -> new Method[s]);
|
||||
Method method = ReflectionUtil.getMostSpecificMethod(methods, context.getClass());
|
||||
method.setAccessible(true);
|
||||
try {
|
||||
return (boolean) check.getClass().getMethod("preExec", annotation.getClass()).invoke(check, annotation);
|
||||
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
|
||||
return (boolean) method.invoke(check, annotation);
|
||||
} catch (IllegalAccessException | InvocationTargetException | SecurityException e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean post() {
|
||||
public boolean post(Object context) {
|
||||
Method[] methods = Arrays.stream(check.getClass().getMethods())
|
||||
.filter(x -> x.getName().equals("postExec"))
|
||||
.toArray(s -> new Method[s]);
|
||||
Method method = ReflectionUtil.getMostSpecificMethod(methods, context.getClass());
|
||||
method.setAccessible(true);
|
||||
try {
|
||||
return (boolean) check.getClass().getMethod("postExec", annotation.getClass()).invoke(check, annotation);
|
||||
} catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException | SecurityException e) {
|
||||
return (boolean) method.invoke(check, annotation);
|
||||
} catch (IllegalAccessException | InvocationTargetException | SecurityException e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ import java.lang.annotation.Annotation;
|
||||
|
||||
public interface InteractionCheck<A extends Annotation> {
|
||||
|
||||
public boolean preExec(A annotation);
|
||||
public boolean postExec(A annotation);
|
||||
public boolean preExec(Object context, A annotation);
|
||||
public boolean postExec(Object context, A annotation);
|
||||
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ public abstract class InteractionMethod {
|
||||
public abstract InteractionType getType();
|
||||
|
||||
public void run(Object context) {
|
||||
this.appliedChecks.forEach(AppliedCheck::pre);
|
||||
this.appliedChecks.forEach(x -> x.pre(context));
|
||||
|
||||
method.setAccessible(true);
|
||||
try {
|
||||
@ -69,7 +69,7 @@ public abstract class InteractionMethod {
|
||||
throw new RuntimeException(ex);
|
||||
}
|
||||
|
||||
this.appliedChecks.forEach(AppliedCheck::post);
|
||||
this.appliedChecks.forEach(x -> x.post(context));
|
||||
}
|
||||
|
||||
public Method getMethod() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user