34 lines
1.3 KiB
Java
34 lines
1.3 KiB
Java
/**
|
|
*
|
|
*/
|
|
package net.abhinavsarkar.spelhelper;
|
|
|
|
import java.lang.reflect.Constructor;
|
|
import java.util.Arrays;
|
|
|
|
import org.springframework.expression.AccessException;
|
|
import org.springframework.expression.ConstructorExecutor;
|
|
import org.springframework.expression.ConstructorResolver;
|
|
import org.springframework.expression.EvaluationContext;
|
|
import org.springframework.expression.spel.support.ReflectiveConstructorResolver;
|
|
|
|
final class ImplicitConstructorResolver implements
|
|
ConstructorResolver {
|
|
|
|
private final ReflectiveConstructorResolver delegate = new ReflectiveConstructorResolver();
|
|
|
|
public ConstructorExecutor resolve(final EvaluationContext context,
|
|
final String typeName, final Class<?>[] argumentTypes) throws AccessException {
|
|
try {
|
|
return delegate.resolve(context, typeName, argumentTypes);
|
|
} catch (AccessException ex) {
|
|
Object variable = ((SpelHelper) context.lookupVariable(SpelHelper.CONTEXT_LOOKUP_KEY))
|
|
.lookupImplicitConstructor(typeName + Arrays.toString(argumentTypes));
|
|
if (variable instanceof Constructor<?>) {
|
|
Constructor<?> constructor = (Constructor<?>) variable;
|
|
return delegate.resolve(context, constructor.getDeclaringClass().getName(), argumentTypes);
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
} |