< prev index next >
test/hotspot/jtreg/runtime/Nestmates/privateMethods/TestReflection.java
Print this page
@@ -25,34 +25,46 @@
* @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,18 +76,22 @@
// 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,18 +105,22 @@
// 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,18 +132,22 @@
// 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 >