Files
openide/java/java-tests/testData/inspection/javaReflectionInvocation/MethodParamCount.java

93 lines
3.9 KiB
Java

import java.lang.reflect.Method;
class MethodParamCount {
void varargSignature() throws Exception {
Class<?> cls = Test.class;
Object obj = new Test();
Method m1 = cls.getMethod("bar", int.class);
Method m2 = cls.getMethod("bar", int.class, String.class);
Method m3 = cls.getMethod("bar", int.class, String.class, String.class);
m1.invoke<warning descr="2 arguments are expected">(obj, 42, "abc")</warning>;
m2.invoke(obj, 42, "abc");
m3.invoke<warning descr="4 arguments are expected">(obj, 42, "abc")</warning>;
m1.invoke(obj, <warning descr="Single-item array is expected">new Object[]{42, "abc"}</warning>);
m2.invoke(obj, new Object[]{42, "abc"});
m3.invoke(obj, <warning descr="3 array items are expected">new Object[]{42, "abc"}</warning>);
m1.invoke<warning descr="2 arguments are expected">(obj)</warning>;
m2.invoke<warning descr="3 arguments are expected">(obj)</warning>;
m3.invoke<warning descr="4 arguments are expected">(obj)</warning>;
cls.getMethod("str", String.class).invoke(null, new String[] {"abc"});
}
void arraySignatutre() throws Exception {
Class<?> cls = Test.class;
Object obj = new Test();
Method m1 = cls.getMethod("bar", new Class[]{int.class});
Method m2 = cls.getMethod("bar", new Class[]{int.class, String.class});
Method m3 = cls.getMethod("bar", new Class[]{int.class, String.class, String.class});
m1.invoke<warning descr="2 arguments are expected">(obj, 42, "abc")</warning>;
m2.invoke(obj, 42, "abc");
m3.invoke<warning descr="4 arguments are expected">(obj, 42, "abc")</warning>;
m1.invoke(obj, <warning descr="Single-item array is expected">new Object[]{42, "abc"}</warning>);
m2.invoke(obj, new Object[]{42, "abc"});
m3.invoke(obj, <warning descr="3 array items are expected">new Object[]{42, "abc"}</warning>);
m1.invoke<warning descr="2 arguments are expected">(obj)</warning>;
m2.invoke<warning descr="3 arguments are expected">(obj)</warning>;
m3.invoke<warning descr="4 arguments are expected">(obj)</warning>;
cls.getMethod("str", new Class[]{String.class}).invoke(null, new String[] {"abc"});
}
void manyArguments() throws Exception {
Class<?> cls = M.class;
Object obj = new M();
Method m0 = cls.getMethod("m0");
Method m1 = cls.getMethod("m1", int.class);
Method m2 = cls.getMethod("m2", int.class, short.class);
Method m3 = cls.getMethod("m3", int.class, short.class, long.class);
Method m4 = cls.getMethod("m4", int.class, short.class, long.class, float.class);
Method m5 = cls.getMethod("m5", int.class, short.class, long.class, float.class, double.class);
m0.invoke<warning descr="One argument is expected">(0, 0)</warning>;
m1.invoke<warning descr="2 arguments are expected">("abc")</warning>;
m2.invoke<warning descr="3 arguments are expected">(0, "abc")</warning>;
m3.invoke<warning descr="4 arguments are expected">(0, 0, "abc")</warning>;
m4.invoke<warning descr="5 arguments are expected">(0, 0, 0, "abc")</warning>;
m5.invoke<warning descr="6 arguments are expected">(0, 0, 0, 0, "abc")</warning>;
Method m = cls.getMethod("m0", new Class[0]);
m.invoke(obj, new Object[0]);
m.invoke(obj, new Object[]{});
m.invoke(obj, <warning descr="Empty array is expected">new Object[] {"abc"}</warning>);
m = cls.getMethod("m0", new Class[]{});
m.invoke(obj, new Object[]{});
}
static class Test {
public void bar(int n) {}
public void bar(int n, String s) {}
public void bar(int n, String s, String t) {}
public static void str(String s) {}
}
class M {
public String m0() {return "";}
public String m1(int a1) {return "";}
public String m2(int a1, short a2) {return "";}
public String m3(int a1, short a2, long a3) {return "";}
public String m4(int a1, short a2, long a3, float a4) {return "";}
public String m5(int a1, short a2, long a3, float a4, double a5) {return "";}
}
}