Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
 package org.jruby.ext.ffi;
 
 import org.jruby.Ruby;
 
class ReifyingAllocator implements ObjectAllocator {
    private final Class klass;
    private final Constructor cons;
    public ReifyingAllocator(Class klass) {
        this. = klass;
        try {
            this. = klass.getDeclaredConstructor(Ruby.classRubyClass.class);
        } catch (NoSuchMethodException nsme) {
            throw new RuntimeException(nsme);
        }
    }
    public IRubyObject allocate(Ruby runtimeRubyClass klazz) {
        try {
            if (klazz.getReifiedClass() == this.) {
                return (IRubyObject.newInstance(runtimeklazz);
            }
            reifyWithAncestors(klazz);
            return klazz.getAllocator().allocate(runtimeklazz);
        } catch (InstantiationException ie) {
            throw runtime.newTypeError("could not allocate " + this. + " with default constructor:\n" + ie);
        } catch (IllegalAccessException iae) {
            throw runtime.newSecurityError("could not allocate " + this. + " due to inaccessible default constructor:\n" + iae);
        } catch (InvocationTargetException ite) {
            throw runtime.newSecurityError("could not allocate " + this. + " due to inaccessible default constructor:\n" + ite);
        }
    }
    
    private static void reifyWithAncestors(RubyClass klazz) {
        
        RubyClass realSuper = klazz.getSuperClass().getRealClass();
        if (realSuper.getReifiedClass() == nullreifyWithAncestors(realSuper);
        synchronized (klazz) {
            klazz.reify();
            klazz.setAllocator(new ReifyingAllocator(klazz.getReifiedClass()));
        }
    }
New to GrepCode? Check out our FAQ X