IntelliJ:将方法名称和签名提取到文本文件中

时间:2018-07-09 09:35:36

标签: java intellij-idea

我想为我一直在写的类写一些外部文档。我想给出一个可用方法的简明清单,基本上与IntelliJ给出的“ Structure”视图相对应。我什至可以从视图中复制和粘贴,但是仅复制方法名称,而无需方法签名或返回值。

是否可以通过IntelliJ快速创建类的结构概述以用于文档编制?

谢谢!

编辑:看来我还没有完全清楚自己,对此我深表歉意。具体来说,我想记录以下课程:https://github.com/JULIELab/jcore-base/blob/2.3.0-SNAPSHOT/jcore-utilities/src/main/java/de/julielab/jcore/utility/JCoReAnnotationTools.java

我寻求的输出格式是一个文本文件,其外观应如下所示: My wished output but in plain text

这是IntelliJ的“ Structure”面板的屏幕截图,@ Tiru也指出了该截图。以纯文本形式获取确切信息的最简单方法是什么?

JavaDoc是可能的,但相比起来比较冗长,需要大量的后处理。由于IntelliJ已经在创建这种简洁的概述,所以我希望有可能将其提取为文本。

3 个答案:

答案 0 :(得分:0)

是的,您可以使用快捷方式(cmd + F12 / ctrl + F12)轻松获取方法列表。这将为您提供方法和类变量的列表。您可以在文档中选择并使用它。

例如:

enter image description here

另一种方法是通过“侧边”窗格中的“结构”:

enter image description here

或通过图表:

enter image description here

示例图:

enter image description here

答案 1 :(得分:0)

您可以通过反射自己完成此操作。我做了一个开始。将其写入文件很容易。我将其留给读者练习。

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.stream.Collectors;

class Scratch {
    public static void main(String[] args) {
        StringBuilder stringMethods = findMethods(String.class);
        System.out.println(stringMethods);
    }

    private static StringBuilder findMethods(Class clas) {
        StringBuilder builder = new StringBuilder();

        Method[] methods = clas.getMethods();
        for (Method method : methods) {
            builder.append(" ")
                   .append(method.getName())
                   .append("(");

            Class<?>[] parameterTypes = method.getParameterTypes();
            for (int i = 0; i < parameterTypes.length; i++) {
                Class<?> aClass = parameterTypes[i];
                builder.append(aClass.getSimpleName());
                if (i < parameterTypes.length - 1) {
                    builder.append(", ");
                }
            }

            builder.append(")");

            builder.append(": ")
                   .append(method.getReturnType().equals(Void.class) ? "void" : method.getReturnType().getSimpleName())
                   .append(" ");

            if (method.getExceptionTypes().length > 0) {
                builder.append(" throws ")
                       .append(Arrays.stream(method.getExceptionTypes()).map(Class::getSimpleName).collect(Collectors.joining(", ")));
            }

            builder.append(System.lineSeparator());

        }
        return builder;

    }

}

答案 2 :(得分:0)

我不想成为这样说的人,但是...

Javadoc是唯一的 可移植对象,它将可靠地生成您要查找的内容。

值得注意的是,您没有自己编写任何Javadoc;您只需invoke the tool,它就会生成您想要的内容。

在Java的较新版本中,生成的Javadoc也可以搜索。