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

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

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

RubyModule.const_set介绍

[英]rb_mod_const_set
[中]rb_mod_const_集合

代码示例

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

protected static void installClassClasses(final Class<?> javaClass, final RubyModule proxy) {
  // setup constants for public inner classes
  Class<?>[] classes = JavaClass.getDeclaredClasses(javaClass);
  final Ruby runtime = proxy.getRuntime();
  for ( int i = classes.length; --i >= 0; ) {
    final Class<?> clazz = classes[i];
    if ( javaClass != clazz.getDeclaringClass() ) continue;
    // no non-public inner classes
    if ( ! Modifier.isPublic(clazz.getModifiers()) ) continue;
    final String simpleName = JavaClass.getSimpleName(clazz);
    if ( simpleName.length() == 0 ) continue;
    final RubyModule innerProxy = Java.getProxyClass(runtime, JavaClass.get(runtime, clazz));
    if ( IdUtil.isConstant(simpleName) ) {
      if (proxy.getConstantAt(simpleName) == null) {
        proxy.const_set(runtime.newString(simpleName), innerProxy);
      }
    }
    else { // lower-case name
      if ( ! proxy.respondsTo(simpleName) ) {
        // define a class method
        proxy.getSingletonClass().addMethod(simpleName, new JavaMethod.JavaMethodZero(proxy.getSingletonClass(), PUBLIC, simpleName) {
          @Override
          public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name) {
            return innerProxy;
          }
        });
      }
    }
  }
}

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

protected static void installClassClasses(final Class<?> javaClass, final RubyModule proxy) {
  // setup constants for public inner classes
  Class<?>[] classes = JavaClass.getDeclaredClasses(javaClass);
  final Ruby runtime = proxy.getRuntime();
  for ( int i = classes.length; --i >= 0; ) {
    final Class<?> clazz = classes[i];
    if ( javaClass != clazz.getDeclaringClass() ) continue;
    // no non-public inner classes
    if ( ! Modifier.isPublic(clazz.getModifiers()) ) continue;
    final String simpleName = JavaClass.getSimpleName(clazz);
    if ( simpleName.length() == 0 ) continue;
    final RubyModule innerProxy = Java.getProxyClass(runtime, JavaClass.get(runtime, clazz));
    if ( IdUtil.isConstant(simpleName) ) {
      if (proxy.getConstantAt(simpleName) == null) {
        proxy.const_set(runtime.newString(simpleName), innerProxy);
      }
    }
    else { // lower-case name
      if ( ! proxy.respondsTo(simpleName) ) {
        // define a class method
        proxy.getSingletonClass().addMethod(simpleName, new JavaMethod.JavaMethodZero(proxy.getSingletonClass(), PUBLIC, simpleName) {
          @Override
          public IRubyObject call(ThreadContext context, IRubyObject self, RubyModule clazz, String name) {
            return innerProxy;
          }
        });
      }
    }
  }
}

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

private static RubyModule createPackageModule(RubyModule parent, String name, String packageString) {
  Ruby runtime = parent.getRuntime();
  RubyModule packageModule = (RubyModule) runtime.getJavaSupport().getPackageModuleTemplate().dup();
  packageModule.setInstanceVariable("@package_name", runtime.newString(
      packageString.length() > 0 ? packageString + '.' : packageString));
  // this is where we'll get connected when classes are opened using
  // package module syntax.
  packageModule.addClassProvider(JAVA_PACKAGE_CLASS_PROVIDER);
  parent.const_set(runtime.newSymbol(name), packageModule);
  MetaClass metaClass = (MetaClass) packageModule.getMetaClass();
  metaClass.setAttached(packageModule);
  return packageModule;
}
private static final Pattern CAMEL_CASE_PACKAGE_SPLITTER = Pattern.compile("([a-z][0-9]*)([A-Z])");

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

proxy.const_set(getRuntime().newString(simpleName), innerProxy);

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

private static RubyModule createPackageModule(RubyModule parent, String name, String packageString) {
  Ruby runtime = parent.getRuntime();
  RubyModule packageModule = (RubyModule) runtime.getJavaSupport().getPackageModuleTemplate().dup();
  packageModule.setInstanceVariable("@package_name", runtime.newString(
      packageString.length() > 0 ? packageString + '.' : packageString));
  // this is where we'll get connected when classes are opened using
  // package module syntax.
  packageModule.addClassProvider(JAVA_PACKAGE_CLASS_PROVIDER);
  parent.const_set(runtime.newSymbol(name), packageModule);
  MetaClass metaClass = (MetaClass) packageModule.getMetaClass();
  metaClass.setAttached(packageModule);
  return packageModule;
}
private static final Pattern CAMEL_CASE_PACKAGE_SPLITTER = Pattern.compile("([a-z][0-9]*)([A-Z])");

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

proxy.const_set(getRuntime().newString(simpleName), innerProxy);

相关文章

微信公众号

最新文章

更多

RubyModule类方法