| import com.google.auto.value.AutoValue; |
| import org.checkerframework.checker.calledmethods.qual.*; |
| import org.checkerframework.common.returnsreceiver.qual.This; |
| |
| public class Inheritance { |
| static interface Props { |
| String name(); |
| |
| String somethingElse(); |
| |
| abstract class Builder<B extends Builder<B>> { |
| public abstract @This B name(String value); |
| } |
| } |
| |
| @AutoValue |
| abstract static class PropHolder implements Props { |
| abstract int size(); |
| |
| @Override |
| public String somethingElse() { |
| return "hi"; |
| } |
| |
| static Builder builder() { |
| return new AutoValue_Inheritance_PropHolder.Builder(); |
| } |
| |
| @AutoValue.Builder |
| public abstract static class Builder extends Props.Builder<Builder> { |
| public abstract Builder size(int value); |
| |
| public abstract PropHolder build(); |
| } |
| } |
| |
| static void correct() { |
| PropHolder.Builder b = PropHolder.builder(); |
| b.name("Manu").size(1).build(); |
| } |
| |
| static void wrong() { |
| PropHolder.Builder b = PropHolder.builder(); |
| // :: error: finalizer.invocation |
| b.size(1).build(); |
| } |
| } |