@NotNull
  protected static <F extends Facet<?>, C extends FacetConfiguration> F createFacet(@NotNull Module module, @NotNull FacetType<F, C> type,
                                                                                    @NotNull String name,
                                                                                    @NotNull C configuration,
                                                                                    @Nullable Facet<?> underlying) {
    final F facet = type.createFacet(module, name, configuration, underlying);
    assertTrue(facet.getModule() == module, facet, "module");
    assertTrue(facet.getConfiguration() == configuration, facet, "configuration");
    assertTrue(Objects.equals(facet.getName(), name), facet, "name");
    assertTrue(facet.getUnderlyingFacet() == underlying, facet, "underlyingFacet");
    return facet;
  }
@NotNull
  protected static <F extends Facet<?>, C extends FacetConfiguration> F createFacet(@NotNull Module module, @NotNull FacetType<F, C> type,
                                                                                    @NotNull String name,
                                                                                    @NotNull C configuration,
                                                                                    @Nullable Facet<?> underlying)