Java: Improved completion for arguments of reflection calls getField() and getMethod() - extract the actual type from Class.forName and from generic type parameter to provide the code assistance (IDEA-167250)

This commit is contained in:
Pavel Dolgov
2017-02-02 14:55:52 +03:00
parent d06bc9dccb
commit 8a73604580
25 changed files with 508 additions and 71 deletions
@@ -0,0 +1,15 @@
class Main {
void foo() {
Class<?> a,b,c,d;
a = Class.forName("Test");
b = a;
c = b;
d = c;
d.getField("<caret>");
}
}
class Test {
public int num;
public int num2;
}
@@ -0,0 +1,15 @@
class Main {
void foo() {
Class<?> a,b,c,d;
a = Class.forName("Test");
b = a;
c = b;
d = c;
d.getField("num2");
}
}
class Test {
public int num;
public int num2;
}
@@ -0,0 +1,16 @@
class Main {
void foo() {
Class<?> a,b,c,d;
d = Class.forName("Test");
a = d;
b = a;
c = b;
d = c;
d.getField("<caret>");
}
}
class Test {
public int num;
public int num2;
}
@@ -0,0 +1,16 @@
class Main {
void foo() {
Class<?> a,b,c,d;
d = Class.forName("Test");
a = d;
b = a;
c = b;
d = c;
d.getField("<caret>");
}
}
class Test {
public int num;
public int num2;
}
@@ -0,0 +1,12 @@
class Main {
void foo() throws ReflectiveOperationException {
bar().getField("<caret>");
}
Class<Test> bar() throws ClassNotFoundException { return (Class<Test>) Class.forName("Test"); }
}
class Test {
public int num;
public void method(){}
}
@@ -0,0 +1,12 @@
class Main {
void foo() throws ReflectiveOperationException {
bar().getField("num");
}
Class<Test> bar() throws ClassNotFoundException { return (Class<Test>) Class.forName("Test"); }
}
class Test {
public int num;
public void method(){}
}
@@ -0,0 +1,15 @@
class Main {
void foo() {
Test.class.getDeclaredField("<caret>");
}
}
class Test extends Parent {
public int num;
int num3;
}
class Parent {
public int num2;
int num4;
}
@@ -0,0 +1,15 @@
class Main {
void foo() {
Test.class.getDeclaredField("num3");
}
}
class Test extends Parent {
public int num;
int num3;
}
class Parent {
public int num2;
int num4;
}
@@ -0,0 +1,15 @@
class Main {
void foo() {
Test.class.getDeclaredMethod("<caret>");
}
}
class Test extends Parent {
public void method(){}
void method3(){}
}
class Parent {
public void method2(){}
void method4(){}
}
@@ -0,0 +1,15 @@
class Main {
void foo() {
Test.class.getDeclaredMethod("method3");
}
}
class Test extends Parent {
public void method(){}
void method3(){}
}
class Parent {
public void method2(){}
void method4(){}
}
@@ -0,0 +1,15 @@
class Main {
void foo() {
Test.class.getField("<caret>");
}
}
class Test extends Parent {
public int num;
void int num3;
}
class Parent {
public int num2;
int num4;
}
@@ -0,0 +1,15 @@
class Main {
void foo() {
Test.class.getField("num2");
}
}
class Test extends Parent {
public int num;
void int num3;
}
class Parent {
public int num2;
int num4;
}
@@ -0,0 +1,15 @@
class Main {
void foo() {
Test.class.getMethod("<caret>");
}
}
class Test extends Parent {
public void method(){}
void method3(){}
}
class Parent {
public void method2(){}
void method4(){}
}
@@ -0,0 +1,15 @@
class Main {
void foo() {
Test.class.getMethod("method2");
}
}
class Test extends Parent {
public void method(){}
void method3(){}
}
class Parent {
public void method2(){}
void method4(){}
}
@@ -0,0 +1,21 @@
class Main {
void foo() {
Class<?> a = Class.forName("Test");
Class<?> b = a;
Class<?> c = b;
Class<?> d = c;
Class<?> e = d;
Class<?> f = e;
Class<?> g = f;
Class<?> h = g;
Class<?> i = h;
Class<?> j = i;
Class<?> k = j;
k.getField("<caret>");
}
}
class Test {
public int num;
public int num2;
}
@@ -0,0 +1,21 @@
class Main {
void foo() {
Class<?> a = Class.forName("Test");
Class<?> b = a;
Class<?> c = b;
Class<?> d = c;
Class<?> e = d;
Class<?> f = e;
Class<?> g = f;
Class<?> h = g;
Class<?> i = h;
Class<?> j = i;
Class<?> k = j;
k.getField("num2");
}
}
class Test {
public int num;
public int num2;
}
@@ -0,0 +1,11 @@
class Main {
void foo() {
Class<?> c = Test.class;
c.getMethod("<caret>");
}
}
class Test {
public void method(){}
public void method2(int n){}
}
@@ -0,0 +1,11 @@
class Main {
void foo() {
Class<?> c = Test.class;
c.getMethod("method2", int.class);
}
}
class Test {
public void method(){}
public void method2(int n){}
}
@@ -0,0 +1,13 @@
class Main {
void foo() {
Class<Test> c = bar();
c.getMethod("<caret>");
}
Class bar() { return Test.class; }
}
class Test {
public void method(){}
public void method2(int n){}
}
@@ -0,0 +1,13 @@
class Main {
void foo() {
Class<Test> c = bar();
c.getMethod("method2", int.class);
}
Class bar() { return Test.class; }
}
class Test {
public void method(){}
public void method2(int n){}
}
@@ -0,0 +1,9 @@
class Main {
void foo() {
Test.class.getMethod("<caret>");
}
}
class Test {
public void method(){}
}
@@ -0,0 +1,9 @@
class Main {
void foo() {
Test.class.getMethod("method");
}
}
class Test {
public void method(){}
}