Browse Source

DATACMNS-1180 - Polishing.

Avoid premature resolution of type in TypeDiscoverer.createInfo(…) and thereby simplify constructor in ParameterizedTypeInformation.
pull/271/head
Oliver Gierke 8 years ago
parent
commit
25333d2d40
  1. 9
      src/main/java/org/springframework/data/util/ParameterizedTypeInformation.java
  2. 4
      src/main/java/org/springframework/data/util/TypeDiscoverer.java
  3. 11
      src/test/java/org/springframework/data/util/ParameterizedTypeInformationUnitTests.java

9
src/main/java/org/springframework/data/util/ParameterizedTypeInformation.java

@ -51,9 +51,9 @@ class ParameterizedTypeInformation<T> extends ParentTypeAwareTypeInformation<T> @@ -51,9 +51,9 @@ class ParameterizedTypeInformation<T> extends ParentTypeAwareTypeInformation<T>
* @param type must not be {@literal null}
* @param parent must not be {@literal null}
*/
public ParameterizedTypeInformation(ParameterizedType type, Class<?> resolvedType, TypeDiscoverer<?> parent) {
public ParameterizedTypeInformation(ParameterizedType type, TypeDiscoverer<?> parent) {
super(type, parent, calculateTypeVariables(type, resolvedType, parent));
super(type, parent, calculateTypeVariables(type, parent));
this.type = type;
this.resolved = Lazy.of(() -> isResolvedCompletely());
@ -248,13 +248,12 @@ class ParameterizedTypeInformation<T> extends ParentTypeAwareTypeInformation<T> @@ -248,13 +248,12 @@ class ParameterizedTypeInformation<T> extends ParentTypeAwareTypeInformation<T>
* declared.
*
* @param type must not be {@literal null}.
* @param resolvedType must not be {@literal null}.
* @param parent must not be {@literal null}.
* @return will never be {@literal null}.
*/
private static Map<TypeVariable<?>, Type> calculateTypeVariables(ParameterizedType type, Class<?> resolvedType,
TypeDiscoverer<?> parent) {
private static Map<TypeVariable<?>, Type> calculateTypeVariables(ParameterizedType type, TypeDiscoverer<?> parent) {
Class<?> resolvedType = parent.resolveType(type);
TypeVariable<?>[] typeParameters = resolvedType.getTypeParameters();
Type[] arguments = type.getActualTypeArguments();

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

@ -129,12 +129,10 @@ class TypeDiscoverer<S> implements TypeInformation<S> { @@ -129,12 +129,10 @@ class TypeDiscoverer<S> implements TypeInformation<S> {
return ClassTypeInformation.from((Class<?>) fieldType);
}
Class<S> resolvedType = resolveType(fieldType);
if (fieldType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) fieldType;
return new ParameterizedTypeInformation(parameterizedType, resolvedType, this);
return new ParameterizedTypeInformation(parameterizedType, this);
}
if (fieldType instanceof TypeVariable) {

11
src/test/java/org/springframework/data/util/ParameterizedTypeInformationUnitTests.java

@ -32,7 +32,6 @@ import org.junit.Test; @@ -32,7 +32,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.core.GenericTypeResolver;
/**
* Unit tests for {@link ParameterizedTypeInformation}.
@ -44,12 +43,10 @@ import org.springframework.core.GenericTypeResolver; @@ -44,12 +43,10 @@ import org.springframework.core.GenericTypeResolver;
public class ParameterizedTypeInformationUnitTests {
@Mock ParameterizedType one;
Class<?> resolvedOne;
@Before
public void setUp() {
when(one.getActualTypeArguments()).thenReturn(new Type[0]);
this.resolvedOne = GenericTypeResolver.resolveType(one, emptyMap());
}
@Test
@ -58,8 +55,8 @@ public class ParameterizedTypeInformationUnitTests { @@ -58,8 +55,8 @@ public class ParameterizedTypeInformationUnitTests {
TypeDiscoverer<String> stringParent = new TypeDiscoverer<>(String.class, emptyMap());
TypeDiscoverer<Object> objectParent = new TypeDiscoverer<>(Object.class, emptyMap());
ParameterizedTypeInformation<Object> first = new ParameterizedTypeInformation<>(one, resolvedOne, stringParent);
ParameterizedTypeInformation<Object> second = new ParameterizedTypeInformation<>(one, resolvedOne, objectParent);
ParameterizedTypeInformation<Object> first = new ParameterizedTypeInformation<>(one, stringParent);
ParameterizedTypeInformation<Object> second = new ParameterizedTypeInformation<>(one, objectParent);
assertThat(first).isNotEqualTo(second);
}
@ -69,8 +66,8 @@ public class ParameterizedTypeInformationUnitTests { @@ -69,8 +66,8 @@ public class ParameterizedTypeInformationUnitTests {
TypeDiscoverer<String> stringParent = new TypeDiscoverer<>(String.class, emptyMap());
ParameterizedTypeInformation<Object> first = new ParameterizedTypeInformation<>(one, resolvedOne, stringParent);
ParameterizedTypeInformation<Object> second = new ParameterizedTypeInformation<>(one, resolvedOne, stringParent);
ParameterizedTypeInformation<Object> first = new ParameterizedTypeInformation<>(one, stringParent);
ParameterizedTypeInformation<Object> second = new ParameterizedTypeInformation<>(one, stringParent);
assertThat(first.equals(second)).isTrue();
}

Loading…
Cancel
Save