in statemachine/src/main/java/org/apache/statemachine/StateMachine.java [65:92]
private Method findHandlerInternal(Class<?> state, Class<?> e) throws NoSuchMethodException {
Method[] methods = state.getMethods();
List<Method> candidates = new ArrayList<>();
for (Method m : methods) {
if (m.getName().equals(HANDLER_METHOD_NAME)
&& State.class.isAssignableFrom(m.getReturnType())
&& m.getGenericParameterTypes().length == 1) {
candidates.add(m);
}
}
Method best = null;
for (Method m : candidates) {
if (m.getParameterTypes()[0].isAssignableFrom(e)) {
if (best == null) {
best = m;
} else if (best.getParameterTypes()[0]
.isAssignableFrom(m.getParameterTypes()[0])) {
best = m;
}
}
}
if (best != null) {
best.setAccessible(true);
return best;
}
throw new NoSuchMethodException("Handler doesn't exist");
}