RouteUtil { public static List<Class<? extends RouterLayout>> getParentLayoutsForNonRouteTarget( Class<?> navigationTarget) { List<Class<? extends RouterLayout>> layouts = new ArrayList<>(); Optional<ParentLayout> parentLayout = AnnotationReader .getAnnotationFor(navigationTarget, ParentLayout.class); if (parentLayout.isPresent()) { layouts.addAll( collectRouteParentLayouts(parentLayout.get().value())); } return layouts; } protected  RouteUtil(); static List<Class<? extends RouterLayout>> getParentLayouts(
            Class<?> component, String path); static String getRoutePath(Class<?> component, Route route); static String getRouteAliasPath(Class<?> component,
            RouteAlias alias); static List<Class<? extends RouterLayout>> getParentLayoutsForNonRouteTarget(
            Class<?> navigationTarget); static Class<? extends RouterLayout> getTopParentLayout(
            final Class<?> component, final String path); static String resolve(Class<?> component, Route route); static void updateRouteRegistry(RouteRegistry registry,
            Set<Class<?>> addedClasses, Set<Class<?>> modifiedClasses,
            Set<Class<?>> deletedClasses);  }
@Test public void expected_to_get_parent_layout() { List<Class<? extends RouterLayout>> parentLayouts = RouteUtil .getParentLayoutsForNonRouteTarget( NonRouteTargetWithParents.class); Assert.assertEquals("Expected one parent layout", 1, parentLayouts.size()); Assert.assertThat( "Get parent layouts for route \"\" with parent prefix \"parent\" gave wrong result.", parentLayouts, IsIterableContainingInOrder .contains(new Class[] { Parent.class })); }