// returns Int.MAX_VALUE if not applicable // returns -score if conversions are needed // or +score if no conversions are needed // Lower score is better // assumes no arguments are null static int methodApplicabilityScore_withPrimitiveWidening_onTypes(Executable m, Class[] argTypes) { Class[] types = m.getParameterTypes(); if (types.length != l(argTypes)) ret Int.MAX_VALUE; int score = 0; bool widenings; for (int i = 0; i < types.length; i++) { Class t = argTypes[i]; Class c = types[i]; int s = typeConversionScoreWithUnboxing(t, c); printVars ifdef typeConversionScore_debug("typeConversionScoreWithUnboxing", +t, +c, +s); if (s == Int.MAX_VALUE) ret Int.MAX_VALUE; if (s < 0) set widenings; score += abs(s); } ret widenings ? -score : score; }