mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +07:00
75 lines
2.8 KiB
Plaintext
75 lines
2.8 KiB
Plaintext
call text: int result = new Test(instance).invoke();
|
|
class:
|
|
public class GeneratedEvaluationClass {
|
|
private Object instance;
|
|
|
|
public GeneratedEvaluationClass(Object instance) {
|
|
this.instance = instance;
|
|
}
|
|
|
|
public static int accessToFieldField1(Object object, Object value) {
|
|
try {
|
|
Class<?> klass = Class.forName("WithReflectionAccess");
|
|
java.lang.reflect.Field member = null;
|
|
int interfaceNumber = -1;
|
|
Class<?>[] interfaces = null;
|
|
while (member == null) {
|
|
try {
|
|
member = klass.getDeclaredField("field");
|
|
} catch (ReflectiveOperationException e) {
|
|
if (interfaceNumber == -1) {
|
|
interfaces = klass.getInterfaces();
|
|
interfaceNumber = 0;
|
|
}
|
|
if (interfaceNumber < interfaces.length) {
|
|
klass = interfaces[interfaceNumber];
|
|
interfaceNumber += 1;
|
|
} else {
|
|
klass = klass.getSuperclass();
|
|
if (klass == null) throw e;
|
|
interfaceNumber = -1;
|
|
}
|
|
}
|
|
}
|
|
member.setAccessible(true);
|
|
return (int) member.get(object);
|
|
} catch (ReflectiveOperationException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
public static int accessToFieldField2(Object object, Object value) {
|
|
try {
|
|
Class<?> klass = Class.forName("WithReflectionAccess");
|
|
java.lang.reflect.Field member = null;
|
|
int interfaceNumber = -1;
|
|
Class<?>[] interfaces = null;
|
|
while (member == null) {
|
|
try {
|
|
member = klass.getDeclaredField("field");
|
|
} catch (ReflectiveOperationException e) {
|
|
if (interfaceNumber == -1) {
|
|
interfaces = klass.getInterfaces();
|
|
interfaceNumber = 0;
|
|
}
|
|
if (interfaceNumber < interfaces.length) {
|
|
klass = interfaces[interfaceNumber];
|
|
interfaceNumber += 1;
|
|
} else {
|
|
klass = klass.getSuperclass();
|
|
if (klass == null) throw e;
|
|
interfaceNumber = -1;
|
|
}
|
|
}
|
|
}
|
|
member.setAccessible(true);
|
|
return (int) member.get(object);
|
|
} catch (ReflectiveOperationException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
}
|
|
|
|
public int invoke() {
|
|
return accessToFieldField1(instance, null) + accessToFieldField2(instance, null);
|
|
}
|
|
} |