boolean hasOverriddenFields(final FieldRepr f, final ClassRepr fromClass, IntSet visitedClasses, ClassRepr visibilityScope) {
      if (visitedClasses == null) {
        visitedClasses = new IntOpenHashSet();
        visitedClasses.add(fromClass.name);
      }
      for (TypeRepr.ClassType supername : fromClass.getSuperTypes()) {
        if (!visitedClasses.add(supername.className) || supername.className == myObjectClassName) {
          continue;
        }
        for (ClassRepr superClass : reprsByName(supername.className, ClassRepr.class)) {
          final FieldRepr ff = superClass.findField(f.name);
          if (ff != null && isVisibleIn(superClass, ff, visibilityScope)) {
            return true;
          }
          if (hasOverriddenFields(f, superClass, visitedClasses, visibilityScope)) {
            return true;
          }
        }
      }
      return false;
    }
boolean hasOverriddenFields(final FieldRepr f, final ClassRepr fromClass, IntSet visitedClasses, ClassRepr visibilityScope)