/** * 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; }