Browse Source

DATACMNS-1435 - Fixed Vavr Map component and value type detection.

pull/351/head
Oliver Drotbohm 7 years ago
parent
commit
235a2b42f0
No known key found for this signature in database
GPG Key ID: 6E42B5787543F690
  1. 32
      src/main/java/org/springframework/data/util/TypeDiscoverer.java
  2. 16
      src/test/java/org/springframework/data/util/ClassTypeInformationUnitTests.java

32
src/main/java/org/springframework/data/util/TypeDiscoverer.java

@ -28,16 +28,7 @@ import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable; import java.lang.reflect.TypeVariable;
import java.lang.reflect.WildcardType; import java.lang.reflect.WildcardType;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -61,14 +52,10 @@ class TypeDiscoverer<S> implements TypeInformation<S> {
static { static {
ClassLoader classLoader = TypeDiscoverer.class.getClassLoader();
Set<Class<?>> mapTypes = new HashSet<>(); Set<Class<?>> mapTypes = new HashSet<>();
mapTypes.add(Map.class); mapTypes.add(Map.class);
tryToAddClassTo("javaslang.collection.Map", mapTypes);
try { tryToAddClassTo("io.vavr.collection.Map", mapTypes);
mapTypes.add(ClassUtils.forName("javaslang.collection.Map", classLoader));
} catch (ClassNotFoundException o_O) {}
MAP_TYPES = mapTypes.toArray(new Class[0]); MAP_TYPES = mapTypes.toArray(new Class[0]);
} }
@ -569,6 +556,19 @@ class TypeDiscoverer<S> implements TypeInformation<S> {
return hashCode; return hashCode;
} }
/**
* Tries to load the class with the given name and adds it to the given {@link Set} of classes if present.
*
* @param className must not be {@literal null} or empty.
* @param classes must not be {@literal null}.
*/
private static final void tryToAddClassTo(String className, Set<Class<?>> classes) {
try {
classes.add(ClassUtils.forName(className, TypeDiscoverer.class.getClassLoader()));
} catch (ClassNotFoundException o_O) {}
}
/** /**
* A synthetic {@link ParameterizedType}. * A synthetic {@link ParameterizedType}.
* *

16
src/test/java/org/springframework/data/util/ClassTypeInformationUnitTests.java

@ -392,7 +392,17 @@ public class ClassTypeInformationUnitTests {
@Test // DATACMNS-940 @Test // DATACMNS-940
public void detectsJavaslangMapComponentAndValueType() { public void detectsJavaslangMapComponentAndValueType() {
ClassTypeInformation<SampleMap> information = ClassTypeInformation.from(SampleMap.class); ClassTypeInformation<JavaslangSampleMap> information = ClassTypeInformation.from(JavaslangSampleMap.class);
assertThat(information.getComponentType().getType()).isAssignableFrom(String.class);
assertThat(information.getMapValueType().getType()).isAssignableFrom(Integer.class);
}
@Test // DATACMNS-1434
public void detectsVavrMapComponentAndValueType() {
ClassTypeInformation<VavrSampleMap> information = ClassTypeInformation.from(VavrSampleMap.class);
assertThat(information.getComponentType().getType()).isAssignableFrom(String.class); assertThat(information.getComponentType().getType()).isAssignableFrom(String.class);
@ -611,7 +621,9 @@ public class ClassTypeInformationUnitTests {
static interface SampleTraversable extends Traversable<Integer> {} static interface SampleTraversable extends Traversable<Integer> {}
static interface SampleMap extends javaslang.collection.Map<String, Integer> {} static interface JavaslangSampleMap extends javaslang.collection.Map<String, Integer> {}
static interface VavrSampleMap extends io.vavr.collection.Map<String, Integer> {}
// DATACMNS-1138 // DATACMNS-1138

Loading…
Cancel
Save