Skip to content

Commit 1c7c65b

Browse files
committed
Add DomainBuilder as argument to TypeResolver#resolve
1 parent a9d64e9 commit 1c7c65b

File tree

3 files changed

+16
-11
lines changed

3 files changed

+16
-11
lines changed

declarative/api/src/main/java/com/blazebit/domain/declarative/spi/NoopTypeResolver.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package com.blazebit.domain.declarative.spi;
1818

19+
import com.blazebit.domain.boot.model.DomainBuilder;
20+
1921
import java.io.Serializable;
2022
import java.lang.reflect.Type;
2123

@@ -28,7 +30,7 @@
2830
final class NoopTypeResolver implements TypeResolver, Serializable {
2931

3032
@Override
31-
public Object resolve(Class<?> contextClass, Type type) {
33+
public Object resolve(Class<?> contextClass, Type type, DomainBuilder domainBuilder) {
3234
return null;
3335
}
3436

declarative/api/src/main/java/com/blazebit/domain/declarative/spi/TypeResolver.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package com.blazebit.domain.declarative.spi;
1818

19+
import com.blazebit.domain.boot.model.DomainBuilder;
20+
1921
import java.lang.reflect.Type;
2022

2123
/**
@@ -37,8 +39,9 @@ public interface TypeResolver {
3739
*
3840
* @param contextClass The context class against which to resolve the type
3941
* @param type The type to resolve
42+
* @param domainBuilder The domain builder
4043
* @return the resolved type
4144
*/
42-
public Object resolve(Class<?> contextClass, Type type);
45+
public Object resolve(Class<?> contextClass, Type type, DomainBuilder domainBuilder);
4346

4447
}

declarative/impl/src/main/java/com/blazebit/domain/declarative/impl/spi/DeclarativeDomainConfigurationImpl.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ private void handleDomainFunctionMethod(Class<?> domainFunctionsClass, Method me
387387

388388
DomainFunctionBuilder function = domainBuilder.createFunction(name);
389389

390-
ResolvedType resolvedType = resolveType(typeName, elementTypeName, type, elementType, domainFunctionsClass, method, null);
390+
ResolvedType resolvedType = resolveType(domainBuilder, typeName, elementTypeName, type, elementType, domainFunctionsClass, method, null);
391391
String resolvedTypeName = null;
392392
boolean resolvedCollection = false;
393393
if (resolvedType != null) {
@@ -485,7 +485,7 @@ private void handleDomainFunctionParameter(DomainBuilder domainBuilder, DomainFu
485485
}
486486
}
487487

488-
ResolvedType resolvedType = resolveType(typeName, elementTypeName, type, elementType, domainFunctionsClass, method, parameter);
488+
ResolvedType resolvedType = resolveType(domainBuilder, typeName, elementTypeName, type, elementType, domainFunctionsClass, method, parameter);
489489
String resolvedTypeName = null;
490490
boolean resolvedCollection;
491491
if (resolvedType == null) {
@@ -722,7 +722,7 @@ private void handleDomainAttributeMethod(DomainBuilder domainBuilder, EntityDoma
722722
String typeName = domainAttribute.collection() ? "Collection" : domainAttribute.typeName();
723723
Class<?> elementType = domainAttribute.collection() ? domainAttribute.value() : void.class;
724724
String elementTypeName = domainAttribute.collection() ? domainAttribute.typeName() : "";
725-
ResolvedType resolvedType = resolveType(typeName, elementTypeName, type, elementType, domainTypeClass, method, null);
725+
ResolvedType resolvedType = resolveType(domainBuilder, typeName, elementTypeName, type, elementType, domainTypeClass, method, null);
726726
if (resolvedType == null) {
727727
resolvedType = ResolvedType.basic(Object.class);
728728
}
@@ -771,7 +771,7 @@ private void handleDomainAttributeMethod(DomainBuilder domainBuilder, EntityDoma
771771
}
772772
}
773773

774-
protected ResolvedType resolveType(String typeName, String elementTypeName, Class<?> type, Class<?> elementType, Class<?> baseClass, Method method, Parameter parameter) {
774+
protected ResolvedType resolveType(DomainBuilder domainBuilder, String typeName, String elementTypeName, Class<?> type, Class<?> elementType, Class<?> baseClass, Method method, Parameter parameter) {
775775
if (!typeName.isEmpty()) {
776776
if ("Collection".equals(typeName)) {
777777
if (elementTypeName.isEmpty()) {
@@ -795,17 +795,17 @@ protected ResolvedType resolveType(String typeName, String elementTypeName, Clas
795795
} else {
796796
t = type;
797797
}
798-
Object resolvedType = configuredTypeResolver.resolve(baseClass, t);
798+
Object resolvedType = configuredTypeResolver.resolve(baseClass, t, domainBuilder);
799799
if (resolvedType == Object.class) {
800800
return null;
801801
}
802802
if (resolvedType == null && !(t instanceof Class<?>)) {
803803
// If the type could not be resolved, we try to resolve to a class type first and then invoke the resolver again
804804
if (parameter == null) {
805-
resolvedType = configuredTypeResolver.resolve(baseClass, ReflectionUtils.getResolvedMethodReturnType(baseClass, method));
805+
resolvedType = configuredTypeResolver.resolve(baseClass, ReflectionUtils.getResolvedMethodReturnType(baseClass, method), domainBuilder);
806806
} else {
807807
int idx = Arrays.asList(method.getParameters()).indexOf(parameter);
808-
resolvedType = configuredTypeResolver.resolve(baseClass, ReflectionUtils.getResolvedMethodParameterTypes(baseClass, method)[idx]);
808+
resolvedType = configuredTypeResolver.resolve(baseClass, ReflectionUtils.getResolvedMethodParameterTypes(baseClass, method)[idx], domainBuilder);
809809
}
810810
}
811811
if (resolvedType instanceof String) {
@@ -849,7 +849,7 @@ protected ResolvedType resolveType(String typeName, String elementTypeName, Clas
849849
return null;
850850
} else if (Collection.class.isAssignableFrom(returnType)) {
851851
if (configuredTypeResolver != null) {
852-
Object resolvedType = configuredTypeResolver.resolve(baseClass, elementType);
852+
Object resolvedType = configuredTypeResolver.resolve(baseClass, elementType, domainBuilder);
853853
if (resolvedType instanceof String) {
854854
return ResolvedType.collection((String) resolvedType);
855855
} else if (resolvedType instanceof Class<?>) {
@@ -859,7 +859,7 @@ protected ResolvedType resolveType(String typeName, String elementTypeName, Clas
859859
return ResolvedType.collection(elementType);
860860
} else {
861861
if (configuredTypeResolver != null) {
862-
Object resolvedType = configuredTypeResolver.resolve(baseClass, returnType);
862+
Object resolvedType = configuredTypeResolver.resolve(baseClass, returnType, domainBuilder);
863863
if (resolvedType instanceof String) {
864864
return ResolvedType.basic((String) resolvedType);
865865
} else if (resolvedType instanceof Class<?>) {

0 commit comments

Comments
 (0)