Search in sources :

Example 61 with Lookup

use of java.lang.invoke.MethodHandles.Lookup in project openj9 by eclipse.

the class LookupInTests method testLookup_RelatedClassLoaders_ChildLookupInParent.

/**
 * Validates access restrictions stored in a new Lookup object created from an old Lookup object
 * where the new lookup class was loaded using a custom class loader which is the parent class loader
 * of the class loader  that loaded the original lookup class.
 * @throws Throwable
 */
@Test(groups = { "level.sanity" })
public void testLookup_RelatedClassLoaders_ChildLookupInParent() throws Throwable {
    CustomClassLoader parentCustomCL = new CustomClassLoader(LookupInTests.class.getClassLoader());
    Object customLoadedClass1 = parentCustomCL.loadClass("com.ibm.j9.jsr292.CustomLoadedClass1").newInstance();
    Assert.assertTrue(customLoadedClass1.getClass().getClassLoader() == parentCustomCL);
    CustomClassLoader childCustomCL = new CustomClassLoader(parentCustomCL);
    ICustomLoadedClass customLoadedClass2 = (ICustomLoadedClass) childCustomCL.loadClass("com.ibm.j9.jsr292.CustomLoadedClass2").newInstance();
    Assert.assertTrue(customLoadedClass2.getClass().getClassLoader() == childCustomCL);
    Lookup lookup = customLoadedClass2.getLookup();
    Lookup inObject = lookup.in(customLoadedClass1.getClass());
    assertClassAndMode(inObject, customLoadedClass1.getClass(), MethodHandles.Lookup.PUBLIC);
}
Also used : MethodHandles.publicLookup(java.lang.invoke.MethodHandles.publicLookup) Lookup(java.lang.invoke.MethodHandles.Lookup) Test(org.testng.annotations.Test)

Example 62 with Lookup

use of java.lang.invoke.MethodHandles.Lookup in project openj9 by eclipse.

the class LookupInTests method testLookup_SamePackageLookup.

/**
 *****************************************************************************
 * Tests involving same package, cross package, super class, subclass lookups
 * ****************************************************************************
 */
/**
 * Validates access restrictions stored in a new Lookup object created from an old Lookup object
 * where the new lookup class is a different class but under the same package as the lookup class
 * of the original Lookup object.
 * @throws Throwable
 */
@Test(groups = { "level.sanity" })
public void testLookup_SamePackageLookup() throws Throwable {
    Lookup inObject = samePackageExampleLookup.in(SamePackageSingleMethodInterfaceExample.class);
    assertClassAndMode(inObject, SamePackageSingleMethodInterfaceExample.class, MODULE_PUBLIC_PACKAGE_MODE);
}
Also used : MethodHandles.publicLookup(java.lang.invoke.MethodHandles.publicLookup) Lookup(java.lang.invoke.MethodHandles.Lookup) Test(org.testng.annotations.Test)

Example 63 with Lookup

use of java.lang.invoke.MethodHandles.Lookup in project openj9 by eclipse.

the class LookupInTests method testLookup_RelatedClassLoaders_ParentLookupInChild.

/**
 * Validates access restrictions stored in a new Lookup object created from an old Lookup object
 * where the new lookup class was loaded using a custom class loader which is the child class loader
 * of the class loader that loaded the original lookup class.
 * @throws Throwable
 */
@Test(groups = { "level.sanity" })
public void testLookup_RelatedClassLoaders_ParentLookupInChild() throws Throwable {
    CustomClassLoader parentCustomCL = new CustomClassLoader(LookupInTests.class.getClassLoader());
    ICustomLoadedClass customLoadedClass1 = (ICustomLoadedClass) parentCustomCL.loadClass("com.ibm.j9.jsr292.CustomLoadedClass1").newInstance();
    Assert.assertTrue(customLoadedClass1.getClass().getClassLoader() == parentCustomCL);
    CustomClassLoader childCustomCL = new CustomClassLoader(parentCustomCL);
    ICustomLoadedClass customLoadedClass2 = (ICustomLoadedClass) childCustomCL.loadClass("com.ibm.j9.jsr292.CustomLoadedClass2").newInstance();
    Assert.assertTrue(customLoadedClass2.getClass().getClassLoader() == childCustomCL);
    Lookup lookup = customLoadedClass1.getLookup();
    Lookup inObject = lookup.in(customLoadedClass2.getClass());
    assertClassAndMode(inObject, customLoadedClass2.getClass(), MethodHandles.Lookup.PUBLIC);
}
Also used : MethodHandles.publicLookup(java.lang.invoke.MethodHandles.publicLookup) Lookup(java.lang.invoke.MethodHandles.Lookup) Test(org.testng.annotations.Test)

Example 64 with Lookup

use of java.lang.invoke.MethodHandles.Lookup in project openj9 by eclipse.

the class LookupInTests method testLookup_PublicOuterClassLookup.

/**
 * Validates access restrictions stored in a new Lookup object created from an old Lookup object
 * where the new lookup class is the outer class of the old lookup class.
 * @throws Throwable
 */
@Test(groups = { "level.sanity" })
public void testLookup_PublicOuterClassLookup() throws Throwable {
    Lookup inObj = samePackageInnerClassLookup.in(SamePackageExample.class);
    assertClassAndMode(inObj, SamePackageExample.class, FULL_ACCESS_MODE);
}
Also used : MethodHandles.publicLookup(java.lang.invoke.MethodHandles.publicLookup) Lookup(java.lang.invoke.MethodHandles.Lookup) Test(org.testng.annotations.Test)

Example 65 with Lookup

use of java.lang.invoke.MethodHandles.Lookup in project openj9 by eclipse.

the class LookupInTests method testLookup_UnrelatedClassLoaders.

/**
 **************************************************
 * Tests involving cross class loaders
 * **************************************************
 */
/**
 * Validates access restrictions stored in a new Lookup object created from an old Lookup object
 * where the new lookup class was loaded using a custom class loader unrelated to the class loader
 * that loaded the original lookup class.
 * @throws Throwable
 */
@Test(groups = { "level.sanity" })
public void testLookup_UnrelatedClassLoaders() throws Throwable {
    CustomClassLoader unrelatedClassLoader = new CustomClassLoader(LookupInTests.class.getClassLoader());
    Object customLoadedClass = unrelatedClassLoader.loadClass("com.ibm.j9.jsr292.CustomLoadedClass1").newInstance();
    Lookup inObject = samePackageExampleLookup.in(customLoadedClass.getClass());
    assertClassAndMode(inObject, customLoadedClass.getClass(), MethodHandles.Lookup.PUBLIC);
}
Also used : MethodHandles.publicLookup(java.lang.invoke.MethodHandles.publicLookup) 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