Search in sources :

Example 6 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class Find_InvokeTracker method test_FindSpecial_Public_CrossPackage_InnerClass.

/*Blocked by CMVC : 190587*/
/**
 * findSpecial test using a public method of an inner class where the class the resultant
 * method handle will be bound to is in a different package.
 * @throws Throwable
 */
@Test(enabled = false, groups = { "level.extended" })
public void test_FindSpecial_Public_CrossPackage_InnerClass() throws Throwable {
    MethodHandle example = PackageExamples.getLookup().findSpecial(SamePackageExample.SamePackageInnerClass.class, "addPublicInner", MethodType.methodType(int.class, int.class, int.class), PackageExamples.class);
    PackageExamples g = new PackageExamples();
    /*
		 * CMVC 190587
		 * 
		 * Behavior mismatch between J9 and Oracle. 
		 * J9 : WrongMethodTypeException thrown here
		 * Oracle : CMVC 188705 (output 2) 
		 * 
		 * */
    System.out.println(example);
    int out = (int) example.invokeExact(g, 1, 2);
    AssertJUnit.assertEquals(3, out);
}
Also used : PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 7 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class Find_InvokeTracker method test_GetterSetter_Public_CrossPackage_SubclassLookup.

/**
 * findSetter, findGetter tests using a sub-class as lookup class and public fields
 * belonging to the super-class under a different package than the lookup ( sub ) class.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_GetterSetter_Public_CrossPackage_SubclassLookup() throws Throwable {
    Lookup subclassLookup = CrossPackageExampleSubclass.getLookup();
    MethodHandle mhSetter = subclassLookup.findSetter(PackageExamples.class, "nonStaticPublicField", int.class);
    MethodHandle mhGetter = subclassLookup.findGetter(PackageExamples.class, "nonStaticPublicField", int.class);
    PackageExamples g = new PackageExamples();
    mhSetter.invokeExact(g, 5);
    int o = (int) mhGetter.invoke(g);
    AssertJUnit.assertEquals(o, 5);
}
Also used : Lookup(java.lang.invoke.MethodHandles.Lookup) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 8 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class Find_InvokeTracker method test_FindVirtual_Public_CrossPackage_Overridden_InnerClass_Nested_Level2.

/**
 * findVirtual test using a public overridden method belonging to a second level inner class
 * which is a child of a first level inner class under the same outer class. The lookup class
 * is a first level inner class in a different package.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
public void test_FindVirtual_Public_CrossPackage_Overridden_InnerClass_Nested_Level2() throws Throwable {
    PackageExamples pe = new PackageExamples();
    CrossPackageInnerClass cp_inner1 = pe.new CrossPackageInnerClass();
    Lookup publicLookup = cp_inner1.getLookup();
    MethodHandle example = publicLookup.findVirtual(SamePackageExample.SamePackageInnerClass2.SamePackageInnerClass2_Nested_Level2_SubOf_Inner1.class, "addPublicInner", MethodType.methodType(int.class, int.class, int.class));
    SamePackageExample.SamePackageInnerClass g = ((new SamePackageExample()).new SamePackageInnerClass2()).new SamePackageInnerClass2_Nested_Level2_SubOf_Inner1();
    int s = (int) example.invoke(g, 1, 2);
    AssertJUnit.assertEquals(23, s);
}
Also used : Lookup(java.lang.invoke.MethodHandles.Lookup) SamePackageInnerClass(com.ibm.j9.jsr292.SamePackageExample.SamePackageInnerClass) PackageExamples(examples.PackageExamples) CrossPackageInnerClass(examples.PackageExamples.CrossPackageInnerClass) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 9 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class Unreflect_InvokeTracker method test_Unreflect_Public_CrossPackage_SuperClass.

/**
 * unreflect a super class method using a subclass lookup, parent child in different packages.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
@SuppressWarnings({ "unchecked", "rawtypes" })
public void test_Unreflect_Public_CrossPackage_SuperClass() throws Throwable {
    Class clazz = Class.forName("examples.PackageExamples");
    Method parentMethod = clazz.getDeclaredMethod("addPublic", int.class, int.class);
    Lookup childLookup = CrossPackageExampleSubclass.getLookup();
    MethodHandle mh = childLookup.unreflect(parentMethod);
    PackageExamples g = new PackageExamples();
    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) PackageExamples(examples.PackageExamples) MethodHandle(java.lang.invoke.MethodHandle) Test(org.testng.annotations.Test)

Example 10 with PackageExamples

use of examples.PackageExamples in project openj9 by eclipse.

the class Unreflect_InvokeTracker method test_Unreflect_Protected_CrossPackage_Overridden.

/**
 * Test to unreflect a protected overridden method belonging to a different package than the Lookup class.
 * @throws Throwable
 */
@Test(groups = { "level.extended" })
@SuppressWarnings({ "rawtypes", "unchecked" })
public void test_Unreflect_Protected_CrossPackage_Overridden() throws Throwable {
    Class clazz = Class.forName("com.ibm.j9.jsr292.CrossPackageExampleSubclass");
    Method m = clazz.getDeclaredMethod("addProtected", int.class, int.class);
    MethodHandle mh = MethodHandles.lookup().unreflect(m);
    PackageExamples g = new CrossPackageExampleSubclass();
    int out = (int) mh.invoke(g, 1, 2);
    AssertJUnit.assertEquals(-1, out);
}
Also used : Method(java.lang.reflect.Method) 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