// Path: compiller/src/main/java/com/yheriatovych/reductor/processor/ReductorAnnotationProcessor.java
// @AutoService(Processor.class)
// public class ReductorAnnotationProcessor extends BasicAnnotationProcessor {
//     @Override
//     protected Iterable<? extends ProcessingStep> initSteps() {
//         Env env = new Env(processingEnv.getTypeUtils(),
//                 processingEnv.getElementUtils(),
//                 processingEnv.getMessager(),
//                 processingEnv.getFiler());
// 
//         Map<String, ActionCreatorElement> knownActionCreators = new HashMap<>();
// 
//         return Arrays.asList(
//                 new CombinedStateProcessingStep(env),
//                 new ActionCreatorProcessingStep(env, knownActionCreators),
//                 new AutoReducerProcessingStep(env, knownActionCreators)
//         );
//     }
// 
//     @Override
//     public SourceVersion getSupportedSourceVersion() {
//         return SourceVersion.latestSupported();
//     }
// }


import com.google.testing.compile.JavaFileObjects;
import com.yheriatovych.reductor.processor.ReductorAnnotationProcessor;
import org.junit.Test;
import javax.tools.JavaFileObject;
import static com.google.common.truth.Truth.assertAbout;
import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;
                "    String bar();\n" +
                "}");

        JavaFileObject generatedPojo = JavaFileObjects.forSourceString("test.FoobarImpl", "// Generated by com.yheriatovych.reductor.processor.ReductorAnnotationProcessor (https://github.com/Yarikx/reductor)\n" +
                "package test;" +
                "\n" +
                "\n" +
                "public final class FoobarImpl implements Foobar {\n" +
                "  private final int foo;\n" +
                "\n" +
                "  private final String bar;\n" +
                "\n" +
                "  public FoobarImpl(int foo, String bar) {\n" +
                "    this.foo = foo;\n" +
                "    this.bar = bar;\n" +
                "  }\n" +
                "\n" +
                "  @Override\n" +
                "  public int foo() {\n" +
                "    return foo;\n" +
                "  }\n" +
                "\n" +
                "  @Override\n" +
                "  public String bar() {\n" +
                "    return bar;\n" +
                "  }\n" +
                "}");

        assertAbout(javaSource()).that(source)
                .withCompilerOptions("-Xlint:-processing")
// Path: compiller/src/main/java/com/yheriatovych/reductor/processor/ReductorAnnotationProcessor.java
// @AutoService(Processor.class)
// public class ReductorAnnotationProcessor extends BasicAnnotationProcessor {
//     @Override
//     protected Iterable<? extends ProcessingStep> initSteps() {
//         Env env = new Env(processingEnv.getTypeUtils(),
//                 processingEnv.getElementUtils(),
//                 processingEnv.getMessager(),
//                 processingEnv.getFiler());
// 
//         Map<String, ActionCreatorElement> knownActionCreators = new HashMap<>();
// 
//         return Arrays.asList(
//                 new CombinedStateProcessingStep(env),
//                 new ActionCreatorProcessingStep(env, knownActionCreators),
//                 new AutoReducerProcessingStep(env, knownActionCreators)
//         );
//     }
// 
//     @Override
//     public SourceVersion getSupportedSourceVersion() {
//         return SourceVersion.latestSupported();
//     }
// }


// Path: compiller/src/test/java/com/yheriatovych/reductor/processor/CombinedStateImplTest.java
import com.google.testing.compile.JavaFileObjects;
import com.yheriatovych.reductor.processor.ReductorAnnotationProcessor;
import org.junit.Test;
import javax.tools.JavaFileObject;
import static com.google.common.truth.Truth.assertAbout;
import static com.google.testing.compile.JavaSourceSubjectFactory.javaSource;

                "    String bar();\n" +
                "}");

        JavaFileObject generatedPojo = JavaFileObjects.forSourceString("test.FoobarImpl", "// Generated by com.yheriatovych.reductor.processor.ReductorAnnotationProcessor (https://github.com/Yarikx/reductor)\n" +
                "package test;" +
                "\n" +
                "\n" +
                "public final class FoobarImpl implements Foobar {\n" +
                "  private final int foo;\n" +
                "\n" +
                "  private final String bar;\n" +
                "\n" +
                "  public FoobarImpl(int foo, String bar) {\n" +
                "    this.foo = foo;\n" +
                "    this.bar = bar;\n" +
                "  }\n" +
                "\n" +
                "  @Override\n" +
                "  public int foo() {\n" +
                "    return foo;\n" +
                "  }\n" +
                "\n" +
                "  @Override\n" +
                "  public String bar() {\n" +
                "    return bar;\n" +
                "  }\n" +
                "}");

        assertAbout(javaSource()).that(source)
                .withCompilerOptions("-Xlint:-processing")
                .processedWith(new ReductorAnnotationProcessor())