@PublicAPI(usage = ACCESS)
    public void traversePackageTree(Predicate<? super JavaClass> predicate, ClassVisitor visitor) {
        for (JavaClass javaClass : getClassesWith(predicate)) {
            visitor.visit(javaClass);
        }
        for (JavaPackage subpackage : getSubpackages()) {
            subpackage.traversePackageTree(predicate, visitor);
        }
    }
@Test
    public void visits_classes() {
        JavaPackage defaultPackage = importDefaultPackage(Object.class, String.class, File.class, Serializable.class, Security.class);

        List<JavaClass> visitedClasses = new ArrayList<>();
        defaultPackage.traversePackageTree(startsWith("S"), visitedClasses::add);

        assertThatTypes(visitedClasses).contain(String.class, Serializable.class, Security.class);
        for (JavaClass visitedClass : visitedClasses) {
            assertThat(visitedClass.getSimpleName()).startsWith("S");
        }
    }