private Method findHandlerInternal()

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");
        }