Back to index...
package indexing;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
import java.util.List;
import java.util.stream.Collectors;
public class IndexVisitor extends VoidVisitorAdapter<Void> {
    private final Index index;
    private final String fileUrl;
    public IndexVisitor(
            Index index,
            String fileUrl
    ) {
        this.index = index;
        this.fileUrl = fileUrl;
    }
    @Override
    public void visit(ClassOrInterfaceDeclaration classOrInterfaceDeclaration, Void arg) {
        if (classOrInterfaceDeclaration.getFullyQualifiedName().isPresent()) {
            index.addClass(
                    classOrInterfaceDeclaration.getFullyQualifiedName().get(),
                    fileUrl,
                    classOrInterfaceDeclaration.getRange().get().begin.line
            );
        }
        super.visit(classOrInterfaceDeclaration, arg);
    }
    @Override
    public void visit(RecordDeclaration recordDeclaration, Void arg) {
        if (recordDeclaration.getFullyQualifiedName().isPresent()) {
            index.addClass(
                    recordDeclaration.getFullyQualifiedName().get(),
                    fileUrl,
                    recordDeclaration.getRange().get().begin.line
            );
        }
        super.visit(recordDeclaration, arg);
    }
    @Override
    public void visit(EnumDeclaration enumDeclaration, Void arg) {
        if (enumDeclaration.getFullyQualifiedName().isPresent()) {
            index.addClass(
                    enumDeclaration.getFullyQualifiedName().get(),
                    fileUrl,
                    enumDeclaration.getRange().get().begin.line
            );
        }
        super.visit(enumDeclaration, arg);
    }
    @Override
    public void visit(MethodDeclaration methodDeclaration, Void arg) {
        String methodName = methodDeclaration.getName().asString();
        if (methodDeclaration.getParentNode().isPresent()
                && methodDeclaration.getParentNode().get() instanceof ClassOrInterfaceDeclaration
        ) {
            List<String> argTypes = methodDeclaration.getParameters().stream()
                    .map(Parameter::getTypeAsString)
                    .collect(Collectors.toList());
            String returnType = methodDeclaration.getTypeAsString();
            MethodInfo methodInfo = new MethodInfo(
                argTypes,
                returnType,
                new Index.FilePosition(
                    fileUrl,
                    methodDeclaration.getRange().get().begin.line
                )
            );
            ClassOrInterfaceDeclaration classOrInterfaceDeclaration = (ClassOrInterfaceDeclaration) methodDeclaration.getParentNode().get();
            if (classOrInterfaceDeclaration.getFullyQualifiedName().isPresent()) {
                if (methodDeclaration.isPrivate()) {
                    index.addPrivateMethod(
                            classOrInterfaceDeclaration.getFullyQualifiedName().get(),
                            methodName,
                            methodInfo
                    );
                } else {
                    index.addMethod(
                            classOrInterfaceDeclaration.getFullyQualifiedName().get(),
                            methodName,
                            methodInfo
                    );
                }
            }
        }
        super.visit(methodDeclaration, arg);
    }
    public void visit(FieldDeclaration fieldDeclaration, Void arg) {
        if (fieldDeclaration.getParentNode().isPresent()
                && fieldDeclaration.getParentNode().get() instanceof ClassOrInterfaceDeclaration
        ) {
            ClassOrInterfaceDeclaration classOrInterfaceDeclaration = (ClassOrInterfaceDeclaration) fieldDeclaration.getParentNode().get();
            if (classOrInterfaceDeclaration.getFullyQualifiedName().isPresent()) {
                if (!fieldDeclaration.isPrivate()) {
                    for (VariableDeclarator vd : fieldDeclaration.getVariables()) {
                        index.addVariable(
                            classOrInterfaceDeclaration.getFullyQualifiedName().get(),
                            vd.getNameAsString(),
                            new VariableInfo(
                                vd.getTypeAsString(),
                                new Index.FilePosition(
                                        fileUrl,
                                        fieldDeclaration.getRange().get().begin.line
                                )
                            )
                        );
                    }
                }
            }
        }
        super.visit(fieldDeclaration, arg);
    }
}
Back to index...