diff --git a/README.md b/README.md index 3648f51..2bf2a03 100644 --- a/README.md +++ b/README.md @@ -23,4 +23,4 @@ Change Log: - 1.2 Add end-of-line comment class prefix filter settings | 添加行末注释类前缀过滤配置 - 1.3 support class in tree, constructor and field type in line end | 支持 class 树节点、构造方法和字段的行末注释 - 1.4 Find element right to left for end-of-line comment | 从右往左查找行末注释对象 -- 1.5 Support find next when not comment | 支持没有注释时查找下一个对象 \ No newline at end of file +- 1.5 Support find next loop when not comment | 支持没有注释时循环查找下一个对象 \ No newline at end of file diff --git a/build.gradle b/build.gradle index c119a42..844e300 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,7 @@ patchPluginXml {
  • 1.2 Add end-of-line comment class prefix filter settings | 添加行末注释类前缀配置
  • 1.3 Support class in tree, constructor and field type in line end | 支持 class 树节点、构造方法和字段的行末注释
  • 1.4 Find element right to left for end-of-line comment | 从右往左查找行末注释对象 -
  • 1.5 Support find next when not comment | 支持没有注释时查找下一个对象 +
  • 1.5 Support find next loop when not comment | 支持没有注释时循环查找下一个对象 """ } diff --git a/src/main/java/io/github/linwancen/plugin/show/LineEnd.java b/src/main/java/io/github/linwancen/plugin/show/LineEnd.java index ad07302..5ab33b0 100644 --- a/src/main/java/io/github/linwancen/plugin/show/LineEnd.java +++ b/src/main/java/io/github/linwancen/plugin/show/LineEnd.java @@ -50,7 +50,8 @@ public class LineEnd extends EditorLinePainter { if (document == null) { return null; } - if (document.getLineCount() < lineNumber) { + // lineNumber start 0, as 1 <= 1 should return + if (document.getLineCount() <= lineNumber) { return null; } int startOffset = document.getLineStartOffset(lineNumber); diff --git a/src/main/java/io/github/linwancen/plugin/show/line/LineDocLeftToRightUtils.java b/src/main/java/io/github/linwancen/plugin/show/line/LineDocLeftToRightUtils.java index 46d5629..d21a36f 100644 --- a/src/main/java/io/github/linwancen/plugin/show/line/LineDocLeftToRightUtils.java +++ b/src/main/java/io/github/linwancen/plugin/show/line/LineDocLeftToRightUtils.java @@ -48,21 +48,20 @@ public class LineDocLeftToRightUtils { startOffset = 0; } PsiElement element = viewProvider.findElementAt(offset, JavaLanguage.INSTANCE); - PsiIdentifier psiIdentifier = leftIdentifier(element, endOffset); - return LineDocUtils.elementDoc(psiIdentifier, psiIdentifier, startOffset, endOffset); + return nextDoc(element, startOffset, endOffset); } @Nullable - private static PsiIdentifier leftIdentifier(PsiElement element, int endOffset) { - if (element == null) { - return null; - } - while (!(element instanceof PsiIdentifier)) { - element = PsiTreeUtil.nextVisibleLeaf(element); - if (element == null || element.getTextRange().getEndOffset() > endOffset) { - return null; + private static PsiDocComment nextDoc(PsiElement element, int startOffset, int endOffset) { + while (element != null && element.getTextRange().getEndOffset() < endOffset) { + if (element instanceof PsiIdentifier) { + PsiDocComment psiDocComment = LineDocUtils.elementDoc(element, element, startOffset, endOffset); + if (psiDocComment != null) { + return psiDocComment; + } } + element = PsiTreeUtil.nextVisibleLeaf(element); } - return (PsiIdentifier) element; + return null; } } diff --git a/src/main/java/io/github/linwancen/plugin/show/line/LineDocRightToLeftUtils.java b/src/main/java/io/github/linwancen/plugin/show/line/LineDocRightToLeftUtils.java index ee22888..cba5e5e 100644 --- a/src/main/java/io/github/linwancen/plugin/show/line/LineDocRightToLeftUtils.java +++ b/src/main/java/io/github/linwancen/plugin/show/line/LineDocRightToLeftUtils.java @@ -20,16 +20,22 @@ public class LineDocRightToLeftUtils { return null; } PsiElement identifier; - while (!((identifier = PsiTreeUtil.prevVisibleLeaf(element)) instanceof PsiIdentifier)) { - if (identifier == null || identifier.getTextRange().getStartOffset() < startOffset) { - break; + PsiDocComment psiDocComment; + while (true) { + identifier = PsiTreeUtil.prevVisibleLeaf(element); + if (identifier != null && identifier.getTextRange().getStartOffset() < startOffset) { + identifier = null; + } + if (identifier == null || identifier instanceof PsiIdentifier) { + psiDocComment = LineDocUtils.elementDoc(element, identifier, startOffset, endOffset); + if (psiDocComment != null) { + return psiDocComment; + } + } + if (identifier == null) { + return null; } element = identifier; } - // if in prev line, set it null. - if (identifier != null && identifier.getTextRange().getStartOffset() < startOffset) { - identifier = null; - } - return LineDocUtils.elementDoc(element, identifier, startOffset, endOffset); } } diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/Next.java b/src/test/java/io/github/linwancen/plugin/show/demo/Next.java new file mode 100644 index 0000000..4f64bb5 --- /dev/null +++ b/src/test/java/io/github/linwancen/plugin/show/demo/Next.java @@ -0,0 +1,11 @@ +package io.github.linwancen.plugin.show.demo; + +import io.github.linwancen.plugin.show.demo.method.Child; + +public class Next { + public static void method() { + Child child = new Child(true); + child.haveNotDoc(null).haveNotDoc(new Child()).haveNotDoc(null); + child.haveNotDoc(null).getField().haveNotDoc(null); + } +} diff --git a/src/test/java/io/github/linwancen/plugin/show/demo/method/Child.java b/src/test/java/io/github/linwancen/plugin/show/demo/method/Child.java index 3db9f4d..6dcff53 100644 --- a/src/test/java/io/github/linwancen/plugin/show/demo/method/Child.java +++ b/src/test/java/io/github/linwancen/plugin/show/demo/method/Child.java @@ -34,6 +34,9 @@ public class Child extends Parent implements Face { return null; } + public Child haveNotDoc(Face face) { + return null; + } /** * bool