【问题标题】:IntelliJ: Extract method names and signatures into text fileIntelliJ:将方法名称和签名提取到文本文件中
【发布时间】:2018-07-09 09:35:35
【问题描述】:

我想为我一直在编写的课程编写一些外部文档。我想给出一个可用方法的简明列表,基本上对应于 IntelliJ 给出的“结构”视图。我什至可以从视图中复制和粘贴,但是只会复制方法名称而没有方法签名或返回值。

有没有什么快速的方法可以从 IntelliJ 中创建用于文档目的的类的结构概览?

谢谢!

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

我寻求的输出格式是一个文本文件,应该如下所示:

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

JavaDoc 是一种可能性,但相比之下相当冗长,需要相当多的后处理。由于 IntelliJ 已经在创建这种简洁的概述,我希望有可能将其提取为文本。

【问题讨论】:

  • 根据你的说法,如果我是你,我会生成一个 javadoc :jetbrains.com/help/idea/… 它是否符合你的要求?
  • 感谢您的评论。请查看我的更新答案。
  • 仅供参考:您不应该为您的问题添加答案。接受最有帮助的人就足够了。如果您有更多要添加,那么您可以发布自己的答案。

标签: java intellij-idea


【解决方案1】:

您可以通过反射自己做到这一点。我做了一个小小的开始。将其写入文件很容易。我将把它作为练习留给读者。

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;

    }

}

【讨论】:

  • 哈,答案甚至得到了反对,但我仍然接受。我之所以接受它,是因为它目前似乎是创建我想要的输出的唯一可能性(稍作更改,请参阅更新的问题)。当然,我希望 IDE 有一些内置的解决方案,但我仍然不知道。
  • 自从 Makoto - 正确 - 从我的问题中删除了我的确切解决方案:我最终使用了这段代码并进行了两个更改:我只输出声明的方法并删除了异常。我会将其保留为已接受的答案,因为它实际上回答了我的问题。然而,Makoto 也正确地指出,如果我坚持 JavaDoc 生成,从长远来看,我的工作很可能会更有效率和效果。
【解决方案2】:

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

例如:

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

或通过图表:

示例图:

【讨论】:

  • 感谢您的回答。但是,我想以纯文本形式获取信息。不仅在 IntelliJ 中或作为屏幕截图。
  • 您可以选择方法名称并按(cmd +c或ctrl +c),它将复制到您的剪贴板。
  • 是的,我在最初的问题中对此进行了描述。但它只会复制方法名称,而不是签名或返回值。你知道有什么方法可以得到这些额外的信息吗?
  • 恐怕我已经拒绝了。对不起!
【解决方案3】:

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

Javadoc 是唯一可移植的东西,可以可靠地生成您正在寻找的东西。

要注意的重要一点是,您必须自己编写任何 Javadoc。你可以invoke the tool 它会生成你想要的。

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

【讨论】:

  • 就自动生成 API 文档而言,您是对的。但是,我正在编写多个类的简短概述,而 JavaDoc 实在是太多了。我想要项目的 README.md 文件中的方法概述和解释。
  • @khituras:我非常不同意。由于您计划以 some 的能力记录您的代码,因此使用标准的方式来记录它是最实用的。它也是打字密集度最低的,因为按照这个速度,您将不得不自己输入所有这些类。没有其他工具可以真正为您提供所需的内容。
  • 我对这条评论的第一个回答是坚持我原来的观点。想多了,我改变了主意。说:JavaDoc 真的会提供(几乎)我现在正在做的一切,只是不在项目的 README 中。但是,它会将它们所属的类的文档移动到类中,并使文档生成过程更容易。谢谢你的评论。但是现在我需要考虑如何让 JavaDoc 轻松地提供给用户。
猜你喜欢
  • 2013-06-10
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 2013-11-05
相关资源
最近更新 更多