class RouterFunctionWebMvcProvider implements RouterFunctionProvider, ApplicationContextAware {

	/**
	 * The Application context.
	 */
	private ApplicationContext applicationContext;

	/**
	 * Gets web mvc router function paths.
	 *
	 * @return the web mvc router function paths
	 */
	public Optional<Map<String, AbstractRouterFunctionVisitor>> getRouterFunctionPaths() {<FILL_FUNCTION_BODY>}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		this.applicationContext = applicationContext;
	}

	/**
	 * The type Router function visitor.
	 * @author bnasslahsen
	 */
	private class RouterFunctionVisitor extends AbstractRouterFunctionVisitor implements RouterFunctions.Visitor, RequestPredicates.Visitor {
		@Override
		public void route(RequestPredicate predicate, HandlerFunction<?> handlerFunction) {
			this.currentRouterFunctionDatas = new ArrayList<>();
			predicate.accept(this);
			commonRoute();
		}

		@Override
		public void resources(Function<ServerRequest, Optional<Resource>> lookupFunction) {
			// Not yet needed
		}

		@Override
		public void unknown(RouterFunction<?> routerFunction) {
			// Not yet needed
		}

		@Override
		public void unknown(RequestPredicate predicate) {
			// Not yet needed
		}

		@Override
		public void startNested(RequestPredicate predicate) {
			commonStartNested();
			predicate.accept(this);
		}


		@Override
		public void endNested(RequestPredicate predicate) {
			commonEndNested();
		}

	}
}

		Map<String, RouterFunction> routerBeans = applicationContext.getBeansOfType(RouterFunction.class);
		if (CollectionUtils.isEmpty(routerBeans))
			return Optional.empty();
		Map<String, AbstractRouterFunctionVisitor> routerFunctionVisitorMap = new HashMap<>();
		for (Map.Entry<String, RouterFunction> entry : routerBeans.entrySet()) {
			RouterFunction routerFunction = entry.getValue();
			RouterFunctionVisitor routerFunctionVisitor = new RouterFunctionVisitor();
			routerFunction.accept(routerFunctionVisitor);
			routerFunctionVisitorMap.put(entry.getKey(), routerFunctionVisitor);
		}
		return Optional.of(routerFunctionVisitorMap);
	
<no_super_class>