Skip to content

Commit

Permalink
feat: Enable Kotlin 2.0.0
Browse files Browse the repository at this point in the history
* Remove NonnullApi
* Remove jsr-305
  • Loading branch information
nym3r0s committed May 27, 2024
1 parent b8eb1c9 commit cd32cb1
Show file tree
Hide file tree
Showing 141 changed files with 1,025 additions and 1,090 deletions.
1 change: 1 addition & 0 deletions api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ signing {
}

dependencies {
implementation("com.google.errorprone:error_prone_annotations:${errorproneVersion}")
api("org.opentest4j:opentest4j:${opentest4jVersion}")
api("org.junit.platform:junit-platform-commons:${junitPlatformVersion}")
}
4 changes: 2 additions & 2 deletions api/src/main/java/net/jqwik/api/AfterFailureMode.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public enum AfterFailureMode {

/**
* Run the property with just the previous falsified and shrunk sample.
*
* <p>
* Only works if sample data could be serialized.
* Will use previous seed otherwise.
*/
Expand All @@ -34,7 +34,7 @@ public enum AfterFailureMode {
/**
* Run the property with just the previous falsified and shrunk sample first,
* if that succeeds run property default behaviour, i.e. data-driven or random seed.
*
* <p>
* Only works if sample data could be serialized.
* Will use previous seed otherwise.
*/
Expand Down
146 changes: 73 additions & 73 deletions api/src/main/java/net/jqwik/api/Arbitraries.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,78 +17,6 @@
@API(status = STABLE, since = "1.0")
public class Arbitraries {

@API(status = INTERNAL)
public static abstract class ArbitrariesFacade {
private static final ArbitrariesFacade implementation;

static {
implementation = FacadeLoader.load(ArbitrariesFacade.class);
}

public abstract <T> Arbitrary<T> oneOf(Collection<Arbitrary<? extends T>> all);

public abstract <M> ActionSequenceArbitrary<M> sequences(Arbitrary<? extends Action<M>> actionArbitrary);

public abstract <T> Arbitrary<T> frequencyOf(List<Tuple2<Integer, Arbitrary<T>>> frequencies);

public abstract <@Nullable T> Arbitrary<T> just(@Nullable T value);

public abstract IntegerArbitrary integers();

public abstract LongArbitrary longs();

public abstract BigIntegerArbitrary bigIntegers();

public abstract FloatArbitrary floats();

public abstract BigDecimalArbitrary bigDecimals();

public abstract DoubleArbitrary doubles();

public abstract ByteArbitrary bytes();

public abstract ShortArbitrary shorts();

public abstract StringArbitrary strings();

public abstract CharacterArbitrary chars();

public abstract <T> Arbitrary<T> defaultFor(Class<T> type, Class<?>[] typeParameters);

public abstract <T> Arbitrary<T> defaultFor(TypeUsage typeUsage, Function<TypeUsage, Arbitrary<Object>> noDefaultResolver);

public abstract <T> Arbitrary<T> lazy(Supplier<Arbitrary<T>> arbitrarySupplier);

public abstract <T> TypeArbitrary<T> forType(Class<T> targetType);

public abstract <K, V> MapArbitrary<K, V> maps(Arbitrary<K> keysArbitrary, Arbitrary<V> valuesArbitrary);

public abstract <K, V> Arbitrary<Map.Entry<K, V>> entries(Arbitrary<K> keysArbitrary, Arbitrary<V> valuesArbitrary);

public abstract <T> Arbitrary<T> recursive(
Supplier<Arbitrary<T>> base,
Function<Arbitrary<T>, Arbitrary<T>> recur,
int minDepth,
int maxDepth
);

public abstract <T> Arbitrary<T> lazyOf(List<Supplier<Arbitrary<T>>> suppliers);

public abstract <T> TraverseArbitrary<T> traverse(Class<T> targetType, Traverser traverser);

public abstract Arbitrary<Character> of(char[] chars);

public abstract <T> Arbitrary<T> of(Collection<T> values);

public abstract <T> Arbitrary<T> create(Supplier<T> supplier);

public abstract <T> Arbitrary<List<T>> shuffle(List<T> values);

public abstract <T> Arbitrary<T> fromGenerator(IntFunction<RandomGenerator<T>> generatorSupplier);

public abstract <T> Arbitrary<T> frequency(List<Tuple2<Integer, T>> frequencies);
}

private Arbitraries() {
}

Expand All @@ -107,7 +35,7 @@ public static <T> Arbitrary<T> fromGenerator(RandomGenerator<T> generator) {
* Create an arbitrary of type T by supplying a corresponding generator of type T.
*
* @param generatorSupplier A function to supply a generator instance given the "size" of a generation attempt
* @param <T> The type of values to generate
* @param <T> The type of values to generate
* @return a new arbitrary instance
*/
@API(status = EXPERIMENTAL, since = "1.8.0")
Expand Down Expand Up @@ -754,4 +682,76 @@ public static <T> SetArbitrary<T> subsetOf(T... values) {
return subsetOf(Arrays.asList(values));
}

@API(status = INTERNAL)
public static abstract class ArbitrariesFacade {
private static final ArbitrariesFacade implementation;

static {
implementation = FacadeLoader.load(ArbitrariesFacade.class);
}

public abstract <T> Arbitrary<T> oneOf(Collection<Arbitrary<? extends T>> all);

public abstract <M> ActionSequenceArbitrary<M> sequences(Arbitrary<? extends Action<M>> actionArbitrary);

public abstract <T> Arbitrary<T> frequencyOf(List<Tuple2<Integer, Arbitrary<T>>> frequencies);

public abstract <@Nullable T> Arbitrary<T> just(@Nullable T value);

public abstract IntegerArbitrary integers();

public abstract LongArbitrary longs();

public abstract BigIntegerArbitrary bigIntegers();

public abstract FloatArbitrary floats();

public abstract BigDecimalArbitrary bigDecimals();

public abstract DoubleArbitrary doubles();

public abstract ByteArbitrary bytes();

public abstract ShortArbitrary shorts();

public abstract StringArbitrary strings();

public abstract CharacterArbitrary chars();

public abstract <T> Arbitrary<T> defaultFor(Class<T> type, Class<?>[] typeParameters);

public abstract <T> Arbitrary<T> defaultFor(TypeUsage typeUsage, Function<TypeUsage, Arbitrary<Object>> noDefaultResolver);

public abstract <T> Arbitrary<T> lazy(Supplier<Arbitrary<T>> arbitrarySupplier);

public abstract <T> TypeArbitrary<T> forType(Class<T> targetType);

public abstract <K, V> MapArbitrary<K, V> maps(Arbitrary<K> keysArbitrary, Arbitrary<V> valuesArbitrary);

public abstract <K, V> Arbitrary<Map.Entry<K, V>> entries(Arbitrary<K> keysArbitrary, Arbitrary<V> valuesArbitrary);

public abstract <T> Arbitrary<T> recursive(
Supplier<Arbitrary<T>> base,
Function<Arbitrary<T>, Arbitrary<T>> recur,
int minDepth,
int maxDepth
);

public abstract <T> Arbitrary<T> lazyOf(List<Supplier<Arbitrary<T>>> suppliers);

public abstract <T> TraverseArbitrary<T> traverse(Class<T> targetType, Traverser traverser);

public abstract Arbitrary<Character> of(char[] chars);

public abstract <T> Arbitrary<T> of(Collection<T> values);

public abstract <T> Arbitrary<T> create(Supplier<T> supplier);

public abstract <T> Arbitrary<List<T>> shuffle(List<T> values);

public abstract <T> Arbitrary<T> fromGenerator(IntFunction<RandomGenerator<T>> generatorSupplier);

public abstract <T> Arbitrary<T> frequency(List<Tuple2<Integer, T>> frequencies);
}

}
100 changes: 50 additions & 50 deletions api/src/main/java/net/jqwik/api/Arbitrary.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package net.jqwik.api;

import javax.annotation.*;
import java.util.*;
import java.util.function.*;
import java.util.stream.*;

import com.google.errorprone.annotations.*;
import org.apiguardian.api.*;
import org.jspecify.annotations.Nullable;
import org.jspecify.annotations.*;

import net.jqwik.api.arbitraries.*;

Expand All @@ -22,49 +22,6 @@
@CheckReturnValue
public interface Arbitrary<@Nullable T> {

@API(status = INTERNAL)
abstract class ArbitraryFacade {
private static final ArbitraryFacade implementation;

static {
implementation = FacadeLoader.load(ArbitraryFacade.class);
}

public abstract <T> ListArbitrary<T> list(Arbitrary<T> elementArbitrary);

public abstract <T> SetArbitrary<T> set(Arbitrary<T> elementArbitrary);

public abstract <T> StreamArbitrary<T> stream(Arbitrary<T> elementArbitrary);

public abstract <T> IteratorArbitrary<T> iterator(Arbitrary<T> elementArbitrary);

public abstract <T, A> ArrayArbitrary<T, A> array(Arbitrary<T> elementArbitrary, Class<A> arrayClass);

public abstract <T> Stream<T> sampleStream(Arbitrary<T> arbitrary);

public abstract <T> Arbitrary<T> injectNull(Arbitrary<T> self, double nullProbability);

public abstract <T> Arbitrary<T> filter(Arbitrary<T> self, Predicate<T> filterPredicate, int maxMisses);

public abstract <T, U> Arbitrary<U> map(Arbitrary<T> self, Function<T, U> mapper);

public abstract <T, U> Arbitrary<U> flatMap(Arbitrary<T> self, Function<T, Arbitrary<U>> mapper);

public abstract <T> Arbitrary<T> ignoreExceptions(Arbitrary<T> self, int maxThrows, Class<? extends Throwable>[] exceptionTypes);

public abstract <T> Arbitrary<T> dontShrink(Arbitrary<T> self);

public abstract <T> Arbitrary<T> configureEdgeCases(Arbitrary<T> self, Consumer<EdgeCases.Config<T>> configurator);

public abstract <T> Arbitrary<T> withoutEdgeCases(Arbitrary<T> self);

public abstract <T> RandomGenerator<T> memoizedGenerator(Arbitrary<T> self, int genSize, boolean withEdgeCases);

public abstract <T> Arbitrary<T> fixGenSize(Arbitrary<T> self, int genSize);

public abstract <T> Arbitrary<List<T>> collect(Arbitrary<T> self, Predicate<List<T>> until);
}

/**
* Create the random generator for an arbitrary.
*
Expand Down Expand Up @@ -197,7 +154,7 @@ default void forEachValue(Consumer<? super T> action) {
if (!allValues().isPresent())
throw new AssertionError("Cannot generate all values of " + this);
allValues().ifPresent(
stream -> stream.forEach(action::accept));
stream -> stream.forEach(action::accept));
}

/**
Expand Down Expand Up @@ -566,7 +523,7 @@ default Arbitrary<T> ignoreException(int maxThrows, Class<? extends Throwable> e
* {@code exceptionTypes} during generation.
*
* <p>
* If {@code exceptionTypes} is empty, the original arbitrary is returned.
* If {@code exceptionTypes} is empty, the original arbitrary is returned.
* </p>
*
* @param exceptionTypes The exception types to ignore
Expand All @@ -585,11 +542,11 @@ default Arbitrary<T> ignoreExceptions(Class<? extends Throwable>... exceptionTyp
* {@code exceptionTypes} during generation.
*
* <p>
* If {@code exceptionTypes} is empty, the original arbitrary is returned.
* If {@code exceptionTypes} is empty, the original arbitrary is returned.
* </p>
*
* @param maxThrows The maximum number of subsequent exception throws before generation
* is stopped.
* @param maxThrows The maximum number of subsequent exception throws before generation
* is stopped.
* @param exceptionTypes The exception types to ignore
* @return a new arbitrary instance
* @throws TooManyFilterMissesException if more than {@code maxThrows} exceptions are thrown in a row
Expand Down Expand Up @@ -642,4 +599,47 @@ default Arbitrary<T> withoutEdgeCases() {
return ArbitraryFacade.implementation.withoutEdgeCases(Arbitrary.this);
}

@API(status = INTERNAL)
abstract class ArbitraryFacade {
private static final ArbitraryFacade implementation;

static {
implementation = FacadeLoader.load(ArbitraryFacade.class);
}

public abstract <T> ListArbitrary<T> list(Arbitrary<T> elementArbitrary);

public abstract <T> SetArbitrary<T> set(Arbitrary<T> elementArbitrary);

public abstract <T> StreamArbitrary<T> stream(Arbitrary<T> elementArbitrary);

public abstract <T> IteratorArbitrary<T> iterator(Arbitrary<T> elementArbitrary);

public abstract <T, A> ArrayArbitrary<T, A> array(Arbitrary<T> elementArbitrary, Class<A> arrayClass);

public abstract <T> Stream<T> sampleStream(Arbitrary<T> arbitrary);

public abstract <T> Arbitrary<T> injectNull(Arbitrary<T> self, double nullProbability);

public abstract <T> Arbitrary<T> filter(Arbitrary<T> self, Predicate<T> filterPredicate, int maxMisses);

public abstract <T, U> Arbitrary<U> map(Arbitrary<T> self, Function<T, U> mapper);

public abstract <T, U> Arbitrary<U> flatMap(Arbitrary<T> self, Function<T, Arbitrary<U>> mapper);

public abstract <T> Arbitrary<T> ignoreExceptions(Arbitrary<T> self, int maxThrows, Class<? extends Throwable>[] exceptionTypes);

public abstract <T> Arbitrary<T> dontShrink(Arbitrary<T> self);

public abstract <T> Arbitrary<T> configureEdgeCases(Arbitrary<T> self, Consumer<EdgeCases.Config<T>> configurator);

public abstract <T> Arbitrary<T> withoutEdgeCases(Arbitrary<T> self);

public abstract <T> RandomGenerator<T> memoizedGenerator(Arbitrary<T> self, int genSize, boolean withEdgeCases);

public abstract <T> Arbitrary<T> fixGenSize(Arbitrary<T> self, int genSize);

public abstract <T> Arbitrary<List<T>> collect(Arbitrary<T> self, Predicate<List<T>> until);
}

}
5 changes: 2 additions & 3 deletions api/src/main/java/net/jqwik/api/ArbitrarySupplier.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
* the actual implementation class.
*
* <p>
* Either {@link #supplyFor(TypeUsage)} or {@link #get()} must be overridden.
* But not both.
* Either {@link #supplyFor(TypeUsage)} or {@link #get()} must be overridden.
* But not both.
* </p>
*
* @see ForAll
Expand All @@ -33,7 +33,6 @@ public interface ArbitrarySupplier<T> extends Supplier<Arbitrary<T>> {
* <p>This method takes precedence if both {@link #supplyFor(TypeUsage)} and {@link #get()} are overridden.</p>
*
* @param targetType Specifies the type to generate.
*
* @return A new arbitrary instance
*/
@Nullable
Expand Down
6 changes: 3 additions & 3 deletions api/src/main/java/net/jqwik/api/Builders.java
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,9 @@ private boolean mutatorsAreEqual(
for (int i = 0; i < leftMutators.size(); i++) {
Tuple3<Double, Arbitrary<Object>, BiFunction<B, Object, B>> left = leftMutators.get(i);
Tuple3<Double, Arbitrary<Object>, BiFunction<B, Object, B>> right = rightMutators.get(i);
if(!left.get1().equals(right.get1())) return false;
if(!left.get2().equals(right.get2())) return false;
if(!LambdaSupport.areEqual(left.get3(), right.get3())) return false;
if (!left.get1().equals(right.get1())) return false;
if (!left.get2().equals(right.get2())) return false;
if (!LambdaSupport.areEqual(left.get3(), right.get3())) return false;
}
return true;
}
Expand Down
Loading

0 comments on commit cd32cb1

Please sign in to comment.