Class RealClassGenerator

java.lang.Object
org.jruby.java.codegen.RealClassGenerator

public abstract class RealClassGenerator extends Object
On fly .class generator (used for Ruby interface impls).
  • Field Details

    • DEBUG

      private static final boolean DEBUG
      See Also:
    • V_BC

      private static final int V_BC
    • CONCRETE_CTOR_SIG

      private static final String CONCRETE_CTOR_SIG
  • Constructor Details

    • RealClassGenerator

      public RealClassGenerator()
  • Method Details

    • buildSimpleToAllMap

      static Map<String,List<Method>> buildSimpleToAllMap(Class[] interfaces, String[] superTypeNames, RubyClass implClass) throws SecurityException
      Throws:
      SecurityException
    • createOldStyleImplClass

      public static Class createOldStyleImplClass(Class[] superTypes, RubyClass rubyClass, Ruby ruby, String name, ClassDefiningClassLoader classLoader)
    • createRealImplClass

      public static Class createRealImplClass(Class superClass, Class<?>[] interfaces, RubyClass rubyClass, Ruby ruby, String name)
    • defineOldStyleImplClass

      public static Class defineOldStyleImplClass(Ruby ruby, String name, String[] superTypeNames, Map<String,List<Method>> simpleToAll, ClassDefiningClassLoader loader)
      This variation on defineImplClass uses all the classic type coercion logic for passing args and returning results.
      Parameters:
      ruby -
      name -
      superTypeNames -
      simpleToAll -
      Returns:
    • defineOldStyleBody

      private static void defineOldStyleBody(SkinnyMethodAdapter mv, String pathName, String simpleName, Class[] paramTypes, Class returnType, int baseIndex, int cacheIndex, Set<String> nameSet)
    • defineRealImplClass

      public static Class defineRealImplClass(Ruby runtime, String name, Class superClass, String[] superTypeNames, Map<String,List<Method>> simpleToAll)
      This variation on defineImplClass uses all the classic type coercion logic for passing args and returning results.
      Parameters:
      runtime -
      name -
      superTypeNames -
      simpleToAll -
      Returns:
    • defineRealBody

      private static void defineRealBody(SkinnyMethodAdapter mv, String pathName, String simpleName, Class[] paramTypes, Class returnType, int baseIndex, int cacheIndex, Set<String> nameSet)
    • defineRealBodyWithFallback

      private static void defineRealBodyWithFallback(SkinnyMethodAdapter mv, String pathName, String simpleName, Class[] paramTypes, Class returnType, int baseIndex, int cacheIndex, Set<String> nameSet)
    • defineRealEqualsWithFallback

      private static void defineRealEqualsWithFallback(SkinnyMethodAdapter mv, String pathName, String simpleName, Class[] paramTypes, Class returnType, int baseIndex, int cacheIndex, Set<String> nameSet)
    • defineRealHashCodeWithFallback

      private static void defineRealHashCodeWithFallback(SkinnyMethodAdapter mv, String pathName, String simpleName, Class[] paramTypes, Class returnType, int baseIndex, int cacheIndex, Set<String> nameSet)
    • defineRealToStringWithFallback

      private static void defineRealToStringWithFallback(SkinnyMethodAdapter mv, String pathName, String simpleName, Class[] paramTypes, Class returnType, int baseIndex, int cacheIndex, Set<String> nameSet)
    • defineDefaultEquals

      private static boolean defineDefaultEquals(int line, SkinnyMethodAdapter mv, Class[] paramTypes, Class returnType)
    • objectEquals

      private static void objectEquals(int line, SkinnyMethodAdapter mv)
    • defineDefaultHashCode

      private static boolean defineDefaultHashCode(int line, SkinnyMethodAdapter mv, Class[] paramTypes, Class returnType)
    • objectHashCode

      private static void objectHashCode(int line, SkinnyMethodAdapter mv)
    • defineDefaultToString

      private static boolean defineDefaultToString(int line, SkinnyMethodAdapter mv, Class[] paramTypes, Class returnType)
    • objectToString

      private static void objectToString(int line, SkinnyMethodAdapter mv)
    • writeClassFile

      private static void writeClassFile(String name, byte[] bytecode)
    • coerceArgumentsToRuby

      public static void coerceArgumentsToRuby(SkinnyMethodAdapter mv, Class[] paramTypes, int rubyIndex)
    • coerceResultAndReturn

      public static void coerceResultAndReturn(SkinnyMethodAdapter mv, Class returnType)
    • coerceResult

      public static void coerceResult(SkinnyMethodAdapter mv, Class returnType, boolean doReturn)
    • calcBaseIndex

      public static int calcBaseIndex(Class[] params, int baseIndex)
    • makeConcreteConstructorSwitch

      public static void makeConcreteConstructorSwitch(org.objectweb.asm.ClassWriter cw, PositionAware initPosition, int superpos, boolean hasParent, RubyClass.ConcreteJavaReifier cjr, JavaConstructor[] constructors)
      Main switch constructor. Required for concrete reification
    • makeConcreteConstructorIROProxy

      public static void makeConcreteConstructorIROProxy(org.objectweb.asm.ClassWriter cw, PositionAware initPosition, RubyClass.ConcreteJavaReifier cjr)
      Public access for IRubyObject constructor
    • makeConcreteConstructorProxy

      public static String makeConcreteConstructorProxy(org.objectweb.asm.ClassWriter cw, PositionAware initPosition, boolean hasRuby, RubyClass.ConcreteJavaReifier cjr, Class[] ctorTypes, boolean nested)
      Defines a constructor that delegates to the main switch constructor
      Parameters:
      cw - class builder
      initPosition - source code position of initialize
      hasRuby - If this method accepts ruby & rubyclass on the end (auto-added)
      ctorTypes - signature, minus any ruby arguments
      nested - If this is a nested/secondary ruby class ([ruby <]+ ruby < java )
    • makeGenerator

      public static org.objectweb.asm.commons.GeneratorAdapter makeGenerator(SkinnyMethodAdapter m)