1 29 package org.jruby.runtime.callback; 30 31 import org.jruby.runtime.Arity; 32 import org.jruby.runtime.CallbackFactory; 33 import org.jruby.runtime.CompiledBlockCallback; 34 import org.jruby.runtime.builtin.IRubyObject; 35 36 public class ReflectionCallbackFactory extends CallbackFactory { 37 38 private final Class type; 39 40 public ReflectionCallbackFactory(Class type) { 41 this.type = type; 42 } 43 44 public Callback getMethod(String method) { 45 return new ReflectionCallback(type, method, NULL_CLASS_ARRAY, false, false, Arity.noArguments(), false); 46 } 47 48 public Callback getFastMethod(String method) { 49 return new ReflectionCallback(type, method, NULL_CLASS_ARRAY, false, false, Arity.noArguments(), true); 50 } 51 52 public Callback getMethod(String method, Class arg1) { 53 return new ReflectionCallback(type, method, new Class [] { arg1 }, false, false, Arity.singleArgument(), false); 54 } 55 56 public Callback getFastMethod(String method, Class arg1) { 57 return new ReflectionCallback(type, method, new Class [] { arg1 }, false, false, Arity.singleArgument(), true); 58 } 59 60 public Callback getMethod(String method, Class arg1, Class arg2) { 61 return new ReflectionCallback(type, method, new Class [] { arg1, arg2 }, false, false, Arity.fixed(2), false); 62 } 63 64 public Callback getFastMethod(String method, Class arg1, Class arg2) { 65 return new ReflectionCallback(type, method, new Class [] { arg1, arg2 }, false, false, Arity.fixed(2), true); 66 } 67 68 public Callback getMethod(String method, Class arg1, Class arg2, Class arg3) { 69 return new ReflectionCallback(type, method, new Class [] { arg1, arg2, arg3 }, false, false, Arity.fixed(3), false); 70 } 71 72 public Callback getFastMethod(String method, Class arg1, Class arg2, Class arg3) { 73 return new ReflectionCallback(type, method, new Class [] { arg1, arg2, arg3 }, false, false, Arity.fixed(3), true); 74 } 75 76 public Callback getSingletonMethod(String method) { 77 return new ReflectionCallback(type, method, NULL_CLASS_ARRAY, false, true, Arity.noArguments(), false); 78 } 79 80 public Callback getFastSingletonMethod(String method) { 81 return new ReflectionCallback(type, method, NULL_CLASS_ARRAY, false, true, Arity.noArguments(), true); 82 } 83 84 public Callback getSingletonMethod(String method, Class arg1) { 85 return new ReflectionCallback(type, method, new Class [] { arg1 }, false, true, Arity.singleArgument(), false); 86 } 87 88 public Callback getFastSingletonMethod(String method, Class arg1) { 89 return new ReflectionCallback(type, method, new Class [] { arg1 }, false, true, Arity.singleArgument(), true); 90 } 91 92 public Callback getSingletonMethod(String method, Class arg1, Class arg2) { 93 return new ReflectionCallback(type, method, new Class [] { arg1, arg2 }, false, true, Arity.fixed(2), false); 94 } 95 96 public Callback getFastSingletonMethod(String method, Class arg1, Class arg2) { 97 return new ReflectionCallback(type, method, new Class [] { arg1, arg2 }, false, true, Arity.fixed(2), true); 98 } 99 100 public Callback getSingletonMethod(String method, Class arg1, Class arg2, Class arg3) { 101 return new ReflectionCallback(type, method, new Class [] { arg1, arg2, arg3 }, false, true, Arity.fixed(3), false); 102 } 103 104 public Callback getFastSingletonMethod(String method, Class arg1, Class arg2, Class arg3) { 105 return new ReflectionCallback(type, method, new Class [] { arg1, arg2, arg3 }, false, true, Arity.fixed(3), true); 106 } 107 108 public Callback getBlockMethod(String method) { 109 return new ReflectionCallback( 110 type, 111 method, 112 new Class [] { IRubyObject.class, IRubyObject.class }, 113 false, 114 true, 115 Arity.fixed(2), false); 116 } 117 118 public CompiledBlockCallback getBlockCallback(String method) { 119 throw new RuntimeException ("not implemented"); 120 } 121 122 public Callback getOptSingletonMethod(String method) { 123 return new ReflectionCallback(type, method, new Class [] { IRubyObject[].class }, true, true, Arity.optional(), false); 124 } 125 126 public Callback getFastOptSingletonMethod(String method) { 127 return new ReflectionCallback(type, method, new Class [] { IRubyObject[].class }, true, true, Arity.optional(), true); 128 } 129 130 public Callback getOptMethod(String method) { 131 return new ReflectionCallback(type, method, new Class [] { IRubyObject[].class }, true, false, Arity.optional(), false); 132 } 133 134 public Callback getFastOptMethod(String method) { 135 return new ReflectionCallback(type, method, new Class [] { IRubyObject[].class }, true, false, Arity.optional(), true); 136 } 137 } 138 | Popular Tags |