From 89a0c1cd6096cea43f94a9a8b9a382f777a4dc7f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9E=97=E4=B8=87=E7=A8=8B?= <1498425439@qq.com>
Date: Sat, 26 Feb 2022 03:10:43 +0800
Subject: [PATCH] =?UTF-8?q?1.5=20Support=20find=20next=20when=20not=20comm?=
=?UTF-8?q?ent=20|=20=E6=94=AF=E6=8C=81=E6=B2=A1=E6=9C=89=E6=B3=A8?=
=?UTF-8?q?=E9=87=8A=E6=97=B6=E6=9F=A5=E6=89=BE=E4=B8=8B=E4=B8=80=E4=B8=AA?=
=?UTF-8?q?=E5=AF=B9=E8=B1=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 5 +-
build.gradle | 11 +-
.../plugin/comment/utils/CommentFactory.java | 35 -----
.../comment/utils/ResolveElementUtils.java | 81 ----------
.../plugin/{comment => show}/LineEnd.java | 51 ++-----
.../plugin/{comment => show}/Tree.java | 26 ++--
.../doc/DocTextUtils.java} | 8 +-
.../linwancen/plugin/show/doc/DocUtils.java | 58 +++++++
.../doc/MethodDocUtils.java} | 18 +--
.../doc/PackageDocUtils.java} | 28 +---
.../line/LineDocLeftToRightUtils.java} | 19 +--
.../line/LineDocRightToLeftUtils.java} | 11 +-
.../plugin/show/line/LineDocUtils.java | 143 ++++++++++++++++++
.../plugin/show/line/SkipDocUtils.java | 37 +++++
.../utils => show/line}/SkipUtils.java | 16 +-
.../settings/AbstractSettingsComponent.java | 2 +-
.../settings/AppSettingsComponent.java | 2 +-
.../settings/AppSettingsConfigurable.java | 2 +-
.../settings/AppSettingsState.java | 2 +-
.../settings/ProjectSettingsComponent.java | 2 +-
.../settings/ProjectSettingsConfigurable.java | 2 +-
.../settings/ProjectSettingsState.java | 2 +-
.../settings/SplitUtils.java | 2 +-
src/main/resources/META-INF/plugin.xml | 16 +-
.../linwancen/plugin/show/demo/InDoc.java | 30 ++++
.../linwancen/plugin/show/demo/Loop.java | 20 +++
.../linwancen/plugin/show/demo/Method.java | 25 +++
.../plugin/show/demo/method/Child.java | 60 ++++++++
.../plugin/show/demo/method/Face.java | 12 ++
.../plugin/show/demo/method/Parent.java | 13 ++
.../plugin/show/demo/package-info.java | 4 +
.../utils => show/line}/SkipUtilsTest.java | 4 +-
32 files changed, 495 insertions(+), 252 deletions(-)
delete mode 100644 src/main/java/io/github/linwancen/plugin/comment/utils/CommentFactory.java
delete mode 100644 src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementUtils.java
rename src/main/java/io/github/linwancen/plugin/{comment => show}/LineEnd.java (52%)
rename src/main/java/io/github/linwancen/plugin/{comment => show}/Tree.java (78%)
rename src/main/java/io/github/linwancen/plugin/{comment/utils/PsiDocCommentUtils.java => show/doc/DocTextUtils.java} (88%)
create mode 100644 src/main/java/io/github/linwancen/plugin/show/doc/DocUtils.java
rename src/main/java/io/github/linwancen/plugin/{comment/utils/PsiMethodCommentFactory.java => show/doc/MethodDocUtils.java} (77%)
rename src/main/java/io/github/linwancen/plugin/{comment/utils/PsiPackageCommentFactory.java => show/doc/PackageDocUtils.java} (55%)
rename src/main/java/io/github/linwancen/plugin/{comment/utils/ResolveElementLeftToRightUtils.java => show/line/LineDocLeftToRightUtils.java} (72%)
rename src/main/java/io/github/linwancen/plugin/{comment/utils/ResolveElementRightToLeftUtils.java => show/line/LineDocRightToLeftUtils.java} (73%)
create mode 100644 src/main/java/io/github/linwancen/plugin/show/line/LineDocUtils.java
create mode 100644 src/main/java/io/github/linwancen/plugin/show/line/SkipDocUtils.java
rename src/main/java/io/github/linwancen/plugin/{comment/utils => show/line}/SkipUtils.java (69%)
rename src/main/java/io/github/linwancen/plugin/{comment => show}/settings/AbstractSettingsComponent.java (96%)
rename src/main/java/io/github/linwancen/plugin/{comment => show}/settings/AppSettingsComponent.java (98%)
rename src/main/java/io/github/linwancen/plugin/{comment => show}/settings/AppSettingsConfigurable.java (98%)
rename src/main/java/io/github/linwancen/plugin/{comment => show}/settings/AppSettingsState.java (97%)
rename src/main/java/io/github/linwancen/plugin/{comment => show}/settings/ProjectSettingsComponent.java (96%)
rename src/main/java/io/github/linwancen/plugin/{comment => show}/settings/ProjectSettingsConfigurable.java (98%)
rename src/main/java/io/github/linwancen/plugin/{comment => show}/settings/ProjectSettingsState.java (96%)
rename src/main/java/io/github/linwancen/plugin/{comment => show}/settings/SplitUtils.java (89%)
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/InDoc.java
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/Loop.java
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/Method.java
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/method/Child.java
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/method/Face.java
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/method/Parent.java
create mode 100644 src/test/java/io/github/linwancen/plugin/show/demo/package-info.java
rename src/test/java/io/github/linwancen/plugin/{comment/utils => show/line}/SkipUtilsTest.java (98%)
diff --git a/README.md b/README.md
index a8d6264..3648f51 100644
--- a/README.md
+++ b/README.md
@@ -20,4 +20,7 @@ Chinese Note:
Change Log:
- 1.1 Add end-of-line text color settings | 添加行末文本颜色配置
-- 1.2 Add end-of-line comment class prefix filter settings | 添加行末注释类前缀过滤配置
\ No newline at end of file
+- 1.2 Add end-of-line comment class prefix filter settings | 添加行末注释类前缀过滤配置
+- 1.3 support class in tree, constructor and field type in line end | 支持 class 树节点、构造方法和字段的行末注释
+- 1.4 Find element right to left for end-of-line comment | 从右往左查找行末注释对象
+- 1.5 Support find next when not comment | 支持没有注释时查找下一个对象
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index bd691b6..c119a42 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ plugins {
}
group 'io.github.linwancen'
-version '1.4.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
+version '1.5.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
apply plugin: 'java'
@@ -38,10 +38,11 @@ patchPluginXml {
untilBuild = ''
changeNotes = """
- - 1.1 Add end-of-line text color settings 添加行末文本颜色配置
-
- 1.2 Add end-of-line comment class prefix filter settings 添加行末注释类前缀配置
-
- 1.3 support class in tree, constructor and field type in line end 支持 class 树节点、构造方法和字段的行末注释
-
- 1.4 Find element right to left for end-of-line comment 从右往左查找行末注释对象
+
- 1.1 Add end-of-line text color settings | 添加行末文本颜色配置
+
- 1.2 Add end-of-line comment class prefix filter settings | 添加行末注释类前缀配置
+
- 1.3 Support class in tree, constructor and field type in line end | 支持 class 树节点、构造方法和字段的行末注释
+
- 1.4 Find element right to left for end-of-line comment | 从右往左查找行末注释对象
+
- 1.5 Support find next when not comment | 支持没有注释时查找下一个对象
"""
}
diff --git a/src/main/java/io/github/linwancen/plugin/comment/utils/CommentFactory.java b/src/main/java/io/github/linwancen/plugin/comment/utils/CommentFactory.java
deleted file mode 100644
index 8d026c4..0000000
--- a/src/main/java/io/github/linwancen/plugin/comment/utils/CommentFactory.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package io.github.linwancen.plugin.comment.utils;
-
-import com.intellij.psi.*;
-import com.intellij.psi.javadoc.PsiDocComment;
-import org.jetbrains.annotations.Nullable;
-
-public class CommentFactory {
-
- private CommentFactory() {}
-
- public static PsiDocComment fromSrcOrByteCode(PsiDocCommentOwner psiElement) {
- PsiElement navElement = psiElement.getNavigationElement();
- if (navElement instanceof PsiDocCommentOwner) {
- psiElement = (PsiDocCommentOwner) navElement;
- }
- return psiElement.getDocComment();
- }
-
- @Nullable
- public static PsiDocComment from(PsiFile psiFile) {
- if (!(psiFile instanceof PsiJavaFile)) {
- return null;
- }
- PsiJavaFile psiJavaFile = (PsiJavaFile) psiFile;
- if (PsiPackage.PACKAGE_INFO_FILE.equals(psiFile.getName())) {
- return PsiPackageCommentFactory.fromPackageInfoFile(psiFile);
- }
- PsiClass[] classes = psiJavaFile.getClasses();
- if (classes.length == 0) {
- return null;
- }
- PsiClass psiClass = classes[0];
- return fromSrcOrByteCode(psiClass);
- }
-}
diff --git a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementUtils.java b/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementUtils.java
deleted file mode 100644
index 6e07781..0000000
--- a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementUtils.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package io.github.linwancen.plugin.comment.utils;
-
-import com.intellij.psi.*;
-import com.intellij.psi.util.PsiTreeUtil;
-import org.jetbrains.annotations.Nullable;
-
-public class ResolveElementUtils {
-
- private ResolveElementUtils() {}
-
- @Nullable
- public static PsiElement resolveElementOf(PsiElement element, PsiElement psiIdentifier,
- int startOffset, int endOffset) {
- PsiElement newPsiElement = resolveElementForExecutable(element, startOffset, endOffset);
- if (newPsiElement != null) {
- return newPsiElement;
- }
- PsiReference psiReference = parentPsiReference(psiIdentifier, endOffset);
- if (psiReference != null) {
- return psiReference.resolve();
- }
- return null;
- }
-
- @Nullable
- private static PsiElement resolveElementForExecutable(PsiElement element, int startOffset, int endOffset) {
- if (element == null) {
- return null;
- }
- // method call
- PsiMethodCallExpression call =
- PsiTreeUtil.getParentOfType(element, PsiMethodCallExpression.class, false, startOffset);
- if (call != null) {
- // skip double comment when method call in new line:
- // someObject // someMethodComment
- // .someMethod(); // someMethodComment
- if ((call.getNode().getStartOffset() + call.getNode().getTextLength()) > endOffset) {
- return null;
- }
- try {
- return call.resolveMethod();
- } catch (Exception e) {
- return null;
- }
- }
- // new and Class should same line
- PsiNewExpression newExp = PsiTreeUtil.getParentOfType(element, PsiNewExpression.class, false, startOffset);
- if (newExp != null) {
- PsiMethod psiMethod = newExp.resolveMethod();
- if (psiMethod != null) {
- return psiMethod;
- }
- PsiJavaCodeReferenceElement classReference = newExp.getClassReference();
- if (classReference != null) {
- return classReference.resolve();
- }
- }
- return null;
- }
-
- /**
- * ::/class/field
- */
- @Nullable
- private static PsiReference parentPsiReference(PsiElement element, int endOffset) {
- if (element == null) {
- return null;
- }
- PsiElement parent;
- while ((parent = element.getParent()) instanceof PsiReference) {
- if (parent.getTextRange().getEndOffset() > endOffset) {
- break;
- }
- element = parent;
- }
- if (element instanceof PsiReference) {
- return (PsiReference) element;
- }
- return null;
- }
-}
diff --git a/src/main/java/io/github/linwancen/plugin/comment/LineEnd.java b/src/main/java/io/github/linwancen/plugin/show/LineEnd.java
similarity index 52%
rename from src/main/java/io/github/linwancen/plugin/comment/LineEnd.java
rename to src/main/java/io/github/linwancen/plugin/show/LineEnd.java
index 708696e..ad07302 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/LineEnd.java
+++ b/src/main/java/io/github/linwancen/plugin/show/LineEnd.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment;
+package io.github.linwancen.plugin.show;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.editor.Document;
@@ -7,10 +7,13 @@ import com.intellij.openapi.editor.LineExtensionInfo;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.*;
+import com.intellij.psi.FileViewProvider;
+import com.intellij.psi.PsiManager;
import com.intellij.psi.javadoc.PsiDocComment;
-import io.github.linwancen.plugin.comment.settings.AppSettingsState;
-import io.github.linwancen.plugin.comment.utils.*;
+import io.github.linwancen.plugin.show.doc.DocTextUtils;
+import io.github.linwancen.plugin.show.line.LineDocLeftToRightUtils;
+import io.github.linwancen.plugin.show.line.LineDocRightToLeftUtils;
+import io.github.linwancen.plugin.show.settings.AppSettingsState;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -30,9 +33,8 @@ public class LineEnd extends EditorLinePainter {
return null;
}
FileViewProvider viewProvider = PsiManager.getInstance(project).findViewProvider(file);
- PsiElement psiElement = resolveElementFrom(viewProvider, lineNumber);
- PsiDocComment docComment = psiDocCommentFrom(psiElement);
- String comment = PsiDocCommentUtils.getCommentText(docComment);
+ PsiDocComment docComment = docOwnerFrom(viewProvider, lineNumber);
+ String comment = DocTextUtils.text(docComment);
if (comment == null) {
return null;
}
@@ -40,7 +42,7 @@ public class LineEnd extends EditorLinePainter {
return Collections.singletonList(info);
}
- private static @Nullable PsiElement resolveElementFrom(FileViewProvider viewProvider, int lineNumber) {
+ private static @Nullable PsiDocComment docOwnerFrom(FileViewProvider viewProvider, int lineNumber) {
if (viewProvider == null || !viewProvider.hasLanguage(JavaLanguage.INSTANCE)) {
return null;
}
@@ -57,37 +59,8 @@ public class LineEnd extends EditorLinePainter {
return null;
}
if (AppSettingsState.getInstance().findElementRightToLeft) {
- return ResolveElementRightToLeftUtils.resolveElement(viewProvider, startOffset, endOffset);
+ return LineDocRightToLeftUtils.rightDoc(viewProvider, startOffset, endOffset);
}
- return ResolveElementLeftToRightUtils.resolveElement(viewProvider, document, startOffset, endOffset);
- }
-
- @Nullable
- private PsiDocComment psiDocCommentFrom(PsiElement psiElement) {
- if (psiElement == null) {
- return null;
- }
- if (psiElement instanceof PsiClass) {
- PsiClass psiClass = (PsiClass) psiElement;
- if (SkipUtils.skip(psiClass, psiClass.getProject())) {
- return null;
- }
- return CommentFactory.fromSrcOrByteCode(psiClass);
- }
- if (psiElement instanceof PsiMethod) {
- PsiMethod psiMethod = (PsiMethod) psiElement;
- if (SkipUtils.skip(psiMethod.getContainingClass(), psiMethod.getProject())) {
- return null;
- }
- return PsiMethodCommentFactory.from(psiMethod);
- }
- if (psiElement instanceof PsiField) {
- PsiField psiField = (PsiField) psiElement;
- if (SkipUtils.skip(psiField.getContainingClass(), psiField.getProject())) {
- return null;
- }
- return CommentFactory.fromSrcOrByteCode(psiField);
- }
- return null;
+ return LineDocLeftToRightUtils.leftDoc(viewProvider, document, startOffset, endOffset);
}
}
diff --git a/src/main/java/io/github/linwancen/plugin/comment/Tree.java b/src/main/java/io/github/linwancen/plugin/show/Tree.java
similarity index 78%
rename from src/main/java/io/github/linwancen/plugin/comment/Tree.java
rename to src/main/java/io/github/linwancen/plugin/show/Tree.java
index 4455eb0..c0e1dc6 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/Tree.java
+++ b/src/main/java/io/github/linwancen/plugin/show/Tree.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment;
+package io.github.linwancen.plugin.show;
import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.projectView.ProjectViewNode;
@@ -13,11 +13,9 @@ import com.intellij.psi.*;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.SimpleTextAttributes;
-import io.github.linwancen.plugin.comment.settings.AppSettingsState;
-import io.github.linwancen.plugin.comment.utils.CommentFactory;
-import io.github.linwancen.plugin.comment.utils.PsiDocCommentUtils;
-import io.github.linwancen.plugin.comment.utils.PsiMethodCommentFactory;
-import io.github.linwancen.plugin.comment.utils.PsiPackageCommentFactory;
+import io.github.linwancen.plugin.show.doc.DocUtils;
+import io.github.linwancen.plugin.show.doc.DocTextUtils;
+import io.github.linwancen.plugin.show.settings.AppSettingsState;
import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -42,7 +40,7 @@ public class Tree implements ProjectViewNodeDecorator {
return;
}
- String commentText = PsiDocCommentUtils.getCommentText(docComment);
+ String commentText = DocTextUtils.text(docComment);
if (commentText == null) {
return;
}
@@ -57,33 +55,33 @@ public class Tree implements ProjectViewNodeDecorator {
private PsiDocComment psiDocCommentOf(ProjectViewNode> node, Project project) {
if (node instanceof PsiFileNode) {
PsiFile psiFile = ((PsiFileNode) node).getValue();
- return CommentFactory.from(psiFile);
+ return DocUtils.fileDoc(psiFile);
}
if (node instanceof PsiDirectoryNode) {
PsiDirectory psiDirectory = ((PsiDirectoryNode) node).getValue();
- return PsiPackageCommentFactory.from(psiDirectory);
+ return DocUtils.dirDoc(psiDirectory);
}
if (node instanceof PsiMethodNode) {
// On Show Members
PsiMethod psiMethod = ((PsiMethodNode) node).getValue();
- return PsiMethodCommentFactory.from(psiMethod);
+ return DocUtils.methodDoc(psiMethod);
}
if (node instanceof PsiFieldNode) {
// On Show Members
PsiField psiField = ((PsiFieldNode) node).getValue();
- return CommentFactory.fromSrcOrByteCode(psiField);
+ return DocUtils.srcOrByteCodeDoc(psiField);
}
if (node instanceof ClassTreeNode) {
// On Packages View, Project Files View, Show Members
PsiClass psiClass = ((ClassTreeNode) node).getValue();
- return CommentFactory.fromSrcOrByteCode(psiClass);
+ return DocUtils.srcOrByteCodeDoc(psiClass);
}
if (node instanceof PackageElementNode) {
// On Packages View
PsiPackage psiPackage = ((PackageElementNode) node).getValue().getPackage();
- return PsiPackageCommentFactory.from(psiPackage);
+ return DocUtils.packageDoc(psiPackage);
}
// On Packages View, Project Files View
@@ -95,7 +93,7 @@ public class Tree implements ProjectViewNodeDecorator {
if (psiDirectory == null) {
return null;
}
- return PsiPackageCommentFactory.from(psiDirectory);
+ return DocUtils.dirDoc(psiDirectory);
}
@Override
diff --git a/src/main/java/io/github/linwancen/plugin/comment/utils/PsiDocCommentUtils.java b/src/main/java/io/github/linwancen/plugin/show/doc/DocTextUtils.java
similarity index 88%
rename from src/main/java/io/github/linwancen/plugin/comment/utils/PsiDocCommentUtils.java
rename to src/main/java/io/github/linwancen/plugin/show/doc/DocTextUtils.java
index c09d172..9cdfee2 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/utils/PsiDocCommentUtils.java
+++ b/src/main/java/io/github/linwancen/plugin/show/doc/DocTextUtils.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.utils;
+package io.github.linwancen.plugin.show.doc;
import com.intellij.psi.PsiElement;
import com.intellij.psi.javadoc.PsiDocComment;
@@ -9,12 +9,12 @@ import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
-public class PsiDocCommentUtils {
+public class DocTextUtils {
- private PsiDocCommentUtils() {}
+ private DocTextUtils() {}
@Nullable
- public static String getCommentText(@Nullable PsiDocComment psiDocComment) {
+ public static String text(@Nullable PsiDocComment psiDocComment) {
if (psiDocComment == null) {
return null;
}
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
new file mode 100644
index 0000000..56ad091
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/doc/DocUtils.java
@@ -0,0 +1,58 @@
+package io.github.linwancen.plugin.show.doc;
+
+import com.intellij.psi.*;
+import com.intellij.psi.javadoc.PsiDocComment;
+import org.jetbrains.annotations.Nullable;
+
+public class DocUtils {
+
+ private DocUtils() {}
+
+ public static PsiDocComment srcOrByteCodeDoc(PsiDocCommentOwner psiDocCommentOwner) {
+ PsiElement navElement = psiDocCommentOwner.getNavigationElement();
+ if (navElement instanceof PsiDocCommentOwner) {
+ psiDocCommentOwner = (PsiDocCommentOwner) navElement;
+ }
+ return psiDocCommentOwner.getDocComment();
+ }
+
+ @Nullable
+ public static PsiDocComment methodDoc(PsiMethod psiMethod) {
+ return MethodDocUtils.methodSupperNewPropDoc(psiMethod);
+ }
+
+ @Nullable
+ public static PsiDocComment packageDoc(PsiPackage psiPackage) {
+ PsiDirectory[] psiDirectories = psiPackage.getDirectories();
+ for (PsiDirectory psiDirectory : psiDirectories) {
+ PsiDocComment psiDocComment = dirDoc(psiDirectory);
+ if (psiDocComment != null) {
+ return psiDocComment;
+ }
+ }
+ return null;
+ }
+
+ @Nullable
+ public static PsiDocComment fileDoc(PsiFile psiFile) {
+ if (!(psiFile instanceof PsiJavaFile)) {
+ return null;
+ }
+ PsiJavaFile psiJavaFile = (PsiJavaFile) psiFile;
+ if (PsiPackage.PACKAGE_INFO_FILE.equals(psiFile.getName())) {
+ return PackageDocUtils.fromPackageInfoFile(psiFile);
+ }
+ PsiClass[] classes = psiJavaFile.getClasses();
+ if (classes.length == 0) {
+ return null;
+ }
+ PsiClass psiClass = classes[0];
+ return srcOrByteCodeDoc(psiClass);
+ }
+
+ @Nullable
+ public static PsiDocComment dirDoc(PsiDirectory psiDirectory) {
+ PsiFile file = psiDirectory.findFile(PsiPackage.PACKAGE_INFO_FILE);
+ return PackageDocUtils.fromPackageInfoFile(file);
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/comment/utils/PsiMethodCommentFactory.java b/src/main/java/io/github/linwancen/plugin/show/doc/MethodDocUtils.java
similarity index 77%
rename from src/main/java/io/github/linwancen/plugin/comment/utils/PsiMethodCommentFactory.java
rename to src/main/java/io/github/linwancen/plugin/show/doc/MethodDocUtils.java
index 33654fe..c5f8f12 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/utils/PsiMethodCommentFactory.java
+++ b/src/main/java/io/github/linwancen/plugin/show/doc/MethodDocUtils.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.utils;
+package io.github.linwancen.plugin.show.doc;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
@@ -7,12 +7,12 @@ import com.intellij.psi.PsiMethod;
import com.intellij.psi.javadoc.PsiDocComment;
import org.jetbrains.annotations.Nullable;
-public class PsiMethodCommentFactory {
+class MethodDocUtils {
- private PsiMethodCommentFactory() {}
+ private MethodDocUtils() {}
@Nullable
- public static PsiDocComment from(PsiMethod psiMethod) {
+ static PsiDocComment methodSupperNewPropDoc(PsiMethod psiMethod) {
// .class
PsiElement navElement = psiMethod.getNavigationElement();
if (navElement instanceof PsiMethod) {
@@ -25,7 +25,7 @@ public class PsiMethodCommentFactory {
}
// supper
- PsiDocComment superDoc = supperMethodComment(psiMethod);
+ PsiDocComment superDoc = supperMethodDoc(psiMethod);
if (superDoc != null) {
return superDoc;
}
@@ -42,14 +42,14 @@ public class PsiMethodCommentFactory {
}
// get/set/is - PropertyDescriptor getReadMethod() getWriteMethod()
- return propMethodComment(psiMethod, clazz);
+ return propMethodDoc(psiMethod, clazz);
}
@Nullable
- public static PsiDocComment supperMethodComment(PsiMethod psiMethod) {
+ private static PsiDocComment supperMethodDoc(PsiMethod psiMethod) {
PsiMethod[] superMethods = psiMethod.findSuperMethods();
for (PsiMethod superMethod : superMethods) {
- PsiDocComment superDoc = from(superMethod);
+ PsiDocComment superDoc = DocUtils.methodDoc(superMethod);
if (superDoc != null) {
return superDoc;
}
@@ -58,7 +58,7 @@ public class PsiMethodCommentFactory {
}
@Nullable
- public static PsiDocComment propMethodComment(PsiMethod psiMethod, PsiClass psiClass) {
+ private static PsiDocComment propMethodDoc(PsiMethod psiMethod, PsiClass psiClass) {
String name = psiMethod.getName();
if (name.length() > 3 && (name.startsWith("get") || name.startsWith("set"))) {
name = name.substring(3);
diff --git a/src/main/java/io/github/linwancen/plugin/comment/utils/PsiPackageCommentFactory.java b/src/main/java/io/github/linwancen/plugin/show/doc/PackageDocUtils.java
similarity index 55%
rename from src/main/java/io/github/linwancen/plugin/comment/utils/PsiPackageCommentFactory.java
rename to src/main/java/io/github/linwancen/plugin/show/doc/PackageDocUtils.java
index 580c8b4..6af568f 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/utils/PsiPackageCommentFactory.java
+++ b/src/main/java/io/github/linwancen/plugin/show/doc/PackageDocUtils.java
@@ -1,39 +1,19 @@
-package io.github.linwancen.plugin.comment.utils;
+package io.github.linwancen.plugin.show.doc;
import com.intellij.lang.ASTNode;
-import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiPackage;
import com.intellij.psi.impl.source.tree.JavaDocElementType;
import com.intellij.psi.impl.source.tree.JavaElementType;
import com.intellij.psi.javadoc.PsiDocComment;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-public class PsiPackageCommentFactory {
+class PackageDocUtils {
- private PsiPackageCommentFactory() {}
+ private PackageDocUtils() {}
@Nullable
- public static PsiDocComment from(PsiPackage psiPackage) {
- PsiDirectory[] psiDirectories = psiPackage.getDirectories();
- for (PsiDirectory psiDirectory : psiDirectories) {
- PsiDocComment psiDocComment = from(psiDirectory);
- if (psiDocComment != null) {
- return psiDocComment;
- }
- }
- return null;
- }
-
- @Nullable
- public static PsiDocComment from(PsiDirectory psiDirectory) {
- PsiFile packageInfoFile = psiDirectory.findFile(PsiPackage.PACKAGE_INFO_FILE);
- return fromPackageInfoFile(packageInfoFile);
- }
-
- @Nullable
- public static PsiDocComment fromPackageInfoFile(PsiFile packageInfoFile) {
+ static PsiDocComment fromPackageInfoFile(PsiFile packageInfoFile) {
if (packageInfoFile == null) {
return null;
}
diff --git a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementLeftToRightUtils.java b/src/main/java/io/github/linwancen/plugin/show/line/LineDocLeftToRightUtils.java
similarity index 72%
rename from src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementLeftToRightUtils.java
rename to src/main/java/io/github/linwancen/plugin/show/line/LineDocLeftToRightUtils.java
index d7f4131..46d5629 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementLeftToRightUtils.java
+++ b/src/main/java/io/github/linwancen/plugin/show/line/LineDocLeftToRightUtils.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.utils;
+package io.github.linwancen.plugin.show.line;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.editor.Document;
@@ -6,20 +6,21 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiIdentifier;
+import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.Nullable;
-public class ResolveElementLeftToRightUtils {
+public class LineDocLeftToRightUtils {
- private ResolveElementLeftToRightUtils() {}
+ private LineDocLeftToRightUtils() {}
- protected static final String[] KEYS = {
+ static final String[] KEYS = {
"=",
};
@Nullable
- public static PsiElement resolveElement(FileViewProvider viewProvider, Document document,
- int startOffset, int endOffset) {
+ public static PsiDocComment leftDoc(FileViewProvider viewProvider, Document document,
+ int startOffset, int endOffset) {
String text = document.getText(new TextRange(startOffset, endOffset));
int offset = 0;
for (String s : KEYS) {
@@ -47,12 +48,12 @@ public class ResolveElementLeftToRightUtils {
startOffset = 0;
}
PsiElement element = viewProvider.findElementAt(offset, JavaLanguage.INSTANCE);
- PsiIdentifier psiIdentifier = psiIdentifier(element, endOffset);
- return ResolveElementUtils.resolveElementOf(psiIdentifier, psiIdentifier, startOffset, endOffset);
+ PsiIdentifier psiIdentifier = leftIdentifier(element, endOffset);
+ return LineDocUtils.elementDoc(psiIdentifier, psiIdentifier, startOffset, endOffset);
}
@Nullable
- private static PsiIdentifier psiIdentifier(PsiElement element, int endOffset) {
+ private static PsiIdentifier leftIdentifier(PsiElement element, int endOffset) {
if (element == null) {
return null;
}
diff --git a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementRightToLeftUtils.java b/src/main/java/io/github/linwancen/plugin/show/line/LineDocRightToLeftUtils.java
similarity index 73%
rename from src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementRightToLeftUtils.java
rename to src/main/java/io/github/linwancen/plugin/show/line/LineDocRightToLeftUtils.java
index d9c884d..ee22888 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementRightToLeftUtils.java
+++ b/src/main/java/io/github/linwancen/plugin/show/line/LineDocRightToLeftUtils.java
@@ -1,18 +1,19 @@
-package io.github.linwancen.plugin.comment.utils;
+package io.github.linwancen.plugin.show.line;
import com.intellij.lang.java.JavaLanguage;
import com.intellij.psi.FileViewProvider;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiIdentifier;
+import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.Nullable;
-public class ResolveElementRightToLeftUtils {
+public class LineDocRightToLeftUtils {
- private ResolveElementRightToLeftUtils() {}
+ private LineDocRightToLeftUtils() {}
@Nullable
- public static PsiElement resolveElement(FileViewProvider viewProvider, int startOffset, int endOffset) {
+ public static PsiDocComment rightDoc(FileViewProvider viewProvider, int startOffset, int endOffset) {
// End is always white, can not -1 because @see class.name need it
PsiElement element = viewProvider.findElementAt(endOffset, JavaLanguage.INSTANCE);
if (element == null) {
@@ -29,6 +30,6 @@ public class ResolveElementRightToLeftUtils {
if (identifier != null && identifier.getTextRange().getStartOffset() < startOffset) {
identifier = null;
}
- return ResolveElementUtils.resolveElementOf(element, identifier, startOffset, endOffset);
+ return LineDocUtils.elementDoc(element, identifier, startOffset, endOffset);
}
}
diff --git a/src/main/java/io/github/linwancen/plugin/show/line/LineDocUtils.java b/src/main/java/io/github/linwancen/plugin/show/line/LineDocUtils.java
new file mode 100644
index 0000000..0792680
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/line/LineDocUtils.java
@@ -0,0 +1,143 @@
+package io.github.linwancen.plugin.show.line;
+
+import com.intellij.psi.*;
+import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef;
+import com.intellij.psi.javadoc.PsiDocComment;
+import com.intellij.psi.util.PsiTreeUtil;
+import org.jetbrains.annotations.Nullable;
+
+class LineDocUtils {
+
+ private LineDocUtils() {}
+
+ @Nullable
+ static PsiDocComment elementDoc(PsiElement element, PsiElement psiIdentifier,
+ int startOffset, int endOffset) {
+ if (element != null) {
+ PsiDocComment executableDoc = parentMethodDoc(element, startOffset, endOffset);
+ if (executableDoc != null) {
+ return executableDoc;
+ }
+ PsiDocComment newDoc = parentNewDoc(element, startOffset);
+ if (newDoc != null) {
+ return newDoc;
+ }
+ PsiDocComment docRefDoc = docRefDoc(element);
+ if (docRefDoc != null) {
+ return docRefDoc;
+ }
+ }
+ return refDoc(psiIdentifier, endOffset);
+ }
+
+ @Nullable
+ private static PsiDocComment parentMethodDoc(PsiElement element, int startOffset, int endOffset) {
+ // method call
+ PsiMethodCallExpression call =
+ PsiTreeUtil.getParentOfType(element, PsiMethodCallExpression.class, false, startOffset);
+ if (call == null) {
+ return null;
+ }
+ if ((call.getNode().getStartOffset() + call.getNode().getTextLength()) > endOffset) {
+ return null;
+ }
+ try {
+ PsiDocComment methodComment = SkipDocUtils.methodDoc(call.resolveMethod());
+ if (methodComment != null) {
+ return methodComment;
+ }
+ } catch (Exception ignored) {
+ // ignored
+ }
+ return null;
+ }
+
+ @Nullable
+ private static PsiDocComment parentNewDoc(PsiElement element, int startOffset) {
+ // new and Class should same line, so not need if endOffset
+ PsiNewExpression newExp = PsiTreeUtil.getParentOfType(element, PsiNewExpression.class, false, startOffset);
+ if (newExp == null) {
+ return null;
+ }
+ PsiDocComment methodComment = SkipDocUtils.methodDoc(newExp.resolveMethod());
+ if (methodComment != null) {
+ return methodComment;
+ }
+ PsiJavaCodeReferenceElement classReference = newExp.getClassReference();
+ return javaCodeDoc(classReference);
+ }
+
+ /**
+ * ::/class/field
+ */
+ @Nullable
+ private static PsiDocComment refDoc(PsiElement element, int endOffset) {
+ if (element == null) {
+ return null;
+ }
+ // while for xx.xx.xx... when left to right, only once when right to left
+ PsiElement parent;
+ while ((parent = element.getParent()) instanceof PsiReference) {
+ if (parent.getTextRange().getEndOffset() > endOffset) {
+ break;
+ }
+ element = parent;
+ }
+ if (element instanceof PsiReference) {
+ PsiElement resolve = ((PsiReference) element).resolve();
+ if (resolve instanceof PsiDocCommentOwner) {
+ return SkipDocUtils.refDoc(((PsiDocCommentOwner) resolve));
+ }
+ }
+ // for right to left field
+ if (parent instanceof PsiDocCommentOwner) {
+ return SkipDocUtils.refDoc(((PsiDocCommentOwner) parent));
+ }
+ // for right to left for
+ if (parent instanceof PsiForeachStatement) {
+ PsiParameter iterationParameter = ((PsiForeachStatement) parent).getIterationParameter();
+ PsiTypeElement typeElement = iterationParameter.getTypeElement();
+ if (typeElement == null) {
+ return null;
+ }
+ PsiJavaCodeReferenceElement ref = typeElement.getInnermostComponentReferenceElement();
+ return javaCodeDoc(ref);
+ }
+ return null;
+ }
+
+
+ @Nullable
+ private static PsiDocComment javaCodeDoc(PsiJavaCodeReferenceElement ref) {
+ if (ref == null) {
+ return null;
+ }
+ PsiElement resolve = ref.resolve();
+ if (resolve instanceof PsiDocCommentOwner) {
+ return SkipDocUtils.refDoc(((PsiDocCommentOwner) resolve));
+ }
+ return null;
+ }
+
+ @Nullable
+ private static PsiDocComment docRefDoc(PsiElement element) {
+ PsiElement parent = element.getParent();
+ if (parent instanceof PsiDocMethodOrFieldRef) {
+ element = parent;
+ }
+ if (element instanceof PsiDocMethodOrFieldRef) {
+ PsiReference reference = element.getReference();
+ if (reference == null) {
+ return null;
+ }
+ PsiElement resolve = reference.resolve();
+ if (resolve instanceof PsiMethod) {
+ return SkipDocUtils.methodDoc(((PsiMethod) resolve));
+ }
+ if (resolve instanceof PsiDocCommentOwner) {
+ return SkipDocUtils.refDoc(((PsiDocCommentOwner) resolve));
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/show/line/SkipDocUtils.java b/src/main/java/io/github/linwancen/plugin/show/line/SkipDocUtils.java
new file mode 100644
index 0000000..0ec19a1
--- /dev/null
+++ b/src/main/java/io/github/linwancen/plugin/show/line/SkipDocUtils.java
@@ -0,0 +1,37 @@
+package io.github.linwancen.plugin.show.line;
+
+import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiDocCommentOwner;
+import com.intellij.psi.PsiMethod;
+import com.intellij.psi.javadoc.PsiDocComment;
+import io.github.linwancen.plugin.show.doc.DocUtils;
+import org.jetbrains.annotations.Nullable;
+
+class SkipDocUtils {
+
+ private SkipDocUtils() {}
+
+ static PsiDocComment methodDoc(@Nullable PsiMethod psiMethod) {
+ if (skip(psiMethod)) {
+ return null;
+ }
+ return DocUtils.methodDoc(psiMethod);
+ }
+
+ static PsiDocComment refDoc(@Nullable PsiDocCommentOwner docOwner) {
+ if (skip(docOwner)) {
+ return null;
+ }
+ return DocUtils.srcOrByteCodeDoc(docOwner);
+ }
+
+ static boolean skip(@Nullable PsiDocCommentOwner docOwner) {
+ if (docOwner == null) {
+ return true;
+ }
+ if (docOwner instanceof PsiClass) {
+ return SkipUtils.skip((PsiClass) docOwner, docOwner.getProject());
+ }
+ return SkipUtils.skip(docOwner.getContainingClass(), docOwner.getProject());
+ }
+}
diff --git a/src/main/java/io/github/linwancen/plugin/comment/utils/SkipUtils.java b/src/main/java/io/github/linwancen/plugin/show/line/SkipUtils.java
similarity index 69%
rename from src/main/java/io/github/linwancen/plugin/comment/utils/SkipUtils.java
rename to src/main/java/io/github/linwancen/plugin/show/line/SkipUtils.java
index b7e35c5..5574bfa 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/utils/SkipUtils.java
+++ b/src/main/java/io/github/linwancen/plugin/show/line/SkipUtils.java
@@ -1,15 +1,15 @@
-package io.github.linwancen.plugin.comment.utils;
+package io.github.linwancen.plugin.show.line;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiClass;
-import io.github.linwancen.plugin.comment.settings.AppSettingsState;
-import io.github.linwancen.plugin.comment.settings.ProjectSettingsState;
+import io.github.linwancen.plugin.show.settings.AppSettingsState;
+import io.github.linwancen.plugin.show.settings.ProjectSettingsState;
-public class SkipUtils {
+class SkipUtils {
private SkipUtils() {}
- public static boolean skip(PsiClass psiClass, Project project) {
+ static boolean skip(PsiClass psiClass, Project project) {
if (psiClass == null) {
return true;
}
@@ -29,21 +29,21 @@ public class SkipUtils {
return false;
}
- protected static boolean skipName(String name, String[] includeArray, String[] excludeArray) {
+ static boolean skipName(String name, String[] includeArray, String[] excludeArray) {
if (exclude(name, excludeArray)) {
return true;
}
return !include(name, includeArray);
}
- protected static boolean include(String name, String[] lineEndIncludeArray) {
+ static boolean include(String name, String[] lineEndIncludeArray) {
if (lineEndIncludeArray.length == 0) {
return true;
}
return exclude(name, lineEndIncludeArray);
}
- protected static boolean exclude(String name, String[] projectLineEndExcludeArray) {
+ static boolean exclude(String name, String[] projectLineEndExcludeArray) {
for (String s : projectLineEndExcludeArray) {
if (name.startsWith(s)) {
return true;
diff --git a/src/main/java/io/github/linwancen/plugin/comment/settings/AbstractSettingsComponent.java b/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsComponent.java
similarity index 96%
rename from src/main/java/io/github/linwancen/plugin/comment/settings/AbstractSettingsComponent.java
rename to src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsComponent.java
index dc73d33..8ab8db1 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/settings/AbstractSettingsComponent.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/AbstractSettingsComponent.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.settings;
+package io.github.linwancen.plugin.show.settings;
import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.components.JBLabel;
diff --git a/src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsComponent.java b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsComponent.java
similarity index 98%
rename from src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsComponent.java
rename to src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsComponent.java
index 75fc49e..e5f07c0 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsComponent.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsComponent.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.settings;
+package io.github.linwancen.plugin.show.settings;
import com.intellij.ui.ColorPanel;
import com.intellij.ui.IdeBorderFactory;
diff --git a/src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsConfigurable.java b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsConfigurable.java
similarity index 98%
rename from src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsConfigurable.java
rename to src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsConfigurable.java
index 82479af..7d19ea1 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsConfigurable.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsConfigurable.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.settings;
+package io.github.linwancen.plugin.show.settings;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.options.Configurable;
diff --git a/src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsState.java b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsState.java
similarity index 97%
rename from src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsState.java
rename to src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsState.java
index 3f99c43..a7d3f73 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsState.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/AppSettingsState.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.settings;
+package io.github.linwancen.plugin.show.settings;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.PersistentStateComponent;
diff --git a/src/main/java/io/github/linwancen/plugin/comment/settings/ProjectSettingsComponent.java b/src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsComponent.java
similarity index 96%
rename from src/main/java/io/github/linwancen/plugin/comment/settings/ProjectSettingsComponent.java
rename to src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsComponent.java
index 7ea7cb4..b705a29 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/settings/ProjectSettingsComponent.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsComponent.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.settings;
+package io.github.linwancen.plugin.show.settings;
import com.intellij.ui.components.JBCheckBox;
import com.intellij.util.ui.FormBuilder;
diff --git a/src/main/java/io/github/linwancen/plugin/comment/settings/ProjectSettingsConfigurable.java b/src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsConfigurable.java
similarity index 98%
rename from src/main/java/io/github/linwancen/plugin/comment/settings/ProjectSettingsConfigurable.java
rename to src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsConfigurable.java
index e01f620..760da1f 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/settings/ProjectSettingsConfigurable.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsConfigurable.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.settings;
+package io.github.linwancen.plugin.show.settings;
import com.intellij.application.options.ModuleAwareProjectConfigurable;
import com.intellij.openapi.module.Module;
diff --git a/src/main/java/io/github/linwancen/plugin/comment/settings/ProjectSettingsState.java b/src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsState.java
similarity index 96%
rename from src/main/java/io/github/linwancen/plugin/comment/settings/ProjectSettingsState.java
rename to src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsState.java
index fd67c21..c635c29 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/settings/ProjectSettingsState.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/ProjectSettingsState.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.settings;
+package io.github.linwancen.plugin.show.settings;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.ServiceManager;
diff --git a/src/main/java/io/github/linwancen/plugin/comment/settings/SplitUtils.java b/src/main/java/io/github/linwancen/plugin/show/settings/SplitUtils.java
similarity index 89%
rename from src/main/java/io/github/linwancen/plugin/comment/settings/SplitUtils.java
rename to src/main/java/io/github/linwancen/plugin/show/settings/SplitUtils.java
index 805deb8..4617b62 100644
--- a/src/main/java/io/github/linwancen/plugin/comment/settings/SplitUtils.java
+++ b/src/main/java/io/github/linwancen/plugin/show/settings/SplitUtils.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.settings;
+package io.github.linwancen.plugin.show.settings;
import org.jetbrains.annotations.NotNull;
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index 9140800..d10ddee 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -31,20 +31,20 @@
com.intellij.modules.java
-
-
+
+
-
+
-
+
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/InDoc.java b/src/test/java/io/github/linwancen/plugin/show/demo/InDoc.java
new file mode 100644
index 0000000..dd4cc52
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/InDoc.java
@@ -0,0 +1,30 @@
+package io.github.linwancen.plugin.show.demo;
+
+/**
+ * InDoc
+ * {@link InDoc}
+ * {@link InDoc#field}
+ * {@link InDoc#method1}
+ * {@link InDoc#method1()}
+ * {@link InDoc#method2(InDoc)}
+ *
+ * @see InDoc
+ */
+public class InDoc {
+ /**
+ * field
+ */
+ public String field;
+
+ /**
+ * method()
+ */
+ public void method1() {
+ }
+
+ /**
+ * method(InDoc)
+ */
+ public void method2(InDoc inDoc) {
+ }
+}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/Loop.java b/src/test/java/io/github/linwancen/plugin/show/demo/Loop.java
new file mode 100644
index 0000000..6f1f493
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/Loop.java
@@ -0,0 +1,20 @@
+package io.github.linwancen.plugin.show.demo;
+
+import io.github.linwancen.plugin.show.demo.method.Child;
+import io.github.linwancen.plugin.show.demo.method.Parent;
+
+@SuppressWarnings("all")
+public class Loop {
+ public static void method() {
+ Child child = new Child();
+ while (child.bool) {
+ if (child.isBool()) {
+ return;
+ }
+ }
+
+ Parent[] fors = new Child[]{};
+ for (Parent f : fors) {
+ }
+ }
+}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/Method.java b/src/test/java/io/github/linwancen/plugin/show/demo/Method.java
new file mode 100644
index 0000000..52c69d2
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/Method.java
@@ -0,0 +1,25 @@
+package io.github.linwancen.plugin.show.demo;
+
+import io.github.linwancen.plugin.show.demo.method.Child;
+import io.github.linwancen.plugin.show.demo.method.Face;
+import io.github.linwancen.plugin.show.demo.method.Parent;
+
+public class Method {
+ public static void method() {
+ Parent noneNewMethod = new Parent();
+ Face noneNewDoc = new Child();
+
+ Child child = new Child(true);
+ Parent parentMethod = child.parentMethod();
+ Face faceMethod = child.faceMethod(child);
+
+ boolean is = child.isBool();
+ Child field = child.field;
+ Child get = child.getField();
+ child.setField(new Child(true)); // field
+
+ Face fun = Child::fun;
+ child
+ .faceMethod(face1 -> Child::fun);
+ }
+}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/method/Child.java b/src/test/java/io/github/linwancen/plugin/show/demo/method/Child.java
new file mode 100644
index 0000000..3db9f4d
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/method/Child.java
@@ -0,0 +1,60 @@
+package io.github.linwancen.plugin.show.demo.method;
+
+/**
+ * Child
+ */
+public class Child extends Parent implements Face {
+
+ public Child() {
+ }
+
+ /**
+ * Child(boolean bool)
+ */
+ public Child(boolean bool) {
+ this.bool = bool;
+ }
+
+
+ @Override
+ public Parent parentMethod() {
+ return null;
+ }
+
+ @Override
+ public Face faceMethod(Face face) {
+ return null;
+ }
+
+
+ /**
+ * fun
+ */
+ public static Face fun(Face face) {
+ return null;
+ }
+
+
+ /**
+ * bool
+ */
+ public boolean bool;
+
+ public boolean isBool() {
+ return bool;
+ }
+
+
+ /**
+ * field
+ */
+ public Child field;
+
+ public Child getField() {
+ return field;
+ }
+
+ public void setField(Child field) {
+ this.field = field;
+ }
+}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/method/Face.java b/src/test/java/io/github/linwancen/plugin/show/demo/method/Face.java
new file mode 100644
index 0000000..3b05290
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/method/Face.java
@@ -0,0 +1,12 @@
+package io.github.linwancen.plugin.show.demo.method;
+
+/**
+ * Face
+ */
+//@FunctionalInterface
+public interface Face {
+ /**
+ * faceMethod
+ */
+ Face faceMethod(Face face);
+}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/method/Parent.java b/src/test/java/io/github/linwancen/plugin/show/demo/method/Parent.java
new file mode 100644
index 0000000..5e5cbc6
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/method/Parent.java
@@ -0,0 +1,13 @@
+package io.github.linwancen.plugin.show.demo.method;
+
+/**
+ * Parent
+ */
+public class Parent {
+ /**
+ * parentMethod
+ */
+ public Parent parentMethod() {
+ return null;
+ }
+}
diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/package-info.java b/src/test/java/io/github/linwancen/plugin/show/demo/package-info.java
new file mode 100644
index 0000000..332478d
--- /dev/null
+++ b/src/test/java/io/github/linwancen/plugin/show/demo/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * package doc
+ */
+package io.github.linwancen.plugin.show.demo;
\ No newline at end of file
diff --git a/src/test/java/io/github/linwancen/plugin/comment/utils/SkipUtilsTest.java b/src/test/java/io/github/linwancen/plugin/show/line/SkipUtilsTest.java
similarity index 98%
rename from src/test/java/io/github/linwancen/plugin/comment/utils/SkipUtilsTest.java
rename to src/test/java/io/github/linwancen/plugin/show/line/SkipUtilsTest.java
index 15d1263..4020895 100644
--- a/src/test/java/io/github/linwancen/plugin/comment/utils/SkipUtilsTest.java
+++ b/src/test/java/io/github/linwancen/plugin/show/line/SkipUtilsTest.java
@@ -1,4 +1,4 @@
-package io.github.linwancen.plugin.comment.utils;
+package io.github.linwancen.plugin.show.line;
import groovy.json.JsonOutput;
@@ -11,7 +11,7 @@ import java.util.function.BiPredicate;
* @see SkipUtils
*/
public class SkipUtilsTest {
-
+
public static final boolean o = true;
public static final boolean x = false;