/** * Attention, this doesn't handle primitive classes correctly, nor numerical conversions. */ public static Set getAssignables(Class c1, Class c2) { Set s = new HashSet(); collectAssignables(c1, c2, s); return s; }
Set commonTypes = _MethodUtil.getAssignables(c1, c2); commonTypes.retainAll(_MethodUtil.getAssignables(c2, c1)); if (commonTypes.isEmpty()) { for (Iterator maxIter = max.iterator(); maxIter.hasNext(); ) { Class maxClazz = (Class) maxIter.next(); if (_MethodUtil.isMoreOrSameSpecificParameterType(maxClazz, clazz, false /*bugfixed [1]*/, 0) != 0) { if (_MethodUtil.isMoreOrSameSpecificParameterType(clazz, maxClazz, false /*bugfixed [1]*/, 0) != 0) {
if (paramTypes.length == 0 || paramTypes.length == 1 && paramTypes[0] == int.class /* indexed property reader */) { String propName = _MethodUtil.getBeanPropertyNameFromReaderMethodName( method.getName(), method.getReturnType()); if (propName != null) {
Object[] unwrapArguments(List arguments, BeansWrapper wrapper) throws TemplateModelException { if (arguments == null) { arguments = Collections.EMPTY_LIST; } boolean isVarArg = _MethodUtil.isVarargs(member); int typesLen = argTypes.length; if (isVarArg) { if (typesLen - 1 > arguments.size()) { throw new _TemplateModelException( _MethodUtil.invocationErrorMessageStart(member), " takes at least ", Integer.valueOf(typesLen - 1), typesLen - 1 == 1 ? " argument" : " arguments", ", but ", Integer.valueOf(arguments.size()), " was given."); } } else if (typesLen != arguments.size()) { throw new _TemplateModelException( _MethodUtil.invocationErrorMessageStart(member), " takes ", Integer.valueOf(typesLen), typesLen == 1 ? " argument" : " arguments", ", but ", Integer.valueOf(arguments.size()), " was given."); } Object[] args = unwrapArguments(arguments, argTypes, isVarArg, wrapper); return args; }
Class[] paramTypes = _MethodUtil.getParameterTypes(member); for (int i = 0; i < paramTypes.length; i++) { if (i != 0) sb.append(", "); String paramTypeDecl = ClassUtil.getShortClassName(paramTypes[i]); if (i == paramTypes.length - 1 && paramTypeDecl.endsWith("[]") && _MethodUtil.isVarargs(member)) { sb.append(paramTypeDecl.substring(0, paramTypeDecl.length() - 2)); sb.append("...");
if (genericIsPrim) { if (ifHigherThan >= 3) return 0; return isWideningPrimitiveNumberConversion(specific, generic) ? 3 : 0; } else { // => specificIsPrim && !genericIsPrim if (bugfixed) { } else if (Number.class.isAssignableFrom(specificAsBoxed) && Number.class.isAssignableFrom(generic)) { return isWideningBoxedNumberConversion(specificAsBoxed, generic) ? 3 : 0; } else { return 0; if (bugfixed && !genericIsPrim && Number.class.isAssignableFrom(specific) && Number.class.isAssignableFrom(generic)) { return isWideningBoxedNumberConversion(specific, generic) ? 3 : 0; } else { return 0;
public static TemplateModelException newInvocationTemplateModelException(Object object, Member member, Throwable e) { return newInvocationTemplateModelException( object, member, (member.getModifiers() & Modifier.STATIC) != 0, member instanceof Constructor, e); }
public static Object[] invocationErrorMessageStart(Member member) { return invocationErrorMessageStart(member, member instanceof Constructor); }
@Override boolean isVarargs() { return _MethodUtil.isVarargs(member); }
paramTypes1HasAMoreSpecific = paramTypes1HasAMoreSpecific || _MethodUtil.isMoreOrSameSpecificParameterType(paramType1, paramType2, false, 0) != 0; paramTypes2HasAMoreSpecific = paramTypes2HasAMoreSpecific || _MethodUtil.isMoreOrSameSpecificParameterType(paramType2, paramType1, false, 0) != 0;
public static TemplateModelException newInvocationTemplateModelException(Object object, CallableMemberDescriptor callableMemberDescriptor, Throwable e) { return newInvocationTemplateModelException( object, new _DelayedConversionToString(callableMemberDescriptor) { @Override protected String doConversion(Object callableMemberDescriptor) { return ((CallableMemberDescriptor) callableMemberDescriptor).getDeclaration(); } }, callableMemberDescriptor.isStatic(), callableMemberDescriptor.isConstructor(), e); }
private static TemplateModelException newInvocationTemplateModelException( Object parentObject, Object member, boolean isStatic, boolean isConstructor, Throwable e) { while (e instanceof InvocationTargetException) { Throwable cause = ((InvocationTargetException) e).getTargetException(); if (cause != null) { e = cause; } else { break; } } return new _TemplateModelException(e, invocationErrorMessageStart(member, isConstructor), " threw an exception", isStatic || isConstructor ? (Object) "" : new Object[] { " when invoked on ", parentObject.getClass(), " object ", new _DelayedJQuote(parentObject) }, "; see cause exception in the Java stack trace."); }
Object[] unwrapArguments(List arguments, BeansWrapper wrapper) throws TemplateModelException { if (arguments == null) { arguments = Collections.EMPTY_LIST; } boolean isVarArg = _MethodUtil.isVarargs(member); int typesLen = argTypes.length; if (isVarArg) { if (typesLen - 1 > arguments.size()) { throw new _TemplateModelException( _MethodUtil.invocationErrorMessageStart(member), " takes at least ", Integer.valueOf(typesLen - 1), typesLen - 1 == 1 ? " argument" : " arguments", ", but ", Integer.valueOf(arguments.size()), " was given."); } } else if (typesLen != arguments.size()) { throw new _TemplateModelException( _MethodUtil.invocationErrorMessageStart(member), " takes ", Integer.valueOf(typesLen), typesLen == 1 ? " argument" : " arguments", ", but ", Integer.valueOf(arguments.size()), " was given."); } Object[] args = unwrapArguments(arguments, argTypes, isVarArg, wrapper); return args; }
Class[] paramTypes = _MethodUtil.getParameterTypes(member); for (int i = 0; i < paramTypes.length; i++) { if (i != 0) sb.append(", "); String paramTypeDecl = ClassUtil.getShortClassName(paramTypes[i]); if (i == paramTypes.length - 1 && paramTypeDecl.endsWith("[]") && _MethodUtil.isVarargs(member)) { sb.append(paramTypeDecl.substring(0, paramTypeDecl.length() - 2)); sb.append("...");
if (genericIsPrim) { if (ifHigherThan >= 3) return 0; return isWideningPrimitiveNumberConversion(specific, generic) ? 3 : 0; } else { // => specificIsPrim && !genericIsPrim if (bugfixed) { } else if (Number.class.isAssignableFrom(specificAsBoxed) && Number.class.isAssignableFrom(generic)) { return isWideningBoxedNumberConversion(specificAsBoxed, generic) ? 3 : 0; } else { return 0; if (bugfixed && !genericIsPrim && Number.class.isAssignableFrom(specific) && Number.class.isAssignableFrom(generic)) { return isWideningBoxedNumberConversion(specific, generic) ? 3 : 0; } else { return 0;
Constructor<?> constr = constrs[i]; ReflectionCallableMemberDescriptor memberDesc = new ReflectionCallableMemberDescriptor(constr, constr.getParameterTypes()); if (!_MethodUtil.isVarargs(constr)) { fixedArgMemberDescs.add(memberDesc); } else {
paramTypes1HasAMoreSpecific = paramTypes1HasAMoreSpecific || _MethodUtil.isMoreOrSameSpecificParameterType(paramType1, paramType2, false, 0) != 0; paramTypes2HasAMoreSpecific = paramTypes2HasAMoreSpecific || _MethodUtil.isMoreOrSameSpecificParameterType(paramType2, paramType1, false, 0) != 0;
/** * Invokes the method, passing it the arguments from the list. The actual * method to call from several overloaded methods will be chosen based * on the classes of the arguments. * @throws TemplateModelException if the method cannot be chosen * unambiguously. */ public Object exec(List arguments) throws TemplateModelException { MemberAndArguments maa = overloadedMethods.getMemberAndArguments(arguments, wrapper); try { return maa.invokeMethod(wrapper, object); } catch (Exception e) { if (e instanceof TemplateModelException) throw (TemplateModelException) e; throw _MethodUtil.newInvocationTemplateModelException( object, maa.getCallableMemberDescriptor(), e); } }
private TemplateModelException createNullToPrimitiveArgumentException(int argIdx, Class targetType) { return new _TemplateModelException( _MethodUtil.invocationErrorMessageStart(member), " couldn't be called: The value of the ", new _DelayedOrdinal(Integer.valueOf(argIdx + 1)), " argument was null, but the target Java parameter type (", ClassUtil.getShortClassName(targetType), ") is primitive and so can't store null."); }
Object[] unwrapArguments(List arguments, BeansWrapper wrapper) throws TemplateModelException { if (arguments == null) { arguments = Collections.EMPTY_LIST; } boolean isVarArg = _MethodUtil.isVarargs(member); int typesLen = argTypes.length; if (isVarArg) { if (typesLen - 1 > arguments.size()) { throw new _TemplateModelException( _MethodUtil.invocationErrorMessageStart(member), " takes at least ", Integer.valueOf(typesLen - 1), typesLen - 1 == 1 ? " argument" : " arguments", ", but ", Integer.valueOf(arguments.size()), " was given."); } } else if (typesLen != arguments.size()) { throw new _TemplateModelException( _MethodUtil.invocationErrorMessageStart(member), " takes ", Integer.valueOf(typesLen), typesLen == 1 ? " argument" : " arguments", ", but ", Integer.valueOf(arguments.size()), " was given."); } Object[] args = unwrapArguments(arguments, argTypes, isVarArg, wrapper); return args; }