private static CleanerHandles FindHandlesForNewCleaner(MethodHandles.Lookup lookup) { try { Objects.requireNonNull(_globalCleanerInstance); Type newCleaner = _globalCleanerInstance.GetType(); Type newCleanable = Type.GetType("java.lang.ref.Cleaner$Cleanable"); MethodHandle registerHandle = FindCreationMethod("register", lookup, newCleaner); registerHandle = registerHandle.bindTo(_globalCleanerInstance); return(CleanerHandles.Of(registerHandle, FindCleanMethod(lookup, newCleanable))); } catch (Exception newCleanerException) when(newCleanerException is ClassNotFoundException || newCleanerException is NoSuchMethodException || newCleanerException is IllegalAccessException) { throw new LinkageError("Unable to find cleaner methods.", newCleanerException); } }