feat(JavaLangDoc): 2.29 show java field value | 显示 Java 字段值

This commit is contained in:
林万程
2025-12-22 04:19:39 +08:00
parent 982059fef4
commit 2d7efb7be9
11 changed files with 86 additions and 10 deletions

View File

@@ -4,7 +4,7 @@ plugins {
}
group 'io.github.linwancen'
version '2.28.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
version '2.29.0.' + (new Date().format('yyyy.MM.dd_HH.mm'))
patchPluginXml {
// The performance of 2019.3 has been greatly improved.
@@ -15,6 +15,7 @@ patchPluginXml {
changeNotes = """
<h2>English Change Notes:</h2>
<ul>
<li>2.29 Add line-end-comment java field value
<li>2.28 Add app-setting Alt X switch line end comment
<li>2.27 Add project-view-tree use 1st or 2nd line to file comment
<li>2.26 Add External Comment load *.sql ddl comment
@@ -72,6 +73,7 @@ patchPluginXml {
<h2>中文更新说明:</h2>
<ul>
<li>2.29 增加 行末注释 Java 字段值
<li>2.28 增加 全局设置 Alt + X 行末注释开关
<li>2.27 增加 文件树注释 用第 1 或第 2 行注释当文件注释
<li>2.26 增加 外部注释 读取 *.sql ddl 注释

View File

@@ -6,11 +6,14 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocCommentOwner;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiEnumConstant;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.PsiField;
import com.intellij.psi.PsiJavaCodeReferenceElement;
import com.intellij.psi.PsiJvmModifiersOwner;
import com.intellij.psi.PsiLiteralExpression;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiParameter;
import com.intellij.psi.PsiReferenceExpression;
import com.intellij.psi.PsiWhiteSpace;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.javadoc.PsiDocTag;
@@ -18,20 +21,22 @@ 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.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;
import io.github.linwancen.plugin.show.java.doc.PsiMethodToPsiDoc;
import io.github.linwancen.plugin.show.java.line.OwnerToPsiDocSkip;
import io.github.linwancen.plugin.show.java.line.SkipUtils;
import io.github.linwancen.plugin.show.java.resolve.AnnoDocJava;
import io.github.linwancen.plugin.show.java.resolve.EnumDoc;
import io.github.linwancen.plugin.show.java.resolve.ParamDoc;
import io.github.linwancen.plugin.show.lang.base.BaseTagLangDoc;
import io.github.linwancen.plugin.show.lang.base.DocFilter;
import io.github.linwancen.plugin.show.lang.base.PsiUnSaveUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class JavaLangDoc extends BaseTagLangDoc<PsiDocComment> {
@@ -82,6 +87,55 @@ public class JavaLangDoc extends BaseTagLangDoc<PsiDocComment> {
@Override
public @Nullable <T extends SettingsInfo> String resolveDocPrint(@NotNull T info, @NotNull PsiElement resolve) {
@Nullable String doc = resolveDocPrintSrc(info, resolve);
if (!(resolve instanceof PsiField)) {
return doc;
}
@NotNull PsiField psiField = (PsiField) resolve;
@Nullable PsiExpression initializer = psiField.getInitializer();
if (initializer == null) {
return doc;
}
// field init reference
@NotNull Set<PsiElement> loopCheck = new HashSet<>();
loopCheck.add(resolve);
while (initializer instanceof PsiReferenceExpression) {
try {
@Nullable PsiElement r = ((PsiReferenceExpression) initializer).resolve();
if (r == null || !loopCheck.add(r)) {
break;
}
if (r instanceof PsiField) {
initializer = ((PsiField) r).getInitializer();
}
if (doc == null) {
doc = resolveDocPrintSrc(info, r);
}
} catch (Throwable ignore) {}
}
if (!info.appSettings.fieldValue) {
return doc;
}
if (!(initializer instanceof PsiLiteralExpression)) {
return doc;
}
@Nullable Object value = ((PsiLiteralExpression) initializer).getValue();
if (value == null) {
return doc;
}
String init = value.toString();
// use not ASCII space not skip
if (doc == null) {
return " = " + init;
}
// skip like 1-YES
if (doc.contains(init) || psiField.getName().contains(init)) {
return doc;
}
return doc + " = " + init;
}
private <T extends SettingsInfo> @Nullable String resolveDocPrintSrc(@NotNull T info, @NotNull PsiElement resolve) {
if (SkipUtils.skipSign(info, resolve)) {
return null;
}

View File

@@ -5,7 +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.java.resolve.AnnoDocKt;
import io.github.linwancen.plugin.show.lang.base.BaseTagLangDoc;
import io.github.linwancen.plugin.show.lang.base.DocFilter;
import org.jetbrains.annotations.NotNull;

View File

@@ -1,4 +1,4 @@
package io.github.linwancen.plugin.show.java.doc;
package io.github.linwancen.plugin.show.java.resolve;
import com.intellij.openapi.project.Project;
import com.intellij.psi.JavaPsiFacade;
@@ -11,6 +11,7 @@ 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.java.doc.PsiMethodToPsiDoc;
import io.github.linwancen.plugin.show.lang.base.BaseAnnoDoc;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

View File

@@ -1,4 +1,4 @@
package io.github.linwancen.plugin.show.java.kt;
package io.github.linwancen.plugin.show.java.resolve;
import io.github.linwancen.plugin.show.lang.base.BaseAnnoDoc;
import io.github.linwancen.plugin.show.lang.base.PsiUnSaveUtils;

View File

@@ -1,4 +1,4 @@
package io.github.linwancen.plugin.show.java.doc;
package io.github.linwancen.plugin.show.java.resolve;
import com.intellij.psi.PsiEnumConstant;
import com.intellij.psi.PsiExpression;

View File

@@ -1,4 +1,4 @@
package io.github.linwancen.plugin.show.java.doc;
package io.github.linwancen.plugin.show.java.resolve;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
@@ -7,6 +7,7 @@ import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.javadoc.PsiDocTag;
import com.intellij.psi.javadoc.PsiDocTagValue;
import com.intellij.psi.util.PsiTreeUtil;
import io.github.linwancen.plugin.show.java.doc.PsiMethodToPsiDoc;
import io.github.linwancen.plugin.show.lang.base.PsiUnSaveUtils;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

View File

@@ -0,0 +1,5 @@
/**
* special resolve element to doc.
* <br>Call by {@link io.github.linwancen.plugin.show.java.JavaLangDoc#resolveDocPrint}
*/
package io.github.linwancen.plugin.show.java.resolve;

View File

@@ -51,6 +51,7 @@ public class AppSettingsComponent {
private final JBCheckBox skipBlank = new JBCheckBox(ShowBundle.message("skip.blank"));
private final JBCheckBox skipAnnotation = new JBCheckBox(ShowBundle.message("skip.anno"));
private final JBCheckBox getToSet = new JBCheckBox("get --> set ");
private final JBCheckBox fieldValue = new JBCheckBox("field value");
private final JBCheckBox fromNew = new JBCheckBox("java new ");
private final JBCheckBox fromParam = new JBCheckBox("java @param ");
private final JBCheckBox enumDoc = new JBCheckBox("java enum ");
@@ -353,6 +354,14 @@ public class AppSettingsComponent {
getToSet.setSelected(newStatus);
}
public boolean getFieldValue() {
return fieldValue.isSelected();
}
public void setFieldValue(boolean newStatus) {
fieldValue.setSelected(newStatus);
}
public boolean getFromNew() {
return fromNew.isSelected();
}
@@ -468,7 +477,7 @@ public class AppSettingsComponent {
new JBLabel(ShowBundle.message("prefix")), lineEndPrefix);
FormBuilder formBuilder = FormBuilder.createFormBuilder()
.addSeparator()
.addComponent(JPanelFactory.of(skipAscii, skipBlank, skipAnnotation, getToSet), 1)
.addComponent(JPanelFactory.of(skipAscii, skipBlank, skipAnnotation, getToSet, fieldValue), 1)
.addComponent(JPanelFactory.of(fromNew, fromParam, enumDoc), 1)
.addSeparator()
.addComponent(text)

View File

@@ -78,6 +78,7 @@ public class AppSettingsConfigurable implements Configurable {
modified |= mySettingsComponent.getSkipBlank() != settings.skipBlank;
modified |= mySettingsComponent.getSkipAnnotation() != settings.skipAnnotation;
modified |= mySettingsComponent.getGetToSet() != settings.getToSet;
modified |= mySettingsComponent.getFieldValue() != settings.fieldValue;
modified |= mySettingsComponent.getFromNew() != settings.fromNew;
modified |= mySettingsComponent.getFromParam() != settings.fromParam;
@@ -131,6 +132,7 @@ public class AppSettingsConfigurable implements Configurable {
settings.skipBlank = mySettingsComponent.getSkipBlank();
settings.skipAnnotation = mySettingsComponent.getSkipAnnotation();
settings.getToSet = mySettingsComponent.getGetToSet();
settings.fieldValue = mySettingsComponent.getFieldValue();
settings.fromNew = mySettingsComponent.getFromNew();
settings.fromParam = mySettingsComponent.getFromParam();
@@ -187,6 +189,7 @@ public class AppSettingsConfigurable implements Configurable {
mySettingsComponent.setSkipBlank(settings.skipBlank);
mySettingsComponent.setSkipAnnotation(settings.skipAnnotation);
mySettingsComponent.setGetToSet(settings.getToSet);
mySettingsComponent.setFieldValue(settings.fieldValue);
mySettingsComponent.setFromNew(settings.fromNew);
mySettingsComponent.setFromParam(settings.fromParam);

View File

@@ -72,6 +72,7 @@ public class AppSettingsState implements PersistentStateComponent<AppSettingsSta
public boolean skipBlank = true;
public boolean skipAnnotation = true;
public boolean getToSet = true;
public boolean fieldValue = true;
public boolean fromNew = true;
public boolean fromParam = false;
public boolean enumDoc = true;