@Nullable
  public static GenerationState analyzeAndGenerate(@NotNull KotlinCoreEnvironment environment) {
    AnalysisResult result = analyze(environment, null);

    if (result == null) {
      return null;
    }

    if (!result.getShouldGenerateCode()) return null;

    result.throwIfError();

    return generate(environment, result, environment.getSourceFiles(), null, null, null);
  }