private void checkStyleConflicts(ValueType type, Protoclass protoclass) {
    if (protoclass.features().singleton() && !protoclass.constitution().generics().isEmpty()) {
      protoclass.report()
          .annotationNamed(ImmutableMirror.simpleName())
          .warning(About.INCOMPAT,
              "'singleton' feature contains potentially unsafe cast with generics %s."
              + " Can be safe if immutable covariant conversion is possible", type.generics().def());
    }
    if (protoclass.features().intern() && !protoclass.constitution().generics().isEmpty()) {
      protoclass.report()
          .annotationNamed(ImmutableMirror.simpleName())
          .warning(About.INCOMPAT,
              "'intern' feature is automatically turned off when a type have generic parameters");
    }
    if (protoclass.features().prehash()) {
      if (protoclass.styles().style().privateNoargConstructor()) {
        protoclass.report()
            .annotationNamed(ImmutableMirror.simpleName())
            .warning(About.INCOMPAT,
                "'prehash' feature is automatically disabled when 'privateNoargConstructor' style is turned on");
      }
      if (type.simpleSerializableWithoutCopy()) {
        protoclass.report()
            .annotationNamed(ImmutableMirror.simpleName())
            .warning(About.INCOMPAT,
                "'prehash' feature is automatically disabled when type is Serializable and copy constructor is off");
      }
    }
    if (type.style().strictBuilder() && !type.style().toBuilder().isEmpty()) {
      protoclass.report()
          .annotationNamed(ImmutableMirror.simpleName())
          .warning(About.INCOMPAT,
              "'toBuilder' style is incompartible with `strictBuilder` enabled and is automatically disabled");
    }
    if (type.isUseConstructor()
        && protoclass.constitution().factoryOf().isNew()) {
      if (type.isUseValidation()) {
        protoclass.report()
            .annotationNamed(ImmutableMirror.simpleName())
            .error(
                "Interning, singleton and validation will not work correctly with 'new' constructor configured in style");
      } else if (type.constitution.isImplementationHidden()
          && (type.kind().isEnclosing() || type.kind().isNested())) {
        protoclass.report()
            .annotationNamed(ImmutableMirror.simpleName())
            .error("Enclosing with hidden implementation do not mix with 'new' constructor configured in style");
      }
    }
  }
It may grow later in some better abstraction, but as it stands now, currently it is
just a glue between new "protoclass" model and old discovery routines.
value-processor/src/org/immutables/value/processor/meta/ValueTypeComposer.java