Search in sources :

Example 11 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_asInterfaceInstance_VirtualMethod.

/**
 ******************************
 * Tests for asInterfaceInstance
 *******************************
 */
/**
 * Tests asInterfaceInstance using a public single method interface from the same package and followed by one from a different package.
 * Wrapper is a public virtual method from same package and cross-package respectively.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_asInterfaceInstance_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.assertEquals(3, interfaceInstance.singleMethodAdd(1, 2));
    // 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.assertEquals(3, interfaceInstanceCrossPackage.singleMethodAdd(1, 2));
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 12 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class MethodHandleProxiesTest method test_asInterfaceInstance_InnerClass.

/**
 * Tests asInterfaceInstance 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_asInterfaceInstance_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.assertEquals(3, interfaceInstance.singleMethodAdd(1, 2));
    // 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.assertEquals(3, interfaceInstanceCrossPackage.singleMethodAdd(1, 2));
}
Also used : CrossPackageSingleMethodInterfaceExample(examples.CrossPackageSingleMethodInterfaceExample) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 13 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class HelperConstructorClass method test_invokeWithArguments_List_CrossPackage_Virtual.

/**
 * invokeWithArgument(List<?>) test using a cross-package virtual method
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_invokeWithArguments_List_CrossPackage_Virtual() throws Throwable {
    MethodHandle mh = MethodHandles.lookup().findVirtual(PackageExamples.class, "addPublic", MethodType.methodType(int.class, int.class, int.class));
    PackageExamples g = new PackageExamples();
    mh = mh.bindTo(g);
    List<Integer> l = new ArrayList<Integer>();
    l.add(1);
    l.add(2);
    Assert.assertEquals((int) mh.invokeWithArguments(l), 3);
}
Also used : ArrayList(java.util.ArrayList) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 14 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class HelperConstructorClass method test_asCollector_CrossPackage_Virtual.

/**
 * Cross package test : asCollector MH for a virtual method of a class in a different package
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_asCollector_CrossPackage_Virtual() throws Throwable {
    MethodHandle mh = MethodHandles.lookup().findVirtual(PackageExamples.class, "getLength", MethodType.methodType(int.class, String[].class));
    PackageExamples g = new PackageExamples();
    mh = mh.bindTo(g);
    mh = mh.asCollector(String[].class, 5);
    Assert.assertEquals(mh.type(), MethodType.methodType(int.class, String.class, String.class, String.class, String.class, String.class));
    Assert.assertEquals((int) mh.invokeExact("A", "star", "I am looking at", "may already have", "died"), 5);
}
Also used : PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 15 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class HelperConstructorClass method test_asVarargsCollector_CrossPackage_Virtual_InvokeExact.

/**
 * Basic asVarargsCollector test using a virtual method in a class living in a different package (uses MethodHandle.invokeExact)
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_asVarargsCollector_CrossPackage_Virtual_InvokeExact() throws Throwable {
    MethodHandle mh = MethodHandles.lookup().findVirtual(PackageExamples.class, "getLength", MethodType.methodType(int.class, String[].class));
    PackageExamples g = new PackageExamples();
    mh = mh.bindTo(g);
    mh = mh.asVarargsCollector(String[].class);
    Assert.assertEquals(mh.type(), MethodType.methodType(int.class, String[].class));
    Assert.assertEquals((int) mh.invokeExact(new String[] { "A", "star", "I am looking at", "may already have", "died" }), 5);
}
Also used : PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Aggregations

PackageExamples (examples.PackageExamples)46 Test (org.testng.annotations.Test)46 MethodHandle (java.lang.invoke.MethodHandle)41 CrossPackageSingleMethodInterfaceExample (examples.CrossPackageSingleMethodInterfaceExample)8 Lookup (java.lang.invoke.MethodHandles.Lookup)7 Method (java.lang.reflect.Method)6 Constructor (java.lang.reflect.Constructor)2 Field (java.lang.reflect.Field)2 SamePackageInnerClass (com.ibm.j9.jsr292.SamePackageExample.SamePackageInnerClass)1 CrossPackageInnerClass (examples.PackageExamples.CrossPackageInnerClass)1 ArrayList (java.util.ArrayList)1