コード例 #1
0
  public void forEachClass(Object[] args) {
    boolean withLoader = false;
    Callable func = null;
    switch (args.length) {
      case 2:
        {
          Object b = args[1];
          if (b instanceof Boolean) {
            withLoader = ((Boolean) b).booleanValue();
          }
        }
      case 1:
        {
          Object f = args[0];
          if (f instanceof Callable) {
            func = (Callable) f;
          } else {
            return;
          }
        }
        break;
      default:
        return;
    }

    final Callable finalFunc = func;
    SystemDictionary sysDict = VM.getVM().getSystemDictionary();
    if (withLoader) {
      sysDict.classesDo(
          new SystemDictionary.ClassAndLoaderVisitor() {
            public void visit(Klass kls, Oop loader) {
              JSJavaKlass jk = factory.newJSJavaKlass(kls);
              if (jk == null) {
                return;
              }
              JSJavaObject k = jk.getJSJavaClass();
              JSJavaObject l = factory.newJSJavaObject(loader);
              if (k != null) {
                if (k != null) {
                  try {
                    finalFunc.call(new Object[] {k, l});
                  } catch (ScriptException exp) {
                    throw new RuntimeException(exp);
                  }
                }
              }
            }
          });

    } else {
      sysDict.classesDo(
          new SystemDictionary.ClassVisitor() {
            public void visit(Klass kls) {
              JSJavaKlass jk = factory.newJSJavaKlass(kls);
              if (jk == null) {
                return;
              }
              JSJavaClass k = jk.getJSJavaClass();
              if (k != null) {
                if (k != null) {
                  try {
                    finalFunc.call(new Object[] {k});
                  } catch (ScriptException exp) {
                    throw new RuntimeException(exp);
                  }
                }
              }
            }
          });
    }
  }