From bc3e0c747ffb521c1efafbb96ce2037061510b3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E4=B8=87=E7=A8=8B?= <1498425439@qq.com> Date: Sun, 20 Apr 2025 22:42:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(AnnoDoc):=202.23=20kotlin=20anno=20doc=20|?= =?UTF-8?q?=20kotlin=20=E6=B3=A8=E8=A7=A3=E6=B3=A8=E9=87=8A=20Fixed=20#78?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 104 +------- build.gradle | 226 +++++++++--------- .../plugin/show/java/JavaLangDoc.java | 4 +- .../plugin/show/java/KotlinLangDoc.java | 14 ++ .../doc/{AnnoDoc.java => AnnoDocJava.java} | 44 +--- .../plugin/show/java/kt/AnnoDocKt.java | 85 +++++++ .../plugin/show/lang/base/BaseAnnoDoc.java | 47 ++++ .../plugin/show/lang/base/BaseLangDoc.java | 2 +- 8 files changed, 270 insertions(+), 256 deletions(-) rename src/main/idea/io/github/linwancen/plugin/show/java/doc/{AnnoDoc.java => AnnoDocJava.java} (62%) create mode 100644 src/main/idea/io/github/linwancen/plugin/show/java/kt/AnnoDocKt.java create mode 100644 src/main/java/io/github/linwancen/plugin/show/lang/base/BaseAnnoDoc.java diff --git a/README.md b/README.md index ce9b0cc..91a74fa 100644 --- a/README.md +++ b/README.md @@ -123,109 +123,7 @@ Show doc comment in the Project view Tree, line End, json, other ## Change Notes 更新说明 -

English Change Notes:

- - -

中文更新说明:

- - - +[build.gradle](build.gradle) ### Demo 示例 diff --git a/build.gradle b/build.gradle index 674cb9c..4adfe03 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,120 @@ plugins { } group 'io.github.linwancen' -version '2.22.0.' + (new Date().format('yyyy.MM.dd_HH.mm')) +version '2.23.0.' + (new Date().format('yyyy.MM.dd_HH.mm')) + +patchPluginXml { + // The performance of 2019.3 has been greatly improved. + // change plugins without restarting the IDE in 2020.1. + // 2020.2 JCEF, 2022.2 JDK17 java2d perf improved, 2023.3 AI + sinceBuild = '201.1' + untilBuild = '' + changeNotes = """ +

English Change Notes:

+ + +

中文更新说明:

+ + """ +} repositories { mavenCentral() @@ -86,117 +199,6 @@ tasks.withType(Javadoc) { options.encoding = 'UTF-8' } -patchPluginXml { - // The performance of 2019.3 has been greatly improved. - // change plugins without restarting the IDE in 2020.1. - // 2020.2 JCEF, 2022.2 JDK17 java2d perf improved, 2023.3 AI - sinceBuild = '201.1' - untilBuild = '' - changeNotes = """ -

English Change Notes:

- - -

中文更新说明:

- - """ -} - test { useJUnitPlatform() } diff --git a/src/main/idea/io/github/linwancen/plugin/show/java/JavaLangDoc.java b/src/main/idea/io/github/linwancen/plugin/show/java/JavaLangDoc.java index 020a835..9b0e9f4 100644 --- a/src/main/idea/io/github/linwancen/plugin/show/java/JavaLangDoc.java +++ b/src/main/idea/io/github/linwancen/plugin/show/java/JavaLangDoc.java @@ -18,7 +18,7 @@ import com.intellij.psi.javadoc.PsiDocTagValue; import com.intellij.psi.util.PsiTreeUtil; import io.github.linwancen.plugin.show.bean.LineInfo; import io.github.linwancen.plugin.show.bean.SettingsInfo; -import io.github.linwancen.plugin.show.java.doc.AnnoDoc; +import io.github.linwancen.plugin.show.java.doc.AnnoDocJava; import io.github.linwancen.plugin.show.java.doc.EnumDoc; import io.github.linwancen.plugin.show.java.doc.NewDoc; import io.github.linwancen.plugin.show.java.doc.ParamDoc; @@ -101,7 +101,7 @@ public class JavaLangDoc extends BaseTagLangDoc { return EnumDoc.enumDoc((PsiEnumConstant) resolve); } if (resolve instanceof PsiJvmModifiersOwner) { - return AnnoDoc.annoDoc(info, (PsiJvmModifiersOwner) resolve); + return AnnoDocJava.INSTANCE.annoDoc(info, (PsiJvmModifiersOwner) resolve); } return null; } diff --git a/src/main/idea/io/github/linwancen/plugin/show/java/KotlinLangDoc.java b/src/main/idea/io/github/linwancen/plugin/show/java/KotlinLangDoc.java index 7419821..98bb15a 100644 --- a/src/main/idea/io/github/linwancen/plugin/show/java/KotlinLangDoc.java +++ b/src/main/idea/io/github/linwancen/plugin/show/java/KotlinLangDoc.java @@ -5,6 +5,7 @@ import com.intellij.psi.impl.file.PsiPackageBase; import com.intellij.psi.util.PsiTreeUtil; import io.github.linwancen.plugin.show.bean.LineInfo; import io.github.linwancen.plugin.show.bean.SettingsInfo; +import io.github.linwancen.plugin.show.java.kt.AnnoDocKt; import io.github.linwancen.plugin.show.lang.base.BaseTagLangDoc; import io.github.linwancen.plugin.show.lang.base.DocFilter; import org.jetbrains.annotations.NotNull; @@ -13,6 +14,7 @@ import org.jetbrains.kotlin.kdoc.psi.api.KDoc; import org.jetbrains.kotlin.kdoc.psi.impl.KDocName; import org.jetbrains.kotlin.kdoc.psi.impl.KDocSection; import org.jetbrains.kotlin.kdoc.psi.impl.KDocTag; +import org.jetbrains.kotlin.psi.KtAnnotated; import org.jetbrains.kotlin.psi.KtNameReferenceExpression; import java.util.List; @@ -29,6 +31,18 @@ public class KotlinLangDoc extends BaseTagLangDoc { return info.appSettings.showLineEndCommentKotlin; } + @Override + public @Nullable String resolveDocPrint(@NotNull T info, @NotNull PsiElement resolve) { + @Nullable String resolveDocPrint = super.resolveDocPrint(info, resolve); + if (resolveDocPrint != null) { + return resolveDocPrint; + } + if (resolve instanceof KtAnnotated) { + return AnnoDocKt.INSTANCE.annoDoc(info, (KtAnnotated) resolve); + } + return null; + } + @Override protected boolean parseBaseComment(@NotNull T info) { return info.appSettings.showLineEndCommentKotlinBase; diff --git a/src/main/idea/io/github/linwancen/plugin/show/java/doc/AnnoDoc.java b/src/main/idea/io/github/linwancen/plugin/show/java/doc/AnnoDocJava.java similarity index 62% rename from src/main/idea/io/github/linwancen/plugin/show/java/doc/AnnoDoc.java rename to src/main/idea/io/github/linwancen/plugin/show/java/doc/AnnoDocJava.java index 12a8a00..57c0ffa 100644 --- a/src/main/idea/io/github/linwancen/plugin/show/java/doc/AnnoDoc.java +++ b/src/main/idea/io/github/linwancen/plugin/show/java/doc/AnnoDocJava.java @@ -10,50 +10,18 @@ import com.intellij.psi.PsiDocCommentOwner; import com.intellij.psi.PsiField; import com.intellij.psi.PsiJvmModifiersOwner; import com.intellij.psi.PsiMethod; -import io.github.linwancen.plugin.show.bean.SettingsInfo; -import io.github.linwancen.plugin.show.settings.GlobalSettingsState; -import io.github.linwancen.plugin.show.settings.ProjectSettingsState; -import org.apache.commons.lang3.StringUtils; +import io.github.linwancen.plugin.show.lang.base.BaseAnnoDoc; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public class AnnoDoc { +public class AnnoDocJava extends BaseAnnoDoc { - private AnnoDoc() {} + public static AnnoDocJava INSTANCE = new AnnoDocJava(); + + private AnnoDocJava() {} @Nullable - public static String annoDoc(@NotNull T info, @NotNull PsiJvmModifiersOwner owner) { - @NotNull ProjectSettingsState projectSettings = info.projectSettings; - @NotNull GlobalSettingsState globalSettings = info.globalSettings; - // annoDocEffect first because default false - if (projectSettings.annoDocEffect && projectSettings.projectFilterEffective) { - @Nullable String doc = annoDocArr(owner, projectSettings.annoDoc); - if (StringUtils.isNotBlank(doc)) { - return doc; - } - } - if (globalSettings.annoDocEffect && projectSettings.globalFilterEffective) { - return annoDocArr(owner, globalSettings.annoDoc); - } - return null; - } - - @Nullable - private static String annoDocArr(@NotNull PsiJvmModifiersOwner owner, @NotNull String[][] lines) { - for (@NotNull String[] arr : lines) { - if (arr.length < 3) { - continue; - } - @Nullable String s = annoDocMatch(owner, arr); - if (s != null) { - return s; - } - } - return null; - } - - @Nullable - private static String annoDocMatch(@NotNull PsiJvmModifiersOwner owner, @NotNull String[] arr) { + protected String annoDocMatch(@NotNull PsiJvmModifiersOwner owner, @NotNull String[] arr) { if (typeMatch(owner, arr[0])) { return annoDocName(owner, arr); } diff --git a/src/main/idea/io/github/linwancen/plugin/show/java/kt/AnnoDocKt.java b/src/main/idea/io/github/linwancen/plugin/show/java/kt/AnnoDocKt.java new file mode 100644 index 0000000..851c106 --- /dev/null +++ b/src/main/idea/io/github/linwancen/plugin/show/java/kt/AnnoDocKt.java @@ -0,0 +1,85 @@ +package io.github.linwancen.plugin.show.java.kt; + +import io.github.linwancen.plugin.show.lang.base.BaseAnnoDoc; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.name.Name; +import org.jetbrains.kotlin.psi.KtAnnotated; +import org.jetbrains.kotlin.psi.KtAnnotationEntry; +import org.jetbrains.kotlin.psi.KtExpression; +import org.jetbrains.kotlin.psi.KtFunction; +import org.jetbrains.kotlin.psi.KtProperty; +import org.jetbrains.kotlin.psi.KtPureClassOrObject; +import org.jetbrains.kotlin.psi.KtStringTemplateExpression; +import org.jetbrains.kotlin.psi.ValueArgument; +import org.jetbrains.kotlin.psi.ValueArgumentName; + +public class AnnoDocKt extends BaseAnnoDoc { + + public static AnnoDocKt INSTANCE = new AnnoDocKt(); + + private AnnoDocKt() {} + + @Nullable + protected String annoDocMatch(@NotNull KtAnnotated owner, @NotNull String[] arr) { + if (typeMatch(owner, arr[0])) { + for (KtAnnotationEntry entry : owner.getAnnotationEntries()) { + String s = annoDocName(entry, arr); + if (s != null) { + return s; + } + } + } + return null; + } + + private static boolean typeMatch(KtAnnotated owner, @NotNull String type) { + switch (type) { + case "field": + return owner instanceof KtProperty; + case "method": + return owner instanceof KtFunction; + case "class": + return owner instanceof KtPureClassOrObject; + case "!doc": + case "all": + return true; + default: + return false; + } + } + + @Nullable + private static String annoDocName(@NotNull KtAnnotationEntry entry, @NotNull String[] arr) { + Name shortName = entry.getShortName(); + if (shortName == null) { + return null; + } + String name = shortName.asString(); + String annoName = arr[1]; + int i = annoName.lastIndexOf('.'); + if (i > 0) { + annoName = annoName.substring(i + 1); + } + if (!annoName.equals(name)) { + return null; + } + for (ValueArgument argument : entry.getValueArguments()) { + ValueArgumentName argumentName = argument.getArgumentName(); + String method = argumentName == null ? "value" : argumentName.getAsName().asString(); + if (arr[2].equals(method)) { + KtExpression expression = argument.getArgumentExpression(); + if (expression instanceof KtStringTemplateExpression) { + String text = expression.getText(); + if (text.length() >= 2) { + String s = text.substring(1, text.length() - 1); + if (!s.isEmpty()) { + return s; + } + } + } + } + } + return null; + } +} diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseAnnoDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseAnnoDoc.java new file mode 100644 index 0000000..810a7a7 --- /dev/null +++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseAnnoDoc.java @@ -0,0 +1,47 @@ +package io.github.linwancen.plugin.show.lang.base; + +import io.github.linwancen.plugin.show.bean.SettingsInfo; +import io.github.linwancen.plugin.show.settings.GlobalSettingsState; +import io.github.linwancen.plugin.show.settings.ProjectSettingsState; +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public abstract class BaseAnnoDoc { + + @Nullable + public String annoDoc(@NotNull T info, @NotNull O owner) { + @NotNull ProjectSettingsState projectSettings = info.projectSettings; + @NotNull GlobalSettingsState globalSettings = info.globalSettings; + // annoDocEffect first because default false + if (projectSettings.annoDocEffect && projectSettings.projectFilterEffective) { + @Nullable String doc = annoDocArr(owner, projectSettings.annoDoc); + if (StringUtils.isNotBlank(doc)) { + return doc; + } + } + if (globalSettings.annoDocEffect && projectSettings.globalFilterEffective) { + return annoDocArr(owner, globalSettings.annoDoc); + } + return null; + } + + @Nullable + protected String annoDocArr(@NotNull O owner, @NotNull String[][] lines) { + for (@NotNull String[] arr : lines) { + if (arr.length < 3) { + continue; + } + @Nullable String s = annoDocMatch(owner, arr); + if (s != null) { + return s; + } + } + return null; + } + + @Nullable + protected String annoDocMatch(@NotNull O owner, @NotNull String[] arr) { + return null; + } +} diff --git a/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java index 3443603..7bc59ad 100644 --- a/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java +++ b/src/main/java/io/github/linwancen/plugin/show/lang/base/BaseLangDoc.java @@ -161,7 +161,7 @@ public abstract class BaseLangDoc extends EditorLinePainter { return null; } if (resolve == null) { - return null; + continue; } @Nullable String resolveDoc = resolveDoc(info, resolve); if (resolveDoc != null) {