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 b18f54a..708696e 100644 --- a/src/main/java/io/github/linwancen/plugin/comment/LineEnd.java +++ b/src/main/java/io/github/linwancen/plugin/comment/LineEnd.java @@ -53,6 +53,9 @@ public class LineEnd extends EditorLinePainter { } int startOffset = document.getLineStartOffset(lineNumber); int endOffset = document.getLineEndOffset(lineNumber); + if (startOffset == endOffset) { + return null; + } if (AppSettingsState.getInstance().findElementRightToLeft) { return ResolveElementRightToLeftUtils.resolveElement(viewProvider, startOffset, endOffset); } diff --git a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementLeftToRightUtils.java b/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementLeftToRightUtils.java index e5e4ebb..d7f4131 100644 --- a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementLeftToRightUtils.java +++ b/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementLeftToRightUtils.java @@ -18,8 +18,8 @@ public class ResolveElementLeftToRightUtils { }; @Nullable - public static PsiElement resolveElement(FileViewProvider viewProvider, Document document, int startOffset, - int endOffset) { + public static PsiElement resolveElement(FileViewProvider viewProvider, Document document, + int startOffset, int endOffset) { String text = document.getText(new TextRange(startOffset, endOffset)); int offset = 0; for (String s : KEYS) { @@ -47,24 +47,18 @@ public class ResolveElementLeftToRightUtils { startOffset = 0; } PsiElement element = viewProvider.findElementAt(offset, JavaLanguage.INSTANCE); - PsiIdentifier psiIdentifier = psiIdentifier(endOffset, element); - if (psiIdentifier == null) { - return null; - } + PsiIdentifier psiIdentifier = psiIdentifier(element, endOffset); return ResolveElementUtils.resolveElementOf(psiIdentifier, psiIdentifier, startOffset, endOffset); } @Nullable - private static PsiIdentifier psiIdentifier(int endOffset, PsiElement element) { + private static PsiIdentifier psiIdentifier(PsiElement element, int endOffset) { if (element == null) { return null; } while (!(element instanceof PsiIdentifier)) { element = PsiTreeUtil.nextVisibleLeaf(element); - if (element == null) { - return null; - } - if (element.getTextRange().getEndOffset() > endOffset) { + if (element == null || element.getTextRange().getEndOffset() > endOffset) { return null; } } diff --git a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementRightToLeftUtils.java b/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementRightToLeftUtils.java index 229ab3a..d9c884d 100644 --- a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementRightToLeftUtils.java +++ b/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementRightToLeftUtils.java @@ -13,10 +13,8 @@ public class ResolveElementRightToLeftUtils { @Nullable public static PsiElement resolveElement(FileViewProvider viewProvider, int startOffset, int endOffset) { - if (startOffset == endOffset) { - return null; - } - PsiElement element = viewProvider.findElementAt(endOffset - 1, JavaLanguage.INSTANCE); + // End is always white, can not -1 because @see class.name need it + PsiElement element = viewProvider.findElementAt(endOffset, JavaLanguage.INSTANCE); if (element == null) { return null; } @@ -27,6 +25,10 @@ public class ResolveElementRightToLeftUtils { } element = identifier; } + // if in prev line, set it null. + if (identifier != null && identifier.getTextRange().getStartOffset() < startOffset) { + identifier = null; + } return ResolveElementUtils.resolveElementOf(element, identifier, startOffset, endOffset); } } 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 index 32497e4..6e07781 100644 --- a/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementUtils.java +++ b/src/main/java/io/github/linwancen/plugin/comment/utils/ResolveElementUtils.java @@ -11,6 +11,22 @@ public class 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); @@ -27,21 +43,6 @@ public class ResolveElementUtils { return null; } } - // new - PsiElement newPsiElement = newMethodOrClass(element, 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) { @@ -57,8 +58,14 @@ public class ResolveElementUtils { 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) {