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
All checks were successful
github-mirror / push-github (push) Successful in 4s
Build / Gradle-Build (push) Successful in 12s
Test / Gradle-Test (push) Successful in 17s

This commit is contained in:
tueem 2024-11-29 18:17:33 +01:00
parent 019ba8f552
commit 659218682e
Signed by: tueem
GPG Key ID: 65C8667EC17A88FB
3 changed files with 24 additions and 10 deletions

@ -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() {