package org.jruby.compiler;

import org.jruby.MetaClass;
import org.jruby.RubyClass;
import org.jruby.RubyModule;
import org.jruby.ir.IRScope;
import org.jruby.ir.interpreter.InterpreterContext;
import org.jruby.runtime.ThreadContext;

Blocks and methods both share same full build mechanism so they implement this to be buildable.
/** * Blocks and methods both share same full build mechanism so they implement this to be buildable. */
public interface Compilable<T> { public void setCallCount(int count); public void completeBuild(T buildResult); public IRScope getIRScope(); public InterpreterContext ensureInstrsReady();
Return the owning module/class name.
Returns:method/block owner's name
/** * Return the owning module/class name. * @return method/block owner's name */
default String getOwnerName() { RubyModule implClass = getImplementationClass(); return implClass == null ? null : resolveFullName(implClass); }
Returns:method/closure identifier
/** * @return method/closure identifier */
String getName();
Returns:method/block source file
/** * @return method/block source file */
String getFile();
Returns:method/block source file line
/** * @return method/block source file line */
int getLine(); public RubyModule getImplementationClass(); @Deprecated default String getClassName(ThreadContext context) { return getOwnerName(); }
Resolve the fully qualified name.
Params:
  • implementationClass –
Returns:class/module name e.g. Foo::Bar::Baz
/** * Resolve the fully qualified name. * @param implementationClass * @return class/module name e.g. Foo::Bar::Baz */
static String resolveFullName(RubyModule implementationClass) { String className; if (implementationClass.isSingleton()) { MetaClass metaClass = (MetaClass)implementationClass; RubyClass realClass = metaClass.getRealClass(); // if real class is Class if (realClass == implementationClass.getRuntime().getClassClass()) { // use the attached class's name className = ((RubyClass) metaClass.getAttached()).getName(); } else { // use the real class name className = realClass.getName(); } } else { // use the class name className = implementationClass.getName(); } return className; } }