0

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();
Chris Morris
  • 4,335
  • 4
  • 24
  • 28

0 Answers0