I have an AutoValue
with an Optional
field. The top-level AutoValue
has a Builder
that provides a nested Builder
for the Optional
field. However, there is a compilation error because the nested Builder
returns the field, itself, instead of an Optional
containing that field. Am I doing this incorrectly? Is there a suggested work around?
Example below:
package com.google.sandbox;
import com.google.auto.value.AutoValue;
import java.util.Optional;
public final class MainClass {
@AutoValue
public abstract static class MainMessage {
public static Builder builder() {
return new AutoValue_MainClass_MainMessage.Builder();
}
public abstract Optional<SubMessage> subMessage();
public abstract Builder toBuilder();
/** Builder for MainMessage. */
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setSubMessage(SubMessage value);
public abstract SubMessage.Builder subMessageBuilder();
public abstract MainMessage build();
}
}
@AutoValue
public abstract static class SubMessage {
public static Builder builder() {
return new AutoValue_MainClass_SubMessage.Builder();
}
public abstract int someValue();
public abstract Builder toBuilder();
/** Builder for SubMessage. */
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder setSomeValue(int value);
public abstract SubMessage build();
}
}
}
Error:
[AutoValueBuilderWrongType] Property builder for subMessage has type com.google.sandbox.MainClass.SubMessage.Builder whose build() method returns com.google.sandbox.MainClass.SubMessage instead of java.util.Optional<com.google.sandbox.MainClass.SubMessage>
public abstract SubMessage.Builder subMessageBuilder();