From 3045abd416c05c7e67cc1c01fd6fa9f66d60fea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E4=B8=87=E7=A8=8B?= <1498425439@qq.com> Date: Tue, 15 Mar 2022 01:37:15 +0800 Subject: [PATCH] =?UTF-8?q?package=20doc=20from=20parent=20and=20other=20p?= =?UTF-8?q?roject=20or=20jar=20|=20=E5=9C=A8=E7=88=B6=E5=8C=85=E5=92=8C?= =?UTF-8?q?=E5=85=B6=E4=BB=96=E9=A1=B9=E7=9B=AE=E4=B8=AD=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=8C=85=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/github/linwancen/plugin/show/Tree.java | 46 +++++++++++++++++-- .../linwancen/plugin/show/doc/DocUtils.java | 16 +++++-- .../io/github/linwancen/package-info.java | 4 ++ 3 files changed, 57 insertions(+), 9 deletions(-) create mode 100644 src/test/java/io/github/linwancen/package-info.java diff --git a/src/main/java/io/github/linwancen/plugin/show/Tree.java b/src/main/java/io/github/linwancen/plugin/show/Tree.java index b8a2f54..73b0b7c 100644 --- a/src/main/java/io/github/linwancen/plugin/show/Tree.java +++ b/src/main/java/io/github/linwancen/plugin/show/Tree.java @@ -35,7 +35,7 @@ public class Tree implements ProjectViewNodeDecorator { return; } - PsiDocComment docComment = psiDocCommentOf(node, project); + PsiDocComment docComment = nodeDoc(node, project); if (docComment == null) { return; } @@ -52,14 +52,14 @@ public class Tree implements ProjectViewNodeDecorator { } @Nullable - private PsiDocComment psiDocCommentOf(ProjectViewNode node, Project project) { + private PsiDocComment nodeDoc(ProjectViewNode node, Project project) { if (node instanceof PsiFileNode) { PsiFile psiFile = ((PsiFileNode) node).getValue(); return DocUtils.fileDoc(psiFile); } if (node instanceof PsiDirectoryNode) { PsiDirectory psiDirectory = ((PsiDirectoryNode) node).getValue(); - return DocUtils.dirDoc(psiDirectory); + return dirDoc(psiDirectory); } if (node instanceof PsiMethodNode) { @@ -81,7 +81,7 @@ public class Tree implements ProjectViewNodeDecorator { if (node instanceof PackageElementNode) { // On Packages View PsiPackage psiPackage = ((PackageElementNode) node).getValue().getPackage(); - return DocUtils.packageDoc(psiPackage); + return packageDoc(psiPackage); } // On Packages View, Project Files View @@ -93,7 +93,43 @@ public class Tree implements ProjectViewNodeDecorator { if (psiDirectory == null) { return null; } - return DocUtils.dirDoc(psiDirectory); + return dirDoc(psiDirectory); + } + + @Nullable + private PsiDocComment dirDoc(PsiDirectory child) { + while (true) { + PsiDocComment docComment = DocUtils.dirDoc(child); + if (docComment != null) { + return docComment; + } + PsiDirectory parent = child.getParent(); + if (parent == null) { + return null; + } + if (parent.getChildren().length != 1) { + return null; + } + child = parent; + } + } + + @Nullable + private PsiDocComment packageDoc(PsiPackage child) { + while (true) { + PsiDocComment docComment = DocUtils.packageDoc(child); + if (docComment != null) { + return docComment; + } + PsiPackage parent = child.getParentPackage(); + if (parent == null) { + return null; + } + if (parent.getChildren().length != 1) { + return null; + } + child = parent; + } } @Override diff --git a/src/main/java/io/github/linwancen/plugin/show/doc/DocUtils.java b/src/main/java/io/github/linwancen/plugin/show/doc/DocUtils.java index 227c05b..fe14323 100644 --- a/src/main/java/io/github/linwancen/plugin/show/doc/DocUtils.java +++ b/src/main/java/io/github/linwancen/plugin/show/doc/DocUtils.java @@ -23,10 +23,18 @@ public class DocUtils { } @Nullable - public static PsiDocComment packageDoc(PsiPackage psiPackage) { + public static PsiDocComment packageDoc(@Nullable PsiPackage psiPackage) { + if (psiPackage == null) { + return null; + } + String name = psiPackage.getName(); + if (name == null || name.length() == 0) { + return null; + } PsiDirectory[] psiDirectories = psiPackage.getDirectories(); for (PsiDirectory psiDirectory : psiDirectories) { - PsiDocComment psiDocComment = dirDoc(psiDirectory); + PsiFile file = psiDirectory.findFile(PsiPackage.PACKAGE_INFO_FILE); + PsiDocComment psiDocComment = PackageDocUtils.fromPackageInfoFile(file); if (psiDocComment != null) { return psiDocComment; } @@ -67,7 +75,7 @@ public class DocUtils { @Nullable public static PsiDocComment dirDoc(PsiDirectory psiDirectory) { - PsiFile file = psiDirectory.findFile(PsiPackage.PACKAGE_INFO_FILE); - return PackageDocUtils.fromPackageInfoFile(file); + PsiPackage psiPackage = JavaDirectoryService.getInstance().getPackage(psiDirectory); + return packageDoc(psiPackage); } } diff --git a/src/test/java/io/github/linwancen/package-info.java b/src/test/java/io/github/linwancen/package-info.java new file mode 100644 index 0000000..baac3b0 --- /dev/null +++ b/src/test/java/io/github/linwancen/package-info.java @@ -0,0 +1,4 @@ +/** + * should show in main even if Compact Middle Packages + */ +package io.github.linwancen; \ No newline at end of file