package org.jtwig.property.strategy.method.argument; import com.google.common.collect.ImmutableMap; import java.util.Map; public class AssignableTypes { private final IsNativeType isNativeType; private static final Map<Class, Class> BOXED_TYPE = ImmutableMap.<Class, Class>builder() .put(Integer.TYPE, Integer.class) .put(Float.TYPE, Float.class) .put(Double.TYPE, Double.class) .put(Long.TYPE, Long.class) .put(Boolean.TYPE, Boolean.class) .put(Character.TYPE, Character.class) .build(); public AssignableTypes(IsNativeType isNativeType) { this.isNativeType = isNativeType; } public boolean isAssignable(Class methodArgument, Class providedArgument) { Class compareMethodArgument = methodArgument; Class compareProvidedArgument = providedArgument; if (isNativeType.isNative(methodArgument)) { compareMethodArgument = BOXED_TYPE.get(methodArgument); } if (isNativeType.isNative(providedArgument)) { compareProvidedArgument = BOXED_TYPE.get(providedArgument); } return compareMethodArgument.isAssignableFrom(compareProvidedArgument); } }