// Path: agera/src/main/java/com/google/android/agera/Common.java
// static final NullOperator NULL_OPERATOR = new NullOperator();
// 
// Path: agera/src/main/java/com/google/android/agera/Functions.java
// @NonNull
// public static <T> Function<T, T> identityFunction() {
//   @SuppressWarnings("unchecked")
//   final Function<T, T> identityFunction = (Function<T, T>) NULL_OPERATOR;
//   return identityFunction;
// }


import static com.google.android.agera.Common.NULL_OPERATOR;
import static com.google.android.agera.CompiledRepository.addBindWith;
import static com.google.android.agera.CompiledRepository.addCheck;
import static com.google.android.agera.CompiledRepository.addEnd;
import static com.google.android.agera.CompiledRepository.addFilterFailure;
import static com.google.android.agera.CompiledRepository.addFilterSuccess;
import static com.google.android.agera.CompiledRepository.addGetFrom;
import static com.google.android.agera.CompiledRepository.addGoLazy;
import static com.google.android.agera.CompiledRepository.addGoTo;
import static com.google.android.agera.CompiledRepository.addMergeIn;
import static com.google.android.agera.CompiledRepository.addSendTo;
import static com.google.android.agera.CompiledRepository.addTransform;
import static com.google.android.agera.CompiledRepository.compiledRepository;
import static com.google.android.agera.Functions.identityFunction;
import static com.google.android.agera.Mergers.objectsUnequal;
import static com.google.android.agera.Preconditions.checkNotNull;
import static com.google.android.agera.Preconditions.checkState;
import android.os.Looper;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.concurrent.Executor;
  //region RSyncFlow

  @NonNull
  @Override
  public RepositoryCompiler getFrom(@NonNull final Supplier supplier) {
    checkExpect(FLOW);
    addGetFrom(supplier, directives);
    return this;
  }

  @NonNull
  @Override
  public RepositoryCompiler mergeIn(@NonNull final Supplier supplier,
      @NonNull final Merger merger) {
    checkExpect(FLOW);
    addMergeIn(supplier, merger, directives);
    return this;
  }

  @NonNull
  @Override
  public RepositoryCompiler transform(@NonNull final Function function) {
    checkExpect(FLOW);
    addTransform(function, directives);
    return this;
  }

  @NonNull
  @Override
  public RepositoryCompiler check(@NonNull final Predicate predicate) {
// Path: agera/src/main/java/com/google/android/agera/Common.java
// static final NullOperator NULL_OPERATOR = new NullOperator();
// 
// Path: agera/src/main/java/com/google/android/agera/Functions.java
// @NonNull
// public static <T> Function<T, T> identityFunction() {
//   @SuppressWarnings("unchecked")
//   final Function<T, T> identityFunction = (Function<T, T>) NULL_OPERATOR;
//   return identityFunction;
// }


// Path: agera/src/main/java/com/google/android/agera/RepositoryCompiler.java
import static com.google.android.agera.Common.NULL_OPERATOR;
import static com.google.android.agera.CompiledRepository.addBindWith;
import static com.google.android.agera.CompiledRepository.addCheck;
import static com.google.android.agera.CompiledRepository.addEnd;
import static com.google.android.agera.CompiledRepository.addFilterFailure;
import static com.google.android.agera.CompiledRepository.addFilterSuccess;
import static com.google.android.agera.CompiledRepository.addGetFrom;
import static com.google.android.agera.CompiledRepository.addGoLazy;
import static com.google.android.agera.CompiledRepository.addGoTo;
import static com.google.android.agera.CompiledRepository.addMergeIn;
import static com.google.android.agera.CompiledRepository.addSendTo;
import static com.google.android.agera.CompiledRepository.addTransform;
import static com.google.android.agera.CompiledRepository.compiledRepository;
import static com.google.android.agera.Functions.identityFunction;
import static com.google.android.agera.Mergers.objectsUnequal;
import static com.google.android.agera.Preconditions.checkNotNull;
import static com.google.android.agera.Preconditions.checkState;
import android.os.Looper;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.concurrent.Executor;

  //region RSyncFlow

  @NonNull
  @Override
  public RepositoryCompiler getFrom(@NonNull final Supplier supplier) {
    checkExpect(FLOW);
    addGetFrom(supplier, directives);
    return this;
  }

  @NonNull
  @Override
  public RepositoryCompiler mergeIn(@NonNull final Supplier supplier,
      @NonNull final Merger merger) {
    checkExpect(FLOW);
    addMergeIn(supplier, merger, directives);
    return this;
  }

  @NonNull
  @Override
  public RepositoryCompiler transform(@NonNull final Function function) {
    checkExpect(FLOW);
    addTransform(function, directives);
    return this;
  }

  @NonNull
  @Override
  public RepositoryCompiler check(@NonNull final Predicate predicate) {
    return check(identityFunction(), predicate);