49 lines
1.6 KiB
Java
49 lines
1.6 KiB
Java
package fr.istic.vv;
|
|
|
|
import com.github.javaparser.ast.CompilationUnit;
|
|
import com.github.javaparser.ast.body.*;
|
|
import com.github.javaparser.ast.visitor.VoidVisitorWithDefaults;
|
|
|
|
|
|
// This class visits a compilation unit and
|
|
// prints all public enum, classes or interfaces along with their public methods
|
|
public class PublicElementsPrinter extends VoidVisitorWithDefaults<Void> {
|
|
|
|
@Override
|
|
public void visit(CompilationUnit unit, Void arg) {
|
|
for(TypeDeclaration<?> type : unit.getTypes()) {
|
|
type.accept(this, null);
|
|
}
|
|
}
|
|
|
|
public void visitTypeDeclaration(TypeDeclaration<?> declaration, Void arg) {
|
|
if(!declaration.isPublic()) return;
|
|
System.out.println(declaration.getFullyQualifiedName().orElse("[Anonymous]"));
|
|
for(MethodDeclaration method : declaration.getMethods()) {
|
|
method.accept(this, arg);
|
|
}
|
|
// Printing nested types in the top level
|
|
for(BodyDeclaration<?> member : declaration.getMembers()) {
|
|
if (member instanceof TypeDeclaration)
|
|
member.accept(this, arg);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void visit(ClassOrInterfaceDeclaration declaration, Void arg) {
|
|
visitTypeDeclaration(declaration, arg);
|
|
}
|
|
|
|
@Override
|
|
public void visit(EnumDeclaration declaration, Void arg) {
|
|
visitTypeDeclaration(declaration, arg);
|
|
}
|
|
|
|
@Override
|
|
public void visit(MethodDeclaration declaration, Void arg) {
|
|
if(!declaration.isPublic()) return;
|
|
System.out.println(" " + declaration.getDeclarationAsString(true, true));
|
|
}
|
|
|
|
}
|