feat(parser): MethodParser rework
Some checks failed
Build / Gradle-Build (push) Failing after 9s
Publish / Gradle-Publish (push) Failing after 8s
Test / Gradle-Test (push) Failing after 9s

This commit is contained in:
Tueem 2025-04-14 19:01:01 +02:00
parent eccad71837
commit e425989106
Signed by: tueem
GPG Key ID: F2CE0513D231AD7A
3 changed files with 27 additions and 11 deletions

View File

@ -1,5 +1,7 @@
package net.tomatentum.cutin;
import java.lang.reflect.Method;
public interface MethodParser {
void parse();
Object parse(Method method, Object containingObject);
}

View File

@ -1,8 +1,9 @@
package net.tomatentum.cutin;
import java.lang.reflect.Method;
import java.util.List;
import java.util.HashMap;
import java.util.Optional;
import java.util.Set;
import net.tomatentum.cutin.method.ReflectedMethod;
@ -13,8 +14,22 @@ public interface ReflectedMethodFactory<I extends Object, C extends Object> {
public interface Factory<I extends Object, C extends Object> {
Optional<ReflectedMethod<I, C>> produce(Method method, Object containingObject);
void addParser(ReflectedMethod<I, C> method, List<MethodParser> parser);
Optional<ReflectedMethod<I, C>> produce(Method method, Object containingObject, ParserResults parserResults);
void addParser(Set<MethodParser> parser);
}
public static class ParserResults extends HashMap<Class<? extends MethodParser>, Object> {
public static ParserResults create(Set<MethodParser> parser, Method method, Object containingObject) {
ParserResults results = new ParserResults();
for (MethodParser p : parser) {
results.put(p.getClass(), p.parse(method, containingObject));
}
return results;
}
private ParserResults() {}
}
}

View File

@ -2,8 +2,10 @@ package net.tomatentum.cutin;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -50,13 +52,10 @@ public class ReflectedMethodFactoryImpl<I extends Object, C extends Object> impl
}
private Optional<ReflectedMethod<I, C>> factoryProduce(Factory<I, C> factory, Method method, Object containingClass) {
List<MethodParser> parser = new ArrayList<>();
Optional<ReflectedMethod<I, C>> m = factory.produce(method, containingClass);
m.ifPresent(x -> {
factory.addParser(x, parser);
parser.forEach(MethodParser::parse);
});
return m;
Set<MethodParser> parser = new HashSet<>();
factory.addParser(parser);
ParserResults results = ParserResults.create(parser, method, containingClass);
return factory.produce(method, containingClass, results);
}
}