3

Is it possible to force Java Immutables annotation processing library to generate toString method for an abstract class which already inherits non-default toString() method?

For example:

@Value.Immutables
public abstract class MyRuntimeException extends RuntimeException {
    @Value.Default
    public abstract long timestamp();
    @Value.Redacted
    public abstract long secretTimestamp();
}

And result to be:

MyRuntimeException e = ImmutableMyRuntimeException.builder().timestamp(111)
                                              .secretTimestamp(222).build();
assert e.toString().contains("111");
assert !e.toString().contains("222");

RuntimeException inherits toString() from Throwables and what I have seen so far Immutables library skips generating toString() because of that.

DaTval
  • 316
  • 1
  • 6
  • 14

1 Answers1

2

There is one such way. The trick is to declare abstract toString method signature in abstract value type.

@Value.Immutable
public abstract class MyRuntimeException extends RuntimeException {
    public abstract long timestamp();
    public abstract long secretTimestamp();
    @Override public abstract String toString(); //<-- forces toString impl
}
Ievgen Lukash
  • 390
  • 2
  • 7