static HashSet allClasses_keywords = lithashset("class", "interface", "enum", "sclass", "sinterface"); // lists returned are actual CNC (N/C/N/.../C/N) - and connected to // original list // only returns the top level classes static LL allClasses(L tok) { LL l = new ArrayList; for (int i = 1; i < tok.size(); i += 2) { if (eq(tok.get(i), "{")) // skip functions i = findEndOfBlock(tok, i)-1; else if (allClasses_keywords.contains(tok.get(i)) && (i == 1 || !tok.get(i-2).equals("."))) { int j = i; while (j < tok.size() && !tok.get(j).equals("{")) j += 2; j = findEndOfBlock(tok, j)+1; i = leftScanModifiers(tok, i); l.add(tok.subList(i-1, Math.min(tok.size(), j))); i = j-2; } } return l; } static LL allClasses(S text) { ret allClasses(javaTok(text)); }