use of java.lang.invoke.MethodHandles.lookup in project openj9 by eclipse.
the class Unreflect_InvokeTracker method test_Unreflect_Protected_InnerClass_Level2.
/**
* unreflect a protected method from a level 2 protected inner class using the top level outer class lookup.
* Basically we unreflect a method from protected inner class C.D.E where the lookup class used is C.
* @throws Throwable
*/
@Test(groups = { "level.extended" })
@SuppressWarnings({ "unchecked", "rawtypes" })
public void test_Unreflect_Protected_InnerClass_Level2() throws Throwable {
Class clazz = Class.forName("com.ibm.j9.jsr292.SamePackageExample$SamePackageInnerClass_Protected$SamePackageInnerClass_Nested_Level2");
Method innerclassMethod_Level2 = clazz.getDeclaredMethod("addProtectedInner_Level2", int.class, int.class);
Lookup outerclassLookup = SamePackageExample.getLookup();
MethodHandle mh = outerclassLookup.unreflect(innerclassMethod_Level2);
SamePackageExample.SamePackageInnerClass_Protected.SamePackageInnerClass_Nested_Level2 g = ((new SamePackageExample()).new SamePackageInnerClass_Protected()).new SamePackageInnerClass_Nested_Level2();
int out = (int) mh.invokeExact(g, 1, 2);
AssertJUnit.assertEquals(3, out);
}
use of java.lang.invoke.MethodHandles.lookup in project openj9 by eclipse.
the class Unreflect_InvokeTracker method test_UnreflectConstructor_CrossPackage_SubClass.
/**
*******************************************************************
*unreflectConstructor tests involving inheritance.
*Combinations : parent / child lookups , cross-package
********************************************************************
*/
/**
* unreflect subclass constructor using super class lookup, parent child in different packages.
* @throws Throwable
*/
@Test(groups = { "level.extended" })
@SuppressWarnings({ "unchecked", "rawtypes" })
public void test_UnreflectConstructor_CrossPackage_SubClass() throws Throwable {
Class clazz = Class.forName("com.ibm.j9.jsr292.CrossPackageExampleSubclass");
Constructor c = clazz.getDeclaredConstructor(int.class, int.class);
Lookup parentLookup = PackageExamples.getLookup();
MethodHandle mh = parentLookup.unreflectConstructor(c);
CrossPackageExampleSubclass g = (CrossPackageExampleSubclass) mh.invoke(1, 2);
AssertJUnit.assertEquals(g.nonStaticPublicField_Child, 3);
}
use of java.lang.invoke.MethodHandles.lookup in project openj9 by eclipse.
the class MethodHandleAPI_dropLookupMode method test_dropLookupMode_DropProtectedAccess.
/**
* dropLookupMode test for dropping the protected access
* @throws Throwable
*/
@Test(groups = { "level.extended" })
public static void test_dropLookupMode_DropProtectedAccess() throws Throwable {
int droppedAccessModes = Lookup.PROTECTED | Lookup.UNCONDITIONAL;
int expectedAccessModes = lookup.lookupModes() & ~droppedAccessModes;
Lookup newLookup = lookup.dropLookupMode(Lookup.PROTECTED);
Assert.assertEquals(expectedAccessModes, newLookup.lookupModes());
}
use of java.lang.invoke.MethodHandles.lookup in project openj9 by eclipse.
the class MethodHandleAPI_dropLookupMode method test_dropLookupMode_DropPublicAccess.
/**
* dropLookupMode test for dropping the public access
* @throws Throwable
*/
@Test(groups = { "level.extended" })
public static void test_dropLookupMode_DropPublicAccess() throws Throwable {
Lookup newLookup = lookup.dropLookupMode(Lookup.PUBLIC);
Assert.assertEquals(0, newLookup.lookupModes());
}
use of java.lang.invoke.MethodHandles.lookup in project openj9 by eclipse.
the class MethodHandleAPI_dropLookupMode method test_dropLookupMode_InvalidAccessMode.
/**
* dropLookupMode test for an invalid access mode
* @throws Throwable
*/
@Test(expectedExceptions = IllegalArgumentException.class, groups = { "level.extended" })
public static void test_dropLookupMode_InvalidAccessMode() throws Throwable {
int invalidAccessMode = 0x100;
Lookup invalidLookup = lookup.dropLookupMode(invalidAccessMode);
Assert.fail("The test case failed to detect an invalid access mode");
}
Aggregations