public TreeElement[] getChildrens(TreeElement parent) {
		TreeElement[] result = (TreeElement[]) cachedChildrens.get(parent);
		if (result == null) {
			TreeSet v = new TreeSet();
			String prefix = parent == root ? "" : parent.getFullName() + ".";
			Enumeration enum_ = ClassInfo.getClassesAndPackages(parent
					.getFullName());
			while (enum_.hasMoreElements()) {
				// insert sorted and remove double elements;
				String name = (String) enum_.nextElement();
				String fqn = prefix + name;
				boolean isClass = !ClassInfo.isPackage(fqn);

				if (isClass && Options.skipClass(ClassInfo.forName(fqn)))
					continue;
				TreeElement newElem = new TreeElement(prefix, name, isClass);
				v.add(newElem);
			}
			result = (TreeElement[]) v.toArray(new TreeElement[v.size()]);
			cachedChildrens.put(parent, result);
		}
		return result;
	}