< prev index next >
test/hotspot/jtreg/runtime/Nestmates/privateMethods/TestReflection.java
Print this page
*** 25,58 ****
--- 25,70 ----
* @test
* @bug 8046171
* @summary Test access to private methods between nestmates and nest-top
* using different flavours of named nested types using core reflection
* @run main TestReflection
+ * @run main/othervm -Dsun.reflect.noInflation=true TestReflection
*/
+ // The first run will use NativeMethodAccessor and due to the limited number
+ // of calls we will not reach the inflation threshold.
+ // The second run disables inflation so we will use the GeneratedMethodAccessor
+ // instead. In this way both sets of Reflection classes are tested.
+
public class TestReflection {
// Private method of nest-top for nestmates to access
private void priv_invoke() {
System.out.println("TestReflection::priv_invoke");
}
// public constructor so we aren't relying on private access
public TestReflection() {}
+ // We test access via getClass() as well as Foo.class
+
// Methods that will access private methods of nestmates
void access_priv(TestReflection o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ TestReflection.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
void access_priv(InnerNested o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ InnerNested.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
void access_priv(StaticNested o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ StaticNested.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
void access_priv(StaticIface o) throws Throwable {
+ // Can't use o.getClass() as the method is not in that class
StaticIface.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
// The various nestmates
*** 64,81 ****
--- 76,97 ----
// Methods that will access private methods of nestmates
default void access_priv(TestReflection o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ TestReflection.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
default void access_priv(InnerNested o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ InnerNested.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
default void access_priv(StaticNested o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ StaticNested.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
default void access_priv(StaticIface o) throws Throwable {
+ // Can't use o.getClass() as the method is not in that class
StaticIface.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
}
static class StaticNested {
*** 89,106 ****
--- 105,126 ----
// Methods that will access private methods of nestmates
void access_priv(TestReflection o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ TestReflection.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
void access_priv(InnerNested o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ InnerNested.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
void access_priv(StaticNested o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ StaticNested.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
void access_priv(StaticIface o) throws Throwable {
+ // Can't use o.getClass() as the method is not in that class
StaticIface.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
}
class InnerNested {
*** 112,129 ****
--- 132,153 ----
// public constructor so we aren't relying on private access
public InnerNested() {}
void access_priv(TestReflection o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ TestReflection.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
void access_priv(InnerNested o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ InnerNested.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
void access_priv(StaticNested o) throws Throwable {
o.getClass().getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
+ StaticNested.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
void access_priv(StaticIface o) throws Throwable {
+ // Can't use o.getClass() as the method is not in that class
StaticIface.class.getDeclaredMethod("priv_invoke", new Class<?>[0]).invoke(o, new Object[0]);
}
}
public static void main(String[] args) throws Throwable {
< prev index next >