-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3779 from jruby/test-become-java
improved method arities on become_java!
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
- 9.1.2.0
- 9.1.1.0
- 9.1.0.0
Showing
7 changed files
with
540 additions
and
317 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
package java_integration.fixtures; | ||
|
||
import java.lang.reflect.Method; | ||
import java.lang.reflect.Array; | ||
import java.util.Collection; | ||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
|
||
public abstract class Reflector { | ||
|
||
public static Object invoke(final Object obj, final Method method) throws Exception { | ||
if ( method.isVarArgs() ) { | ||
final Class type = method.getParameterTypes()[0].getComponentType(); | ||
Object array = Array.newInstance(type, 0); | ||
return method.invoke(obj, array); | ||
} | ||
return method.invoke(obj); | ||
} | ||
|
||
public static Object invoke(final Object obj, final Method method, Object arg) throws Exception { | ||
if ( method.isVarArgs() && ! arg.getClass().isArray() ) { | ||
final Class type = method.getParameterTypes()[0].getComponentType(); | ||
Object[] array = (Object[]) Array.newInstance(type, 1); | ||
array[0] = arg; | ||
return method.invoke(obj, (Object) array); | ||
} | ||
return method.invoke(obj, arg); | ||
} | ||
|
||
public static Object invoke(final Object obj, final Class klass, final String method) throws Exception { | ||
Method instanceMethod = klass.getMethod(method, (Class[]) null); | ||
return instanceMethod.invoke(obj, (Object[]) null); | ||
} | ||
|
||
public static Object invoke(final Object obj, final String method) throws Exception { | ||
return invoke(obj, obj.getClass(), method); | ||
} | ||
|
||
public static Object invokeMatch(final Object obj, final String method, final Object... args) throws Exception { | ||
final Method[] methods = obj.getClass().getMethods(); | ||
ArrayList<Method> matchedMethods = new ArrayList<Method>(); | ||
for ( Method m : methods ) { | ||
if ( method.equals(m.getName()) ) { | ||
if ( m.isVarArgs() ) matchedMethods.add(m); | ||
else { | ||
if (m.getParameterTypes().length == args.length) { | ||
matchedMethods.add(m); | ||
} | ||
} | ||
} | ||
} | ||
if ( matchedMethods.isEmpty() ) { | ||
throw new IllegalArgumentException("no methods of name " + method + " matched in " + obj.getClass()); | ||
} | ||
if ( matchedMethods.size() > 1 ) { | ||
throw new IllegalArgumentException("multiple methods matched for name " + method + " and arguments " + Arrays.toString(args)); | ||
} | ||
return matchedMethods.get(0).invoke(obj, args); | ||
} | ||
|
||
public static Method resolveMethod(final Object obj, final String method, final Class... types) throws Exception { | ||
final Method[] methods = obj.getClass().getMethods(); | ||
ArrayList<Method> matchedMethods = new ArrayList<Method>(); | ||
for ( Method m : methods ) { | ||
if ( method.equals(m.getName()) ) { | ||
if ( Arrays.equals(m.getParameterTypes(), types) ) { | ||
matchedMethods.add(m); | ||
} | ||
} | ||
} | ||
if ( matchedMethods.isEmpty() ) { | ||
throw new IllegalArgumentException("no methods of name " + method + " matched in " + obj.getClass()); | ||
} | ||
if ( matchedMethods.size() > 1 ) { | ||
throw new IllegalArgumentException("multiple methods matched for name " + method + " and param types " + Arrays.toString(types)); | ||
} | ||
return matchedMethods.get(0); | ||
} | ||
|
||
public static Collection<Method> findMethods(final Object obj, final String method) throws Exception { | ||
final Method[] methods = obj.getClass().getMethods(); | ||
ArrayList<Method> matchedMethods = new ArrayList<Method>(); | ||
for ( Method m : methods ) { | ||
if ( method.equals(m.getName()) ) { | ||
matchedMethods.add(m); | ||
} | ||
} | ||
return matchedMethods; | ||
} | ||
|
||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters