@Override
  public Statement apply(final Statement base, final Description description) {
    return new Statement() {
      @Override
      public void evaluate() throws Throwable {
        final LocalProcessor processor = new LocalProcessor(base);
        final Compilation compilation = Compiler.javac().withProcessors(processor).compile(EMPTY);

        if (!compilation.status().equals(Compilation.Status.SUCCESS)) {
          throw new AssertionError(String.format("Compilation failed (status:%s): %s", compilation.status(), compilation.diagnostics()));
        }

        if (!processor.wasEvaluated) {
          throw new AssertionError(String.format("%s was not evaluated. Check that annotation processor %s was triggered " +
                          "(eg. %s annotation is correctly registered)",
                  description.getDisplayName(), processor.getClass().getSimpleName(), DEFAULT_ANNOTATION_CLASS.getCanonicalName()));
        }

        processor.rethrowIfError();
      }
    };
  }
Return multiple {@link ValueType} instances associated with immutable class {@code type}. Multiple
instances can be due to several nested immutable classes.
processor-testlib/src/org/immutables/value/processor/meta/ProcessorRule.java