use of examples.CrossPackageSingleMethodInterfaceExample in project openj9 by eclipse.
the class MethodHandleProxiesTest method test_isWrapperInstance_StaticMethod.
/**
* Tests isWrapperInstance using a public single method interface from the same package and followed by one from a different package.
* Wrapper is a public static method from same package and cross-package respectively.
* @throws Throwable
*/
@Test(groups = { "level.extended" })
public void test_isWrapperInstance_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);
AssertJUnit.assertTrue(MethodHandleProxies.isWrapperInstance(interfaceInstance));
// 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);
AssertJUnit.assertTrue(MethodHandleProxies.isWrapperInstance(interfaceInstanceCrossPackage));
}
use of examples.CrossPackageSingleMethodInterfaceExample in project openj9 by eclipse.
the class MethodHandleProxiesTest method test_wrapperInstanceTarget_VirtualMethod.
/**
**************************************
* Tests for wrapperInstanceTarget
* ************************************
*/
/**
* Tests wrapperInstanceTarget using single method interface and wrapper types from same package and cross-package
* @throws Throwable
*/
@Test(groups = { "level.extended" })
public void test_wrapperInstanceTarget_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);
MethodHandle retrievedTarget = MethodHandleProxies.wrapperInstanceTarget(interfaceInstance);
AssertJUnit.assertEquals(4, (int) retrievedTarget.invokeExact(1, 3));
// 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);
MethodHandle retrievedTarget2 = MethodHandleProxies.wrapperInstanceTarget(interfaceInstanceCrossPackage);
AssertJUnit.assertEquals(4, retrievedTarget2.invoke(1, 3));
}
use of examples.CrossPackageSingleMethodInterfaceExample 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));
}
use of examples.CrossPackageSingleMethodInterfaceExample 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));
}
use of examples.CrossPackageSingleMethodInterfaceExample in project openj9 by eclipse.
the class MethodHandleProxiesTest method test_asInterfaceInstance_StaticMethod.
/**
* Tests asInterfaceInstance using a public single method interface from the same package and followed by one from a different package.
* Wrapper is a public static method from same package and cross-package respectively.
* @throws Throwable
*/
@Test(groups = { "level.extended" })
public void test_asInterfaceInstance_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);
AssertJUnit.assertEquals(3, interfaceInstance.singleMethodAdd(1, 2));
// 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);
AssertJUnit.assertEquals(3, interfaceInstanceCrossPackage.singleMethodAdd(1, 2));
}
Aggregations