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 = """ """ } 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;