diff --git a/pom.xml b/pom.xml
index 3ce145bc6..a2408919c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,6 +18,7 @@
DATACMNS
2.0.4
+ 0.9.0
2.11.7
1.4.8
@@ -150,6 +151,12 @@
${javaslang}
true
+
+ io.vavr
+ vavr
+ ${vavr}
+ true
+
javax.el
diff --git a/src/main/java/org/springframework/data/repository/util/JavaslangCollections.java b/src/main/java/org/springframework/data/repository/util/JavaslangCollections.java
index 6ee4b4221..074fd1c93 100644
--- a/src/main/java/org/springframework/data/repository/util/JavaslangCollections.java
+++ b/src/main/java/org/springframework/data/repository/util/JavaslangCollections.java
@@ -66,7 +66,7 @@ class JavaslangCollections {
return ((javaslang.collection.Set>) source).toJavaSet();
}
- throw new IllegalArgumentException("Unsupported Javaslang collection " + source);
+ throw new IllegalArgumentException("Unsupported Javaslang collection " + source.getClass());
}
}
diff --git a/src/main/java/org/springframework/data/repository/util/QueryExecutionConverters.java b/src/main/java/org/springframework/data/repository/util/QueryExecutionConverters.java
index 0fd04f906..4cb24fdf9 100644
--- a/src/main/java/org/springframework/data/repository/util/QueryExecutionConverters.java
+++ b/src/main/java/org/springframework/data/repository/util/QueryExecutionConverters.java
@@ -16,7 +16,6 @@
package org.springframework.data.repository.util;
import javaslang.collection.Seq;
-import javaslang.collection.Traversable;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import lombok.Value;
@@ -62,6 +61,7 @@ import com.google.common.base.Optional;
* {@code javaslang.control.Option} - as of 1.13
* {@code javaslang.collection.Seq}, {@code javaslang.collection.Map}, {@code javaslang.collection.Set} - as of
* 1.13
+ * {@code io.vavr.collection.Seq}, {@code io.vavr.collection.Map}, {@code io.vavr.collection.Set} - as of 2.0
*
*
* @author Oliver Gierke
@@ -79,6 +79,8 @@ public abstract class QueryExecutionConverters {
QueryExecutionConverters.class.getClassLoader());
private static final boolean JAVASLANG_PRESENT = ClassUtils.isPresent("javaslang.control.Option",
QueryExecutionConverters.class.getClassLoader());
+ private static final boolean VAVR_PRESENT = ClassUtils.isPresent("io.vavr.control.Option",
+ QueryExecutionConverters.class.getClassLoader());
private static final Set WRAPPER_TYPES = new HashSet();
private static final Set> UNWRAPPERS = new HashSet>();
@@ -121,6 +123,16 @@ public abstract class QueryExecutionConverters {
ALLOWED_PAGEABLE_TYPES.add(Seq.class);
}
+
+ if (VAVR_PRESENT) {
+
+ WRAPPER_TYPES.add(NullableWrapperToVavrOptionConverter.getWrapperType());
+ WRAPPER_TYPES.add(VavrCollections.ToJavaConverter.INSTANCE.getWrapperType());
+
+ UNWRAPPERS.add(VavrOptionUnwrapper.INSTANCE);
+
+ ALLOWED_PAGEABLE_TYPES.add(io.vavr.collection.Seq.class);
+ }
}
private QueryExecutionConverters() {}
@@ -194,6 +206,11 @@ public abstract class QueryExecutionConverters {
conversionService.addConverter(JavaslangCollections.FromJavaConverter.INSTANCE);
}
+ if (VAVR_PRESENT) {
+ conversionService.addConverter(new NullableWrapperToVavrOptionConverter(conversionService));
+ conversionService.addConverter(VavrCollections.FromJavaConverter.INSTANCE);
+ }
+
conversionService.addConverter(new NullableWrapperToFutureConverter(conversionService));
}
@@ -468,7 +485,7 @@ public abstract class QueryExecutionConverters {
@Override
@SuppressWarnings("unchecked")
protected Object wrap(Object source) {
- return (javaslang.control.Option