@Override
public void beforeEach(final ExtensionContext context) {
    Store store = context.getStore(NAMESPACE);

    List<TestLifecycleAware> lifecycleAwareContainers = collectParentTestInstances(context)
        .parallelStream()
        .flatMap(this::findRestartContainers)
        .peek(adapter -> store.getOrComputeIfAbsent(adapter.getKey(), k -> adapter.start()))
        .filter(this::isTestLifecycleAware)
        .map(lifecycleAwareAdapter -> (TestLifecycleAware) lifecycleAwareAdapter.container)
        .collect(Collectors.toList());

    store.put(LOCAL_LIFECYCLE_AWARE_CONTAINERS, lifecycleAwareContainers);
    signalBeforeTestToContainers(lifecycleAwareContainers, testDescriptionFrom(context));
}

// ...

private Stream<StoreAdapter> findRestartContainers(Object testInstance) {
    return ReflectionUtils
        .findFields(testInstance.getClass(), isRestartContainer(), ReflectionUtils.HierarchyTraversalMode.TOP_DOWN)
        .stream()
        .map(f -> getContainerInstance(testInstance, f));
}

private Predicate<Field> isRestartContainer() {
    return isContainer().and(ReflectionUtils::isNotStatic);
}

private static Predicate<Field> isContainer() {
    return field -> {
        boolean isAnnotatedWithContainer = AnnotationSupport.isAnnotated(field, Container.class);
        if (isAnnotatedWithContainer) {
            boolean isStartable = Startable.class.isAssignableFrom(field.getType());

            if (!isStartable) {
                throw new ExtensionConfigurationException(
                    String.format("FieldName: %s does not implement Startable", field.getName())
                );
            }
            return true;
        }
        return false;
    };
}