Esempio n. 1
0
  /**
   * Calculate, based on given RubyModule, which class in its hierarchy should be used to determine
   * protected access.
   *
   * @param cls The class from which to calculate
   * @return The class to be used for protected access checking.
   */
  protected static RubyModule calculateProtectedClass(RubyModule cls) {
    // singleton classes don't get their own visibility domain
    if (cls.isSingleton()) cls = cls.getSuperClass();

    while (cls.isIncluded()) cls = cls.getMetaClass();

    // For visibility we need real meta class and not anonymous one from class << self
    if (cls instanceof MetaClass) cls = ((MetaClass) cls).getRealClass();

    return cls;
  }