Search in sources :

Example 86 with MethodHandles.lookup

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);
}
Also used : Lookup(java.lang.invoke.MethodHandles.Lookup) Method(java.lang.reflect.Method) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 87 with MethodHandles.lookup

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);
}
Also used : Constructor(java.lang.reflect.Constructor) Lookup(java.lang.invoke.MethodHandles.Lookup) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 88 with MethodHandles.lookup

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());
}
Also used : Lookup(java.lang.invoke.MethodHandles.Lookup) Test(org.testng.annotations.Test)

Example 89 with MethodHandles.lookup

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());
}
Also used : Lookup(java.lang.invoke.MethodHandles.Lookup) Test(org.testng.annotations.Test)

Example 90 with MethodHandles.lookup

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");
}
Also used : Lookup(java.lang.invoke.MethodHandles.Lookup) Test(org.testng.annotations.Test)

Aggregations

Lookup (java.lang.invoke.MethodHandles.Lookup)216 Test (org.testng.annotations.Test)176 MethodHandle (java.lang.invoke.MethodHandle)96 MethodHandles.publicLookup (java.lang.invoke.MethodHandles.publicLookup)39 Method (java.lang.reflect.Method)36 SamePackageInnerClass (com.ibm.j9.jsr292.SamePackageExample.SamePackageInnerClass)17 MutableCallSite (java.lang.invoke.MutableCallSite)11 MethodHandles (java.lang.invoke.MethodHandles)9 SamePackageInnerClass_Nested_Level2 (com.ibm.j9.jsr292.SamePackageExample.SamePackageInnerClass.SamePackageInnerClass_Nested_Level2)7 PackageExamples (examples.PackageExamples)7 MethodHandles.constant (java.lang.invoke.MethodHandles.constant)4 MethodHandles.dropArguments (java.lang.invoke.MethodHandles.dropArguments)4 MethodHandles.exactInvoker (java.lang.invoke.MethodHandles.exactInvoker)4 MethodHandles.foldArguments (java.lang.invoke.MethodHandles.foldArguments)4 MethodType.methodType (java.lang.invoke.MethodType.methodType)4 Constructor (java.lang.reflect.Constructor)4 ArrayList (java.util.ArrayList)4 Objects (java.util.Objects)4 Function (java.util.function.Function)4 ToDoubleFunction (java.util.function.ToDoubleFunction)4