diff --git a/build.gradle b/build.gradle index bf7f115..14bbe86 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'io.github.linwancen' -version '1.2.0.' + (new Date().format('yyyy.MM.dd_HH.mm')) +version '1.3.0.' + (new Date().format('yyyy.MM.dd_HH.mm')) apply plugin: 'java' @@ -40,6 +40,7 @@ patchPluginXml { """ } diff --git a/src/main/java/io/github/linwancen/plugin/comment/LineEnd.java b/src/main/java/io/github/linwancen/plugin/comment/LineEnd.java index d90edf0..e0b7fd9 100644 --- a/src/main/java/io/github/linwancen/plugin/comment/LineEnd.java +++ b/src/main/java/io/github/linwancen/plugin/comment/LineEnd.java @@ -9,7 +9,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; -import com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.psi.util.PsiTreeUtil; import io.github.linwancen.plugin.comment.settings.AppSettingsState; @@ -65,15 +64,18 @@ public class LineEnd extends EditorLinePainter { } 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; } protected static final String[] KEYS = { - "if", - "for", - "new", "=", - "return", }; private static @Nullable PsiElement psiElementFrom(FileViewProvider viewProvider, int lineNumber) { @@ -116,17 +118,35 @@ public class LineEnd extends EditorLinePainter { startOffset = 0; } PsiElement element = viewProvider.findElementAt(offset, JavaLanguage.INSTANCE); - if (!(element instanceof PsiIdentifier)) { + PsiIdentifier psiIdentifier = psiIdentifier(endOffset, element); + if (psiIdentifier == null) { return null; } - return parentElementOf(element, startOffset, endOffset); + return parentElementOf(psiIdentifier, startOffset, endOffset); } @Nullable - private static PsiElement parentElementOf(PsiElement element, int startOffset, int endOffset) { + private static PsiIdentifier psiIdentifier(int endOffset, PsiElement element) { + if (element == null) { + return null; + } + while (!(element instanceof PsiIdentifier)) { + element = PsiTreeUtil.nextVisibleLeaf(element); + if (element == null) { + return null; + } + if (element.getTextRange().getEndOffset() > endOffset) { + return null; + } + } + return (PsiIdentifier) element; + } + + @Nullable + private static PsiElement parentElementOf(PsiElement psiIdentifier, int startOffset, int endOffset) { // method call PsiMethodCallExpression call = - PsiTreeUtil.getParentOfType(element, PsiMethodCallExpression.class, false, startOffset); + PsiTreeUtil.getParentOfType(psiIdentifier, PsiMethodCallExpression.class, false, startOffset); if (call != null) { // skip double comment when method call in new line: // someObject // someMethodComment @@ -141,6 +161,21 @@ public class LineEnd extends EditorLinePainter { } } // new + PsiElement newPsiElement = newMethodOrClass(psiIdentifier, startOffset); + if (newPsiElement != null) { + return newPsiElement; + } + // ::/class/field + PsiReference psiReference = parentPsiReference(psiIdentifier, endOffset); + if (psiReference != null) { + return psiReference.resolve(); + } + return null; + } + + @Nullable + private static PsiElement newMethodOrClass(PsiElement element, int startOffset) { + // new and Class should same line PsiNewExpression newExp = PsiTreeUtil.getParentOfType(element, PsiNewExpression.class, false, startOffset); if (newExp != null) { PsiMethod psiMethod = newExp.resolveMethod(); @@ -152,17 +187,20 @@ public class LineEnd extends EditorLinePainter { return classReference.resolve(); } } - // :: - PsiMethodReferenceExpression ref = - PsiTreeUtil.getParentOfType(element, PsiMethodReferenceExpression.class, false, startOffset); - if (ref != null) { - return ref.resolve(); + return null; + } + + @Nullable + private static PsiReference parentPsiReference(PsiElement element, int endOffset) { + PsiElement parent; + while ((parent = element.getParent()) instanceof PsiReference) { + if (parent.getTextRange().getEndOffset() > endOffset) { + break; + } + element = parent; } - // SomeClass // SomeClassComment - PsiJavaCodeReferenceElementImpl code = - PsiTreeUtil.getParentOfType(element, PsiJavaCodeReferenceElementImpl.class, false, startOffset); - if (code != null) { - return code.resolve(); + if (element instanceof PsiReference) { + return (PsiReference) element; } return null; } diff --git a/src/main/java/io/github/linwancen/plugin/comment/Tree.java b/src/main/java/io/github/linwancen/plugin/comment/Tree.java index eb33199..4455eb0 100644 --- a/src/main/java/io/github/linwancen/plugin/comment/Tree.java +++ b/src/main/java/io/github/linwancen/plugin/comment/Tree.java @@ -72,13 +72,13 @@ public class Tree implements ProjectViewNodeDecorator { if (node instanceof PsiFieldNode) { // On Show Members PsiField psiField = ((PsiFieldNode) node).getValue(); - return psiField.getDocComment(); + return CommentFactory.fromSrcOrByteCode(psiField); } if (node instanceof ClassTreeNode) { // On Packages View, Project Files View, Show Members PsiClass psiClass = ((ClassTreeNode) node).getValue(); - return psiClass.getDocComment(); + return CommentFactory.fromSrcOrByteCode(psiClass); } if (node instanceof PackageElementNode) { // On Packages View diff --git a/src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsState.java b/src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsState.java index c4e9cbb..95ae958 100644 --- a/src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsState.java +++ b/src/main/java/io/github/linwancen/plugin/comment/settings/AppSettingsState.java @@ -5,7 +5,6 @@ import com.intellij.openapi.components.PersistentStateComponent; import com.intellij.openapi.components.State; import com.intellij.openapi.components.Storage; import com.intellij.openapi.editor.markup.TextAttributes; -import com.intellij.ui.Gray; import com.intellij.ui.JBColor; import com.intellij.util.xmlb.XmlSerializerUtil; import org.jetbrains.annotations.NotNull; @@ -24,7 +23,8 @@ public class AppSettingsState implements PersistentStateComponent 3 && (name.startsWith("get") || name.startsWith("set"))) { name = name.substring(3); diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 1e32779..2acc4c2 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -8,12 +8,12 @@ Chinese Note: