@Override
  public @NotNull <T> PatternCompiler<T> getPatternCompiler(Class @NotNull [] patternClasses) {
    //noinspection unchecked
    return (PatternCompiler<T>)compilers.computeIfAbsent(Arrays.asList(patternClasses), PatternCompilerImpl::new);
  }
@Override
  public @NotNull <T> PatternCompiler<T> getPatternCompiler(Class @NotNull [] patternClasses)