Top Description Fields Constructors Methods
org.jruby.java.codegen

public abstract Class RealClassGenerator

extends Object
Class Inheritance
Static Imports
org.jruby.RubyInstanceConfig.JAVA_VERSION, org.jruby.util.CodegenUtils.ci, .CodegenUtils.getBoxType, .CodegenUtils.p, .CodegenUtils.params, .CodegenUtils.prettyParams, .CodegenUtils.sig, org.objectweb.asm.Opcodes.ACC_FINAL, .Opcodes.ACC_PRIVATE, .Opcodes.ACC_PROTECTED, .Opcodes.ACC_PUBLIC, .Opcodes.ACC_STATIC, .Opcodes.ACC_SUPER, .Opcodes.ACC_SYNTHETIC

On fly .class generator (used for Ruby interface impls).
Author
headius

Field Summary

Modifier and TypeField and Description
private static final String
private static final boolean
private static final int

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
pack-priv static Map<String, List<Method>>
buildSimpleToAllMap(Class<T>[] interfaces, String[] superTypeNames, RubyClass implClass)

public static int
calcBaseIndex(final Class<T>[] params, int baseIndex)

public static void
coerceArgumentsToRuby(SkinnyMethodAdapter mv, Class<T>[] paramTypes, int rubyIndex)

public static void
coerceResult(SkinnyMethodAdapter mv, Class<T> returnType, boolean doReturn)

public static void
public static Class<T>
createOldStyleImplClass(Class<T>[] superTypes, RubyClass rubyClass, Ruby ruby, String name, ClassDefiningClassLoader classLoader)

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

private static boolean
defineDefaultEquals(final int line, SkinnyMethodAdapter mv, final Class<T>[] paramTypes, final Class<T> returnType)

private static boolean
defineDefaultHashCode(final int line, SkinnyMethodAdapter mv, final Class<T>[] paramTypes, final Class<T> returnType)

private static boolean
defineDefaultToString(final int line, SkinnyMethodAdapter mv, final Class<T>[] paramTypes, final Class<T> returnType)

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

public static Class<T>
defineOldStyleImplClass(final Ruby ruby, final String name, final String[] superTypeNames, final Map<String, List<Method>> simpleToAll, final ClassDefiningClassLoader loader)

This variation on defineImplClass uses all the classic type coercion logic for passing args and returning results.

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

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

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

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

public static Class<T>
defineRealImplClass(final Ruby runtime, final String name, final Class<T> superClass, final String[] superTypeNames, final Map<String, List<Method>> simpleToAll)

This variation on defineImplClass uses all the classic type coercion logic for passing args and returning results.

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

public static void
makeConcreteConstructorIROProxy(ClassWriter cw, PositionAware initPosition, RubyClass.ConcreteJavaReifier cjr)

Public access for IRubyObject constructor

public static String
makeConcreteConstructorProxy(ClassWriter
class builder
cw
,
PositionAware
source code position of initialize
initPosition
,
boolean
If this method accepts ruby & rubyclass on the end (auto-added)
hasRuby
,
RubyClass.ConcreteJavaReifier cjr, Class<T>[]
signature, minus any ruby arguments
ctorTypes
,
boolean
If this is a nested/secondary ruby class ([ruby <]+ ruby < java )
nested
)

Defines a constructor that delegates to the main switch constructor

public static void
makeConcreteConstructorSwitch(ClassWriter cw, PositionAware initPosition, int superpos, boolean hasParent, RubyClass.ConcreteJavaReifier cjr, JavaConstructor[] constructors)

Main switch constructor.

public static GeneratorAdapter
private static void
objectEquals(final int line, SkinnyMethodAdapter mv)

private static void
objectHashCode(final int line, SkinnyMethodAdapter mv)

private static void
objectToString(final int line, SkinnyMethodAdapter mv)

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

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

CONCRETE_CTOR_SIGback to summary
private static final String CONCRETE_CTOR_SIG
DEBUGback to summary
private static final boolean DEBUG
V_BCback to summary
private static final int V_BC

Constructor Detail

RealClassGeneratorback to summary
public RealClassGenerator()

Method Detail

buildSimpleToAllMapback to summary
pack-priv static Map<String, List<Method>> buildSimpleToAllMap(Class<T>[] interfaces, String[] superTypeNames, RubyClass implClass) throws SecurityException
calcBaseIndexback to summary
public static int calcBaseIndex(final Class<T>[] params, int baseIndex)
coerceArgumentsToRubyback to summary
public static void coerceArgumentsToRuby(SkinnyMethodAdapter mv, Class<T>[] paramTypes, int rubyIndex)
coerceResultback to summary
public static void coerceResult(SkinnyMethodAdapter mv, Class<T> returnType, boolean doReturn)
coerceResultAndReturnback to summary
public static void coerceResultAndReturn(SkinnyMethodAdapter mv, Class<T> returnType)
createOldStyleImplClassback to summary
public static Class<T> createOldStyleImplClass(Class<T>[] superTypes, RubyClass rubyClass, Ruby ruby, String name, ClassDefiningClassLoader classLoader)
createRealImplClassback to summary
public static Class<T> createRealImplClass(Class<T> superClass, Class<?>[] interfaces, RubyClass rubyClass, Ruby ruby, String name)
defineDefaultEqualsback to summary
private static boolean defineDefaultEquals(final int line, SkinnyMethodAdapter mv, final Class<T>[] paramTypes, final Class<T> returnType)
defineDefaultHashCodeback to summary
private static boolean defineDefaultHashCode(final int line, SkinnyMethodAdapter mv, final Class<T>[] paramTypes, final Class<T> returnType)
defineDefaultToStringback to summary
private static boolean defineDefaultToString(final int line, SkinnyMethodAdapter mv, final Class<T>[] paramTypes, final Class<T> returnType)
defineOldStyleBodyback to summary
private static void defineOldStyleBody(SkinnyMethodAdapter mv, final String pathName, final String simpleName, final Class<T>[] paramTypes, final Class<T> returnType, final int baseIndex, final int cacheIndex, final Set<String> nameSet)
defineOldStyleImplClassback to summary
public static Class<T> defineOldStyleImplClass(final Ruby ruby, final String name, final String[] superTypeNames, final Map<String, List<Method>> simpleToAll, final ClassDefiningClassLoader loader)

This variation on defineImplClass uses all the classic type coercion logic for passing args and returning results.

defineRealBodyback to summary
private static void defineRealBody(SkinnyMethodAdapter mv, final String pathName, final String simpleName, final Class<T>[] paramTypes, final Class<T> returnType, final int baseIndex, final int cacheIndex, final Set<String> nameSet)
defineRealBodyWithFallbackback to summary
private static void defineRealBodyWithFallback(SkinnyMethodAdapter mv, final String pathName, final String simpleName, final Class<T>[] paramTypes, final Class<T> returnType, final int baseIndex, final int cacheIndex, final Set<String> nameSet)
defineRealEqualsWithFallbackback to summary
private static void defineRealEqualsWithFallback(SkinnyMethodAdapter mv, final String pathName, final String simpleName, final Class<T>[] paramTypes, final Class<T> returnType, final int baseIndex, final int cacheIndex, final Set<String> nameSet)
defineRealHashCodeWithFallbackback to summary
private static void defineRealHashCodeWithFallback(SkinnyMethodAdapter mv, final String pathName, final String simpleName, final Class<T>[] paramTypes, final Class<T> returnType, final int baseIndex, final int cacheIndex, final Set<String> nameSet)
defineRealImplClassback to summary
public static Class<T> defineRealImplClass(final Ruby runtime, final String name, final Class<T> superClass, final String[] superTypeNames, final Map<String, List<Method>> simpleToAll)

This variation on defineImplClass uses all the classic type coercion logic for passing args and returning results.

defineRealToStringWithFallbackback to summary
private static void defineRealToStringWithFallback(SkinnyMethodAdapter mv, final String pathName, final String simpleName, final Class<T>[] paramTypes, final Class<T> returnType, final int baseIndex, final int cacheIndex, final Set<String> nameSet)
makeConcreteConstructorIROProxyback to summary
public static void makeConcreteConstructorIROProxy(ClassWriter cw, PositionAware initPosition, RubyClass.ConcreteJavaReifier cjr)

Public access for IRubyObject constructor

makeConcreteConstructorProxyback to summary
public static String makeConcreteConstructorProxy(ClassWriter cw, PositionAware initPosition, boolean hasRuby, RubyClass.ConcreteJavaReifier cjr, Class<T>[] ctorTypes, boolean nested)

Defines a constructor that delegates to the main switch constructor

Parameters
cw:ClassWriter

class builder

initPosition:PositionAware

source code position of initialize

hasRuby:boolean

If this method accepts ruby & rubyclass on the end (auto-added)

ctorTypes:Class<T>[]

signature, minus any ruby arguments

nested:boolean

If this is a nested/secondary ruby class ([ruby <]+ ruby < java )

makeConcreteConstructorSwitchback to summary
public static void makeConcreteConstructorSwitch(ClassWriter cw, PositionAware initPosition, int superpos, boolean hasParent, RubyClass.ConcreteJavaReifier cjr, JavaConstructor[] constructors)

Main switch constructor. Required for concrete reification

makeGeneratorback to summary
public static GeneratorAdapter makeGenerator(SkinnyMethodAdapter m)
objectEqualsback to summary
private static void objectEquals(final int line, SkinnyMethodAdapter mv)
objectHashCodeback to summary
private static void objectHashCode(final int line, SkinnyMethodAdapter mv)
objectToStringback to summary
private static void objectToString(final int line, SkinnyMethodAdapter mv)
writeClassFileback to summary
private static void writeClassFile(final String name, final byte[] bytecode)