@Override
        public CompoundScope visitClassType(ClassType t, Boolean skipInterface) {
            ClassSymbol csym = (ClassSymbol)t.tsym;
            Entry e = _map.get(csym);
            if (e == null || !e.matches(skipInterface)) {
                CompoundScope membersClosure = new CompoundScope(csym);
                if (!skipInterface) {
                    for (Type i : interfaces(t)) {
                        membersClosure.addSubScope(visit(i, skipInterface));
                    }
                }
                membersClosure.addSubScope(visit(supertype(t), skipInterface));
                membersClosure.addSubScope(csym.members());
                e = new Entry(skipInterface, membersClosure);
                _map.put(csym, e);
            }
            return e.compoundScope;
        }