diff --git a/core/src/main/java/org/jruby/java/dispatch/CallableSelector.java b/core/src/main/java/org/jruby/java/dispatch/CallableSelector.java index 68921154ac7..3e13c34baf8 100644 --- a/core/src/main/java/org/jruby/java/dispatch/CallableSelector.java +++ b/core/src/main/java/org/jruby/java/dispatch/CallableSelector.java @@ -19,8 +19,9 @@ import org.jruby.javasupport.JavaUtil; import org.jruby.javasupport.ParameterTypes; import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.util.CodegenUtils; import org.jruby.util.collections.IntHashMap; +import static org.jruby.util.CodegenUtils.getBoxType; +import static org.jruby.util.CodegenUtils.prettyParams; /** * Method selection logic for calling from Ruby to Java. @@ -200,7 +201,7 @@ private static T findMatchingCallableForArgs(final Ru method = mostSpecific; if ( ambiguous ) { - runtime.getWarnings().warn("ambiguous Java methods found, using " + ((Member) ((JavaCallable) method).accessibleObject()).getName() + CodegenUtils.prettyParams(msTypes)); + runtime.getWarnings().warn("ambiguous Java methods found, using " + ((Member) ((JavaCallable) method).accessibleObject()).getName() + prettyParams(msTypes)); } } } @@ -336,7 +337,7 @@ private static interface Matcher { private static final Matcher EXACT = new Matcher() { public boolean match(final Class type, final IRubyObject arg) { final Class argClass = getJavaClass(arg); - return type == argClass || (type.isPrimitive() && CodegenUtils.getBoxType(type) == argClass); + return type == argClass || (type.isPrimitive() && getBoxType(type) == argClass); } @Override public String toString() { return "EXACT"; } // for debugging }; @@ -480,7 +481,7 @@ private static boolean primitivable(final Class type, final IRubyObject arg) private static int calcTypePreference(Class type, final IRubyObject arg) { final boolean primitive = type.isPrimitive(); - if ( primitive ) type = CodegenUtils.getBoxType(type); + if ( primitive ) type = getBoxType(type); if ( Number.class.isAssignableFrom(type) || Character.class == type ) { if ( arg instanceof RubyFixnum ) { diff --git a/core/src/main/java/org/jruby/java/invokers/RubyToJavaInvoker.java b/core/src/main/java/org/jruby/java/invokers/RubyToJavaInvoker.java index 2b94193e0c6..9f4246cb68a 100644 --- a/core/src/main/java/org/jruby/java/invokers/RubyToJavaInvoker.java +++ b/core/src/main/java/org/jruby/java/invokers/RubyToJavaInvoker.java @@ -23,7 +23,7 @@ import org.jruby.runtime.Arity; import org.jruby.runtime.Visibility; import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.util.CodegenUtils; +import static org.jruby.util.CodegenUtils.prettyParams; import org.jruby.util.collections.IntHashMap; public abstract class RubyToJavaInvoker extends JavaMethod { @@ -345,9 +345,9 @@ static RaiseException newNameErrorDueArgumentTypeMismatch(final Ruby runtime, org.jruby.javasupport.JavaMethod method = (org.jruby.javasupport.JavaMethod) methods[0]; error.append("method '").append( method.getValue().getName() ).append("'"); } - error.append(" for arguments ") - .append( CodegenUtils.prettyParams(argTypes) ) - .append(" on "); + error.append(" for arguments "); + prettyParams(error, argTypes); + error.append(" on "); if (receiver instanceof RubyModule) { error.append( ((RubyModule) receiver).getName() ); @@ -359,7 +359,7 @@ static RaiseException newNameErrorDueArgumentTypeMismatch(final Ruby runtime, error.append("\n available overloads:"); for (ParameterTypes method : methods) { Class[] paramTypes = method.getParameterTypes(); - error.append("\n ").append( CodegenUtils.prettyParams(paramTypes) ); + error.append("\n "); prettyParams( error, paramTypes ); } } @@ -371,7 +371,7 @@ private static Class getClass(final IRubyObject object) { if (object == null) return void.class; if (object instanceof ConcreteJavaProxy) { - return ((ConcreteJavaProxy)object).getJavaClass(); + return ((ConcreteJavaProxy) object).getJavaClass(); } return object.getClass(); } diff --git a/core/src/main/java/org/jruby/java/proxies/JavaProxy.java b/core/src/main/java/org/jruby/java/proxies/JavaProxy.java index de98f24ff4a..72b79101352 100644 --- a/core/src/main/java/org/jruby/java/proxies/JavaProxy.java +++ b/core/src/main/java/org/jruby/java/proxies/JavaProxy.java @@ -442,9 +442,9 @@ private MethodInvoker getMethodInvoker(Method method) { private RubyMethod getRubyMethod(String name, Class... argTypes) { Method jmethod = getMethod(name, argTypes); if (Modifier.isStatic(jmethod.getModifiers())) { - return RubyMethod.newMethod(metaClass.getSingletonClass(), CodegenUtils.prettyParams(argTypes), metaClass.getSingletonClass(), name, getMethodInvoker(jmethod), getMetaClass()); + return RubyMethod.newMethod(metaClass.getSingletonClass(), CodegenUtils.prettyParams(argTypes).toString(), metaClass.getSingletonClass(), name, getMethodInvoker(jmethod), getMetaClass()); } else { - return RubyMethod.newMethod(metaClass, CodegenUtils.prettyParams(argTypes), metaClass, name, getMethodInvoker(jmethod), this); + return RubyMethod.newMethod(metaClass, CodegenUtils.prettyParams(argTypes).toString(), metaClass, name, getMethodInvoker(jmethod), this); } } @@ -486,14 +486,15 @@ public RubyClass getSingletonClass() { } private void confirmCachedProxy(String message) { - RubyClass realClass = metaClass.getRealClass(); - if (!realClass.getCacheProxy()) { + final RubyClass realClass = metaClass.getRealClass(); + if ( ! realClass.getCacheProxy() ) { + final Ruby runtime = getRuntime(); if (Java.OBJECT_PROXY_CACHE) { - getRuntime().getWarnings().warnOnce(IRubyWarnings.ID.NON_PERSISTENT_JAVA_PROXY, MessageFormat.format(message, realClass)); + runtime.getWarnings().warnOnce(IRubyWarnings.ID.NON_PERSISTENT_JAVA_PROXY, MessageFormat.format(message, realClass)); } else { - getRuntime().getWarnings().warn(MessageFormat.format(message, realClass)); + runtime.getWarnings().warn(MessageFormat.format(message, realClass)); realClass.setCacheProxy(true); - getRuntime().getJavaSupport().getObjectProxyCache().put(getObject(), this); + runtime.getJavaSupport().getObjectProxyCache().put(getObject(), this); } } } diff --git a/core/src/main/java/org/jruby/javasupport/JavaMethod.java b/core/src/main/java/org/jruby/javasupport/JavaMethod.java index e6153129caf..a0c6b7b401e 100644 --- a/core/src/main/java/org/jruby/javasupport/JavaMethod.java +++ b/core/src/main/java/org/jruby/javasupport/JavaMethod.java @@ -36,6 +36,13 @@ ***** END LICENSE BLOCK *****/ package org.jruby.javasupport; +import java.lang.annotation.Annotation; +import java.lang.reflect.AccessibleObject; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.Type; + import org.jruby.Ruby; import org.jruby.RubyBoolean; import org.jruby.RubyClass; @@ -50,16 +57,11 @@ import org.jruby.javasupport.proxy.JavaProxyMethod; import org.jruby.runtime.ObjectAllocator; import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.util.CodegenUtils; import org.jruby.util.log.Logger; import org.jruby.util.log.LoggerFactory; -import java.lang.annotation.Annotation; -import java.lang.reflect.AccessibleObject; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.lang.reflect.Type; +import static org.jruby.util.CodegenUtils.getBoxType; +import static org.jruby.util.CodegenUtils.prettyParams; @JRubyClass(name="Java::JavaMethod") public class JavaMethod extends JavaCallable { @@ -96,7 +98,7 @@ public JavaMethod(Ruby runtime, Method method) { this.isFinal = Modifier.isFinal(method.getModifiers()); final Class returnType = method.getReturnType(); if (returnType.isPrimitive() && returnType != void.class) { - this.boxedReturnType = CodegenUtils.getBoxType(returnType); + this.boxedReturnType = getBoxType(returnType); } else { this.boxedReturnType = returnType; } @@ -654,6 +656,6 @@ public static RaiseException newMethodNotFoundError(Ruby runtime, Class target, } public static RaiseException newArgSizeMismatchError(Ruby runtime, Class ... argTypes) { - return runtime.newArgumentError("argument count mismatch for method signature " + CodegenUtils.prettyParams(argTypes)); + return runtime.newArgumentError("argument count mismatch for method signature " + prettyParams(argTypes)); } } diff --git a/core/src/main/java/org/jruby/util/CodegenUtils.java b/core/src/main/java/org/jruby/util/CodegenUtils.java index 974d57668bc..b58c4f4e048 100644 --- a/core/src/main/java/org/jruby/util/CodegenUtils.java +++ b/core/src/main/java/org/jruby/util/CodegenUtils.java @@ -109,72 +109,73 @@ public static String humanShort(Class n) { * Create a method signature from the given param types and return values */ public static String sig(Class retval, Class... params) { - return sigParams(params) + ci(retval); + return sigParams(new StringBuilder(), null, params).append( ci(retval) ).toString(); } public static String sig(Class[] retvalParams) { Class[] justParams = new Class[retvalParams.length - 1]; System.arraycopy(retvalParams, 1, justParams, 0, justParams.length); - return sigParams(justParams) + ci(retvalParams[0]); + return sigParams(new StringBuilder(), null, justParams).append( ci(retvalParams[0]) ).toString(); } public static String sig(Class retval, String descriptor, Class... params) { - return sigParams(descriptor, params) + ci(retval); + return sigParams(new StringBuilder(), descriptor, params).append( ci(retval) ).toString(); } + @Deprecated // not used public static String sigParams(Class... params) { - StringBuilder signature = new StringBuilder("("); - - for (int i = 0; i < params.length; i++) { - signature.append(ci(params[i])); - } - - signature.append(")"); - - return signature.toString(); + return sigParams(new StringBuilder(), null, params).toString(); } + @Deprecated // not used public static String sigParams(String descriptor, Class... params) { - StringBuilder signature = new StringBuilder("("); + return sigParams(new StringBuilder(), descriptor, params).toString(); + } - signature.append(descriptor); + private static StringBuilder sigParams(final StringBuilder str, + final String descriptor, final Class... params) { + str.append('('); + if ( descriptor != null ) str.append(descriptor); for (int i = 0; i < params.length; i++) { - signature.append(ci(params[i])); + str.append( ci( params[i] ) ); } - signature.append(")"); - - return signature.toString(); + return str.append(')'); } public static String pretty(Class retval, Class... params) { return prettyParams(params) + human(retval); } - public static String prettyParams(Class... params) { - StringBuilder signature = new StringBuilder("("); + public static CharSequence prettyParams(final Class... types) { + return prettyParams(new StringBuilder(), types); + } - for (int i = 0; i < params.length; i++) { - signature.append(human(params[i])); - if (i < params.length - 1) signature.append(','); - } + public static StringBuilder prettyParams(final StringBuilder str, final Class... types) { + final int len1 = types.length - 1; + str.append('('); - signature.append(")"); + for ( int i = 0; i <= len1; i++ ) { + str.append( human( types[i] ) ); + if ( i < len1 ) str.append(','); + } - return signature.toString(); + return str.append(')'); } - public static String prettyShortParams(Class... params) { - StringBuilder signature = new StringBuilder("("); + public static String prettyShortParams(final Class... types) { + final int len1 = types.length - 1; - for (int i = 0; i < params.length; i++) { - signature.append(humanShort(params[i])); - if (i < params.length - 1) signature.append(','); - } + StringBuilder signature = new StringBuilder(); + signature.append('('); - signature.append(")"); + for (int i = 0; i <= len1; i++) { + signature.append( humanShort(types[i]) ); + if ( i < len1 ) signature.append(','); + } + signature.append(')'); return signature.toString(); } @@ -232,6 +233,7 @@ public static void visitAnnotationFields(AnnotationVisitor visitor, Map> nestedAnnotationMap = (Map>) value; for (Map.Entry> nestedAnnotation : nestedAnnotationMap.entrySet()) {