如何在泛型类中跳过使用自动值生成测试生成器



自动值版本:1.3

给定以下类:

@AutoValue
public abstract class SimpleClass<T> {
public static <E> SimpleClass<E> create(Set<? extends E> someField) {
return SimpleClass.<E>builder().someField(someField).build();
}
public static <E> Builder<E> builder() {
return new AutoValue_SimpleClass.Builder<E>();
}
public abstract ImmutableSet<T> someField();
@AutoValue.Builder
public abstract static class Builder<T> {
public abstract Builder<T> someField(Set<? extends T> someField);
public abstract SimpleClass<T> build();
}
}

当自动生成器为上述类生成源代码时,它会生成如下内容:

final class AutoValue_SimpleClass<T> extends $AutoValue_SimpleClass<T> {
AutoValue_SimpleClass(ImmutableSet<T> someField) {
super(someField);
}
static SimpleClass.Builder<E> testBuilder() {
return builder();
}
}

请注意泛型方法testBuilder是如何错误生成的,因为它需要在static之后<E>

这是应该生成的:

static <E> SimpleClass.Builder<E> testBuilder() {
return builder();
}

有没有办法不生成这种testBuilder方法,或者有办法确保AutoValue生成正确的来源?

谢谢。

编辑:刚刚更新到1.4,同样的事情仍在发生

关于GH的问题:https://github.com/google/auto/issues/511

解决方案出人意料地没有涉及太多:

只需重命名静态builder方法

@AutoValue
public abstract class SimpleClass<T> {
public static <E> SimpleClass<E> create(Set<? extends E> someField) {
return SimpleClass.<E>getBuilder().someField(someField).build();
}
public static <E> Builder<E> getBuilder() {
return new AutoValue_SimpleClass.Builder<E>();
}
public abstract ImmutableSet<T> someField();
@AutoValue.Builder
public abstract static class Builder<T> {
public abstract Builder<T> someField(Set<? extends T> someField);
public abstract SimpleClass<T> build();
}
}

这意味着不再生成testBuilder方法。

相关内容

  • 没有找到相关文章

最新更新