org.jruby.RubyModule.defineOrGetClassUnder()方法的使用及代码示例

x33g5p2x  于2022-01-29 转载在 其他  
字(11.7k)|赞(0)|评价(0)|浏览(70)

本文整理了Java中org.jruby.RubyModule.defineOrGetClassUnder方法的一些代码示例,展示了RubyModule.defineOrGetClassUnder的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。RubyModule.defineOrGetClassUnder方法的具体详情如下:
包路径:org.jruby.RubyModule
类名称:RubyModule
方法名:defineOrGetClassUnder

RubyModule.defineOrGetClassUnder介绍

[英]this method should be used only by interpreter or compiler
[中]此方法只能由解释器或编译器使用

代码示例

代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby

public static RubyClass newClassForIR(ThreadContext context, String name, IRubyObject self, RubyModule classContainer, Object superClass, boolean meta) {
  if (meta) return classContainer.getMetaClass();
  RubyClass sc = null;
  if (superClass != null) {
    if (!(superClass instanceof RubyClass)) {
      throw context.runtime.newTypeError("superclass must be Class (" + superClass + " given)");
    }
    sc = (RubyClass) superClass;
  }
  return classContainer.defineOrGetClassUnder(name, sc);
}

代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby

public static RubyClass newClassForIR(ThreadContext context, String name, IRubyObject self, RubyModule classContainer, Object superClass, boolean meta) {
  if (meta) return classContainer.getMetaClass();
  RubyClass sc = null;
  if (superClass != null) {
    if (!(superClass instanceof RubyClass)) {
      throw context.runtime.newTypeError("superclass must be Class (" + superClass + " given)");
    }
    sc = (RubyClass) superClass;
  }
  return classContainer.defineOrGetClassUnder(name, sc);
}

代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby

private RubyModule newClass(ThreadContext context, IRubyObject self, RubyModule classContainer, DynamicScope currDynScope, Object[] temp) {
  if (newIRClassBody instanceof IRMetaClassBody) return classContainer.getMetaClass();
  RubyClass sc;
  if (superClass == context.runtime.getIRManager().getNil()) {
    sc = null;
  } else {
    Object o = superClass.retrieve(context, self, currDynScope, temp);
    if (!(o instanceof RubyClass)) {
      throw context.runtime.newTypeError("superclass must be Class (" + o + " given)");
    }
    sc = (RubyClass) o;
  }
  return classContainer.defineOrGetClassUnder(newIRClassBody.getName(), sc);
}

代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby

private RubyModule newClass(ThreadContext context, IRubyObject self, RubyModule classContainer, DynamicScope currDynScope, Object[] temp) {
  if (newIRClassBody instanceof IRMetaClassBody) return classContainer.getMetaClass();
  RubyClass sc;
  if (superClass == context.runtime.getIRManager().getNil()) {
    sc = null;
  } else {
    Object o = superClass.retrieve(context, self, currDynScope, temp);
    if (!(o instanceof RubyClass)) {
      throw context.runtime.newTypeError("superclass must be Class (" + o + " given)");
    }
    sc = (RubyClass) o;
  }
  return classContainer.defineOrGetClassUnder(newIRClassBody.getName(), sc);
}

代码示例来源:origin: org.jruby/jruby-complete

public static RubyModule newRubyClassFromIR(Ruby runtime, IRScope irClassBody, Object superClass, Object container) {
  if (!(container instanceof RubyModule)) {
    throw runtime.newTypeError("no outer class/module");
  }
  RubyModule newRubyClass;
  if (irClassBody instanceof IRMetaClassBody) {
    newRubyClass = ((RubyModule)container).getMetaClass();
  } else {
    RubyClass sc;
    if (superClass == UndefinedValue.UNDEFINED) {
      sc = null;
    } else {
      RubyClass.checkInheritable((IRubyObject) superClass);
      sc = (RubyClass) superClass;
    }
    newRubyClass = ((RubyModule)container).defineOrGetClassUnder(irClassBody.getId(), sc);
  }
  irClassBody.getStaticScope().setModule(newRubyClass);
  return newRubyClass;
}

代码示例来源:origin: org.jruby/jruby-core

public static RubyModule newRubyClassFromIR(Ruby runtime, IRScope irClassBody, Object superClass, Object container) {
  if (!(container instanceof RubyModule)) {
    throw runtime.newTypeError("no outer class/module");
  }
  RubyModule newRubyClass;
  if (irClassBody instanceof IRMetaClassBody) {
    newRubyClass = ((RubyModule)container).getMetaClass();
  } else {
    RubyClass sc;
    if (superClass == UndefinedValue.UNDEFINED) {
      sc = null;
    } else {
      RubyClass.checkInheritable((IRubyObject) superClass);
      sc = (RubyClass) superClass;
    }
    newRubyClass = ((RubyModule)container).defineOrGetClassUnder(irClassBody.getId(), sc);
  }
  irClassBody.getStaticScope().setModule(newRubyClass);
  return newRubyClass;
}

代码示例来源:origin: com.ning.billing/killbill-osgi-bundles-jruby

@Override
  public IRubyObject interpret(Ruby runtime, ThreadContext context, IRubyObject self, Block aBlock) {
    RubyModule enclosingClass = cpath.getEnclosingModule(runtime, context, self, aBlock);

    // TODO: Figure out how this can happen and possibly remove
    if (enclosingClass == null) throw runtime.newTypeError("no outer class/module");

    RubyClass superClass = null;

    if (superNode != null) {
      IRubyObject superObj = superNode.interpret(runtime, context, self, aBlock);
      RubyClass.checkInheritable(superObj);
      superClass = (RubyClass)superObj;
    }
    
    RubyClass clazz = enclosingClass.defineOrGetClassUnder(cpath.getName(), superClass);

    scope.setModule(clazz);

    IRubyObject classBodyResult = ASTInterpreter.evalClassDefinitionBody(runtime, context, scope, bodyNode, clazz, self, aBlock);

    return classBodyResult;
  }
}

代码示例来源:origin: org.kill-bill.billing/killbill-osgi-bundles-jruby

@Override
  public IRubyObject interpret(Ruby runtime, ThreadContext context, IRubyObject self, Block aBlock) {
    RubyModule enclosingClass = cpath.getEnclosingModule(runtime, context, self, aBlock);

    // TODO: Figure out how this can happen and possibly remove
    if (enclosingClass == null) throw runtime.newTypeError("no outer class/module");

    RubyClass superClass = null;

    if (superNode != null) {
      IRubyObject superObj = superNode.interpret(runtime, context, self, aBlock);
      RubyClass.checkInheritable(superObj);
      superClass = (RubyClass)superObj;
    }
    
    RubyClass clazz = enclosingClass.defineOrGetClassUnder(cpath.getName(), superClass);

    scope.setModule(clazz);

    IRubyObject classBodyResult = ASTInterpreter.evalClassDefinitionBody(runtime, context, scope, bodyNode, clazz, self, aBlock);

    return classBodyResult;
  }
}

代码示例来源:origin: org.jruby/jruby-complete

RubyClass cZlibError = mZlib.defineOrGetClassUnder("Error", cStandardError, cStandardError.getAllocator());
mZlib.defineOrGetClassUnder("StreamEnd", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("StreamError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("BufError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("NeedDict", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("MemError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("VersionError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("DataError", cZlibError, cZlibError.getAllocator());
RubyClass cGzFile = mZlib.defineOrGetClassUnder("GzipFile", runtime.getObject(), RubyGzipFile.GZIPFILE_ALLOCATOR);
cGzFile.defineAnnotatedMethods(RubyGzipFile.class);
RubyClass cGzReader = mZlib.defineOrGetClassUnder("GzipReader", cGzFile, JZlibRubyGzipReader.GZIPREADER_ALLOCATOR);
cGzReader.includeModule(runtime.getEnumerable());
cGzReader.defineAnnotatedMethods(JZlibRubyGzipReader.class);
RubyClass cGzWriter = mZlib.defineOrGetClassUnder("GzipWriter", cGzFile, JZlibRubyGzipWriter.GZIPWRITER_ALLOCATOR);
cGzWriter.defineAnnotatedMethods(JZlibRubyGzipWriter.class);
RubyClass cZStream = mZlib.defineOrGetClassUnder("ZStream", runtime.getObject(), ObjectAllocator.NOT_ALLOCATABLE_ALLOCATOR);
cZStream.defineAnnotatedMethods(ZStream.class);
cZStream.undefineMethod("new");
RubyClass cInflate = mZlib.defineOrGetClassUnder("Inflate", cZStream, JZlibInflate.INFLATE_ALLOCATOR);
cInflate.defineAnnotatedMethods(JZlibInflate.class);
RubyClass cDeflate = mZlib.defineOrGetClassUnder("Deflate", cZStream, JZlibDeflate.DEFLATE_ALLOCATOR);
cDeflate.defineAnnotatedMethods(JZlibDeflate.class);

代码示例来源:origin: org.jruby/jruby-core

RubyClass cZlibError = mZlib.defineOrGetClassUnder("Error", cStandardError, cStandardError.getAllocator());
mZlib.defineOrGetClassUnder("StreamEnd", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("StreamError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("BufError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("NeedDict", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("MemError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("VersionError", cZlibError, cZlibError.getAllocator());
mZlib.defineOrGetClassUnder("DataError", cZlibError, cZlibError.getAllocator());
RubyClass cGzFile = mZlib.defineOrGetClassUnder("GzipFile", runtime.getObject(), RubyGzipFile.GZIPFILE_ALLOCATOR);
cGzFile.defineAnnotatedMethods(RubyGzipFile.class);
RubyClass cGzReader = mZlib.defineOrGetClassUnder("GzipReader", cGzFile, JZlibRubyGzipReader.GZIPREADER_ALLOCATOR);
cGzReader.includeModule(runtime.getEnumerable());
cGzReader.defineAnnotatedMethods(JZlibRubyGzipReader.class);
RubyClass cGzWriter = mZlib.defineOrGetClassUnder("GzipWriter", cGzFile, JZlibRubyGzipWriter.GZIPWRITER_ALLOCATOR);
cGzWriter.defineAnnotatedMethods(JZlibRubyGzipWriter.class);
RubyClass cZStream = mZlib.defineOrGetClassUnder("ZStream", runtime.getObject(), ObjectAllocator.NOT_ALLOCATABLE_ALLOCATOR);
cZStream.defineAnnotatedMethods(ZStream.class);
cZStream.undefineMethod("new");
RubyClass cInflate = mZlib.defineOrGetClassUnder("Inflate", cZStream, JZlibInflate.INFLATE_ALLOCATOR);
cInflate.defineAnnotatedMethods(JZlibInflate.class);
RubyClass cDeflate = mZlib.defineOrGetClassUnder("Deflate", cZStream, JZlibDeflate.DEFLATE_ALLOCATOR);
cDeflate.defineAnnotatedMethods(JZlibDeflate.class);

代码示例来源:origin: org.jruby/jruby-core

public RubyClass defineOrGetClassUnder(String name, RubyClass superClazz, ObjectAllocator allocator) {
  // This method is intended only for defining new classes in Ruby code,
  // so it uses the allocator of the specified superclass or default to
  // the Object allocator. It should NOT be used to define classes that require a native allocator.
  Ruby runtime = getRuntime();
  IRubyObject classObj = getConstantAtSpecial(name);
  RubyClass clazz;
  if (classObj != null) {
    if (!(classObj instanceof RubyClass)) throw runtime.newTypeError(name + " is not a class");
    clazz = (RubyClass)classObj;
    if (superClazz != null) {
      RubyClass tmp = clazz.getSuperClass();
      while (tmp != null && tmp.isIncluded()) tmp = tmp.getSuperClass(); // need to skip IncludedModuleWrappers
      if (tmp != null) tmp = tmp.getRealClass();
      if (tmp != superClazz) throw runtime.newTypeError(str(runtime, "superclass mismatch for class ", ids(runtime, name)));
      // superClazz = null;
    }
  } else if ((clazz = searchProvidersForClass(name, superClazz)) != null) {
    // reopen a java class
  } else {
    if (superClazz == null) superClazz = runtime.getObject();
    if (allocator == null) {
      if (isReifiable(runtime, superClazz)) {
        if (Options.REIFY_CLASSES.load()) {
          allocator = REIFYING_OBJECT_ALLOCATOR;
        } else if (Options.REIFY_VARIABLES.load()) {

代码示例来源:origin: org.jruby/jruby-complete

public RubyClass defineOrGetClassUnder(String name, RubyClass superClazz, ObjectAllocator allocator) {
  // This method is intended only for defining new classes in Ruby code,
  // so it uses the allocator of the specified superclass or default to
  // the Object allocator. It should NOT be used to define classes that require a native allocator.
  Ruby runtime = getRuntime();
  IRubyObject classObj = getConstantAtSpecial(name);
  RubyClass clazz;
  if (classObj != null) {
    if (!(classObj instanceof RubyClass)) throw runtime.newTypeError(name + " is not a class");
    clazz = (RubyClass)classObj;
    if (superClazz != null) {
      RubyClass tmp = clazz.getSuperClass();
      while (tmp != null && tmp.isIncluded()) tmp = tmp.getSuperClass(); // need to skip IncludedModuleWrappers
      if (tmp != null) tmp = tmp.getRealClass();
      if (tmp != superClazz) throw runtime.newTypeError(str(runtime, "superclass mismatch for class ", ids(runtime, name)));
      // superClazz = null;
    }
  } else if ((clazz = searchProvidersForClass(name, superClazz)) != null) {
    // reopen a java class
  } else {
    if (superClazz == null) superClazz = runtime.getObject();
    if (allocator == null) {
      if (isReifiable(runtime, superClazz)) {
        if (Options.REIFY_CLASSES.load()) {
          allocator = REIFYING_OBJECT_ALLOCATOR;
        } else if (Options.REIFY_VARIABLES.load()) {

相关文章

微信公众号

最新文章

更多

RubyModule类方法