blob: 5987979b22894d01d1c4fbd317465845b98ca66f [file] [log] [blame]
// skip-idempotent
import java.util.List;
public class CheckerFrameworkBuilder {
/**
* Most of this test was copied from
* https://raw.githubusercontent.com/rzwitserloot/lombok/master/test/transform/resource/after-delombok/CheckerFrameworkBuilder.java
* with the exception of the following lines until the next long comment. I have made one change
* outside the scope of these comments: - I fixed the placement of the type annotations, which
* were originally on scoping constructs. I think this is a bug in the delombok pretty-printer
* used to generate this code, but I wasn't able to find the configuration options used to
* reproduce it in the public release.
*
* <p>This test represents exactly the code that Lombok generates with the checkerframework = True
* option in a lombok.config file, including the weird package names they use for the CF and the
* {@code @NotCalledMethods} annotation that they use even though we don't (and never have)
* supported such a thing.
*
* <p>The new code added in this block ensures that the Called Methods checker handles clients of
* the copied code correctly.
*/
public static void testOldCalledMethodsGood(
@org.checkerframework.checker.calledmethods.qual.CalledMethods({"y", "z"}) CheckerFrameworkBuilderBuilder pb) {
pb.build();
}
public static void testOldCalledMethodsBad(
@org.checkerframework.checker.calledmethods.qual.CalledMethods({"y"}) CheckerFrameworkBuilderBuilder pb) {
// :: error: finalizer.invocation
pb.build(); // pb requires y, z
}
public static void testOldRRGood() {
CheckerFrameworkBuilder b = CheckerFrameworkBuilder.builder().y(5).z(6).build();
}
public static void testOldRRBad() {
CheckerFrameworkBuilder b =
// :: error: finalizer.invocation
CheckerFrameworkBuilder.builder().z(6).build(); // also needs to call y
}
/** End new, non-copied code. */
int x;
int y;
int z;
List<String> names;
@java.lang.SuppressWarnings("all")
private static int $default$x() {
return 5;
}
@org.checkerframework.common.aliasing.qual.Unique @java.lang.SuppressWarnings("all")
CheckerFrameworkBuilder(final int x, final int y, final int z, final List<String> names) {
this.x = x;
this.y = y;
this.z = z;
this.names = names;
}
@java.lang.SuppressWarnings("all")
public static class CheckerFrameworkBuilderBuilder {
@java.lang.SuppressWarnings("all")
private boolean x$set;
@java.lang.SuppressWarnings("all")
private int x$value;
@java.lang.SuppressWarnings("all")
private int y;
@java.lang.SuppressWarnings("all")
private int z;
@java.lang.SuppressWarnings("all")
private java.util.ArrayList<String> names;
@org.checkerframework.common.aliasing.qual.Unique @java.lang.SuppressWarnings("all")
CheckerFrameworkBuilderBuilder() {}
@org.checkerframework.checker.builder.qual.ReturnsReceiver
@java.lang.SuppressWarnings("all")
public CheckerFrameworkBuilder.CheckerFrameworkBuilderBuilder x(
CheckerFrameworkBuilder.
@org.checkerframework.checker.builder.qual.NotCalledMethods("x") CheckerFrameworkBuilderBuilder
this,
final int x) {
this.x$value = x;
x$set = true;
return this;
}
@org.checkerframework.checker.builder.qual.ReturnsReceiver
@java.lang.SuppressWarnings("all")
public CheckerFrameworkBuilder.CheckerFrameworkBuilderBuilder y(
CheckerFrameworkBuilder.
@org.checkerframework.checker.builder.qual.NotCalledMethods("y") CheckerFrameworkBuilderBuilder
this,
final int y) {
this.y = y;
return this;
}
@org.checkerframework.checker.builder.qual.ReturnsReceiver
@java.lang.SuppressWarnings("all")
public CheckerFrameworkBuilder.CheckerFrameworkBuilderBuilder z(
CheckerFrameworkBuilder.
@org.checkerframework.checker.builder.qual.NotCalledMethods("z") CheckerFrameworkBuilderBuilder
this,
final int z) {
this.z = z;
return this;
}
@org.checkerframework.checker.builder.qual.ReturnsReceiver
@java.lang.SuppressWarnings("all")
public CheckerFrameworkBuilder.CheckerFrameworkBuilderBuilder name(final String name) {
if (this.names == null) this.names = new java.util.ArrayList<String>();
this.names.add(name);
return this;
}
@org.checkerframework.checker.builder.qual.ReturnsReceiver
@java.lang.SuppressWarnings("all")
public CheckerFrameworkBuilder.CheckerFrameworkBuilderBuilder names(
final java.util.Collection<? extends String> names) {
if (names == null) {
throw new java.lang.NullPointerException("names cannot be null");
}
if (this.names == null) this.names = new java.util.ArrayList<String>();
this.names.addAll(names);
return this;
}
@org.checkerframework.checker.builder.qual.ReturnsReceiver
@java.lang.SuppressWarnings("all")
public CheckerFrameworkBuilder.CheckerFrameworkBuilderBuilder clearNames() {
if (this.names != null) this.names.clear();
return this;
}
@org.checkerframework.dataflow.qual.SideEffectFree
@java.lang.SuppressWarnings("all")
public CheckerFrameworkBuilder build(
CheckerFrameworkBuilder.
@org.checkerframework.checker.builder.qual.CalledMethods({"y", "z"}) CheckerFrameworkBuilderBuilder
this) {
java.util.List<String> names;
switch (this.names == null ? 0 : this.names.size()) {
case 0:
names = java.util.Collections.emptyList();
break;
case 1:
names = java.util.Collections.singletonList(this.names.get(0));
break;
default:
names =
java.util.Collections.unmodifiableList(new java.util.ArrayList<String>(this.names));
}
int x$value = this.x$value;
if (!this.x$set) x$value = CheckerFrameworkBuilder.$default$x();
return new CheckerFrameworkBuilder(x$value, this.y, this.z, names);
}
@org.checkerframework.dataflow.qual.SideEffectFree
@java.lang.Override
@java.lang.SuppressWarnings("all")
public java.lang.String toString() {
return "CheckerFrameworkBuilder.CheckerFrameworkBuilderBuilder(x$value="
+ this.x$value
+ ", y="
+ this.y
+ ", z="
+ this.z
+ ", names="
+ this.names
+ ")";
}
}
@org.checkerframework.dataflow.qual.SideEffectFree
@java.lang.SuppressWarnings("all")
public static CheckerFrameworkBuilder.
@org.checkerframework.common.aliasing.qual.Unique CheckerFrameworkBuilderBuilder builder() {
return new CheckerFrameworkBuilder.CheckerFrameworkBuilderBuilder();
}
}