feat(AnnoDoc): 2.23 kotlin anno doc | kotlin 注解注释 Fixed #78
This commit is contained in:
@@ -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<PsiDocComment> {
|
||||
return EnumDoc.enumDoc((PsiEnumConstant) resolve);
|
||||
}
|
||||
if (resolve instanceof PsiJvmModifiersOwner) {
|
||||
return AnnoDoc.annoDoc(info, (PsiJvmModifiersOwner) resolve);
|
||||
return AnnoDocJava.INSTANCE.annoDoc(info, (PsiJvmModifiersOwner) resolve);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -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<KDocSection> {
|
||||
return info.appSettings.showLineEndCommentKotlin;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable <T extends SettingsInfo> 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 <T extends SettingsInfo> boolean parseBaseComment(@NotNull T info) {
|
||||
return info.appSettings.showLineEndCommentKotlinBase;
|
||||
|
||||
@@ -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<PsiJvmModifiersOwner> {
|
||||
|
||||
private AnnoDoc() {}
|
||||
public static AnnoDocJava INSTANCE = new AnnoDocJava();
|
||||
|
||||
private AnnoDocJava() {}
|
||||
|
||||
@Nullable
|
||||
public static <T extends SettingsInfo> 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);
|
||||
}
|
||||
@@ -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<KtAnnotated> {
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -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<O> {
|
||||
|
||||
@Nullable
|
||||
public <T extends SettingsInfo> 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;
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user