1 31 package org.jruby.javasupport; 32 33 import java.lang.reflect.Modifier ; 34 35 import org.jruby.Ruby; 36 import org.jruby.RubyArray; 37 import org.jruby.RubyBoolean; 38 import org.jruby.RubyClass; 39 import org.jruby.RubyFixnum; 40 import org.jruby.runtime.CallbackFactory; 41 import org.jruby.runtime.builtin.IRubyObject; 42 43 public abstract class JavaCallable extends JavaAccessibleObject { 44 45 public JavaCallable(Ruby runtime, RubyClass rubyClass) { 46 super(runtime, rubyClass); 47 } 48 49 public final RubyFixnum arity() { 50 return getRuntime().newFixnum(getArity()); 51 } 52 53 public final RubyArray argument_types() { 54 Class [] parameterTypes = parameterTypes(); 55 RubyArray result = getRuntime().newArray(parameterTypes.length); 56 for (int i = 0; i < parameterTypes.length; i++) { 57 result.append(JavaClass.get(getRuntime(), parameterTypes[i])); 58 } 59 return result; 60 } 61 62 public IRubyObject inspect() { 63 StringBuffer result = new StringBuffer (); 64 result.append(nameOnInspection()); 65 Class [] parameterTypes = parameterTypes(); 66 for (int i = 0; i < parameterTypes.length; i++) { 67 result.append(parameterTypes[i].getName()); 68 if (i < parameterTypes.length - 1) { 69 result.append(','); 70 } 71 } 72 result.append(")>"); 73 return getRuntime().newString(result.toString()); 74 } 75 76 protected abstract int getArity(); 77 protected abstract Class [] parameterTypes(); 78 protected abstract int getModifiers(); 79 80 83 protected abstract String nameOnInspection(); 84 85 public RubyBoolean public_p() { 86 return RubyBoolean.newBoolean(getRuntime(), Modifier.isPublic(getModifiers())); 87 } 88 89 90 public static void registerRubyMethods(Ruby runtime, RubyClass result, Class klass) { 91 registerRubyMethods(runtime, result); 92 93 CallbackFactory callbackFactory = runtime.callbackFactory(klass); 94 95 result.defineFastMethod("public?", callbackFactory.getFastMethod("public_p")); 96 } 97 } 98 | Popular Tags |