Search in sources :

Example 6 with CrossPackageSingleMethodInterfaceExample

use of examples.CrossPackageSingleMethodInterfaceExample in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_wrapperInstanceType_StaticMethod.

/**
 * Tests wrapperInstanceType using public static wrappers and single method interfaces from same package and cross-package.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_wrapperInstanceType_StaticMethod() throws Throwable {
    // same package test
    MethodHandle mh = MethodHandles.lookup().findStatic(SamePackageExample.class, "addPublicStatic", MethodType.methodType(int.class, int.class, int.class));
    SamePackageSingleMethodInterfaceExample interfaceInstance = MethodHandleProxies.asInterfaceInstance(SamePackageSingleMethodInterfaceExample.class, mh);
    Class<?> retrievedTargetType = MethodHandleProxies.wrapperInstanceType(interfaceInstance);
    AssertJUnit.assertEquals(SamePackageSingleMethodInterfaceExample.class, retrievedTargetType);
    // cross package test
    MethodHandle mh2 = MethodHandles.lookup().findStatic(PackageExamples.class, "addPublicStatic", MethodType.methodType(int.class, int.class, int.class));
    CrossPackageSingleMethodInterfaceExample interfaceInstanceCrossPackage = MethodHandleProxies.asInterfaceInstance(CrossPackageSingleMethodInterfaceExample.class, mh2);
    Class<?> retrievedTargetType2 = MethodHandleProxies.wrapperInstanceType(interfaceInstanceCrossPackage);
    AssertJUnit.assertEquals(CrossPackageSingleMethodInterfaceExample.class, retrievedTargetType2);
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 7 with CrossPackageSingleMethodInterfaceExample

use of examples.CrossPackageSingleMethodInterfaceExample in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_isWrapperInstance_VirtualMethod.

/**
 ****************************
 *Tests for isWrapperInstance
 *****************************
 */
/**
 * Tests isWrapperInstance using a public single method interface from the same package and followed by one from a different package.
 * Wrapper is a public virtual method defined in an inner class from same package and cross-package respectively.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_isWrapperInstance_VirtualMethod() throws Throwable {
    // same package test
    MethodHandle mh = MethodHandles.lookup().findVirtual(SamePackageExample.class, "addPublic", MethodType.methodType(int.class, int.class, int.class));
    mh = mh.bindTo(new SamePackageExample());
    SamePackageSingleMethodInterfaceExample interfaceInstance = MethodHandleProxies.asInterfaceInstance(SamePackageSingleMethodInterfaceExample.class, mh);
    AssertJUnit.assertTrue(MethodHandleProxies.isWrapperInstance(interfaceInstance));
    // cross package test
    MethodHandle mh2 = MethodHandles.lookup().findVirtual(PackageExamples.class, "addPublic", MethodType.methodType(int.class, int.class, int.class));
    mh2 = mh2.bindTo(new PackageExamples());
    CrossPackageSingleMethodInterfaceExample interfaceInstanceCrossPackage = MethodHandleProxies.asInterfaceInstance(CrossPackageSingleMethodInterfaceExample.class, mh2);
    AssertJUnit.assertTrue(MethodHandleProxies.isWrapperInstance(interfaceInstanceCrossPackage));
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 8 with CrossPackageSingleMethodInterfaceExample

use of examples.CrossPackageSingleMethodInterfaceExample in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_wrapperInstanceTarget_StaticMethod.

/**
 * Tests wrapperInstanceTarget using single method interface and static wrapper methods from same package and cross-package
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_wrapperInstanceTarget_StaticMethod() throws Throwable {
    // same package test
    MethodHandle mh = MethodHandles.lookup().findStatic(SamePackageExample.class, "addPublicStatic", MethodType.methodType(int.class, int.class, int.class));
    SamePackageSingleMethodInterfaceExample interfaceInstance = MethodHandleProxies.asInterfaceInstance(SamePackageSingleMethodInterfaceExample.class, mh);
    MethodHandle retrievedTarget = MethodHandleProxies.wrapperInstanceTarget(interfaceInstance);
    AssertJUnit.assertEquals(4, retrievedTarget.invoke(1, 3));
    // cross package test
    MethodHandle mh2 = MethodHandles.lookup().findStatic(PackageExamples.class, "addPublicStatic", MethodType.methodType(int.class, int.class, int.class));
    CrossPackageSingleMethodInterfaceExample interfaceInstanceCrossPackage = MethodHandleProxies.asInterfaceInstance(CrossPackageSingleMethodInterfaceExample.class, mh2);
    MethodHandle retrievedTarget2 = MethodHandleProxies.wrapperInstanceTarget(interfaceInstanceCrossPackage);
    AssertJUnit.assertEquals(4, (int) retrievedTarget2.invokeExact(1, 3));
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 9 with CrossPackageSingleMethodInterfaceExample

use of examples.CrossPackageSingleMethodInterfaceExample in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_isWrapperInstance_InnerClass.

/**
 * Tests isWrapperInstance using a public single method interface from the same package and followed by one from a different package.
 * Wrapper is a public virtual method defined in an inner class from same package and cross-package respectively.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_isWrapperInstance_InnerClass() throws Throwable {
    // same package test
    MethodHandle mh = MethodHandles.lookup().findVirtual(SamePackageExample.SamePackageInnerClass.class, "addPublicInner", MethodType.methodType(int.class, int.class, int.class));
    SamePackageExample x = new SamePackageExample();
    SamePackageExample.SamePackageInnerClass i = x.new SamePackageInnerClass();
    mh = mh.bindTo(i);
    SamePackageSingleMethodInterfaceExample interfaceInstance = MethodHandleProxies.asInterfaceInstance(SamePackageSingleMethodInterfaceExample.class, mh);
    AssertJUnit.assertTrue(MethodHandleProxies.isWrapperInstance(interfaceInstance));
    // cross package test
    MethodHandle mh2 = MethodHandles.lookup().findVirtual(PackageExamples.CrossPackageInnerClass.class, "addPublicInner", MethodType.methodType(int.class, int.class, int.class));
    PackageExamples y = new PackageExamples();
    mh2 = mh2.bindTo(y.new CrossPackageInnerClass());
    CrossPackageSingleMethodInterfaceExample interfaceInstanceCrossPackage = MethodHandleProxies.asInterfaceInstance(CrossPackageSingleMethodInterfaceExample.class, mh2);
    AssertJUnit.assertTrue(MethodHandleProxies.isWrapperInstance(interfaceInstanceCrossPackage));
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 10 with CrossPackageSingleMethodInterfaceExample

use of examples.CrossPackageSingleMethodInterfaceExample in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_wrapperInstanceType_InnerClass.

/**
 * Tests wrapperInstanceType using inner-class wrappers and single method interfaces from same package and cross-package.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_wrapperInstanceType_InnerClass() throws Throwable {
    // same package test
    MethodHandle mh = MethodHandles.lookup().findVirtual(SamePackageExample.SamePackageInnerClass.class, "addPublicInner", MethodType.methodType(int.class, int.class, int.class));
    SamePackageExample x = new SamePackageExample();
    SamePackageExample.SamePackageInnerClass i = x.new SamePackageInnerClass();
    mh = mh.bindTo(i);
    SamePackageSingleMethodInterfaceExample interfaceInstance = MethodHandleProxies.asInterfaceInstance(SamePackageSingleMethodInterfaceExample.class, mh);
    Class<?> retrievedTargetType = MethodHandleProxies.wrapperInstanceType(interfaceInstance);
    AssertJUnit.assertEquals(SamePackageSingleMethodInterfaceExample.class, retrievedTargetType);
    // cross package test
    MethodHandle mh2 = MethodHandles.lookup().findVirtual(PackageExamples.CrossPackageInnerClass.class, "addPublicInner", MethodType.methodType(int.class, int.class, int.class));
    PackageExamples y = new PackageExamples();
    mh2 = mh2.bindTo(y.new CrossPackageInnerClass());
    CrossPackageSingleMethodInterfaceExample interfaceInstanceCrossPackage = MethodHandleProxies.asInterfaceInstance(CrossPackageSingleMethodInterfaceExample.class, mh2);
    Class<?> retrievedTargetType2 = MethodHandleProxies.wrapperInstanceType(interfaceInstanceCrossPackage);
    AssertJUnit.assertEquals(CrossPackageSingleMethodInterfaceExample.class, retrievedTargetType2);
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Aggregations

CrossPackageSingleMethodInterfaceExample (examples.CrossPackageSingleMethodInterfaceExample)12 MethodHandle (java.lang.invoke.MethodHandle)12 Test (org.testng.annotations.Test)12 PackageExamples (examples.PackageExamples)8