package net.tomatentum.cutin; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Optional; import java.util.Set; import net.tomatentum.cutin.method.ReflectedMethod; public interface ReflectedMethodFactory { Optional> produce(Method method, Object containingClass); ReflectedMethodFactory addFactory(Factory factory); public interface Factory { Optional> produce(Method method, Object containingObject, ParserResults parserResults); void addParser(Set parser); } public static class ParserResults extends HashMap, Object> { public static ParserResults create(Set 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() {} @SuppressWarnings("unchecked") public T get(Class key) { return (T) super.get(key); } } }