Fixed IDEA-163806 (Extra) indentation in JavaDoc after <br> tag
authorRustam Vishnyakov <rustam.vishnyakov@jetbrains.com>
Thu, 21 Jan 2021 12:11:33 +0000 (15:11 +0300)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Thu, 21 Jan 2021 19:36:31 +0000 (19:36 +0000)
GitOrigin-RevId: c8e4f519b5a9fb9972167def8724a1cc0c2f69d2

java/java-tests/testSrc/com/intellij/java/psi/formatter/java/JavaEnterActionTest.java
platform/lang-impl/src/com/intellij/codeInsight/editorActions/enter/EnterAfterJavadocTagHandler.java

index a08ae123e6011d8dccfa31ad06d2dc7b1f8611b8..5c8a88c0321f5b97c88c5cc4559717911caf5bad 100644 (file)
@@ -647,4 +647,27 @@ public class JavaEnterActionTest extends AbstractEnterActionTestCase {
       "}"
     );
   }
+
+  public void testIdea163806() {
+    doTextTest(
+      "java",
+
+      "public class Test {\n" +
+      "    /**\n" +
+      "     * Something<br><caret>\n" +
+      "     */\n" +
+      "    void foo() {\n" +
+      "    }\n" +
+      "}",
+
+      "public class Test {\n" +
+      "    /**\n" +
+      "     * Something<br>\n" +
+      "     * <caret>\n" +
+      "     */\n" +
+      "    void foo() {\n" +
+      "    }\n" +
+      "}"
+    );
+  }
 }
\ No newline at end of file
index d186f009f4b1b89725fd6de478f569cdf2aff4d8..2720599ce9dd2ae98ef85126e0d7c2f343489c3c 100644 (file)
@@ -189,25 +189,27 @@ public class EnterAfterJavadocTagHandler extends EnterHandlerDelegateAdapter {
     }
     
     
-    return new Context(text, startTagEndOffset, endTagStartOffset, offset);
+    return new Context(text, startTagEndOffset, endTagStartOffset, startTag, offset);
   }
   
   static class Context {
     
     public final int startTagEndOffset;
     public final int endTagStartOffset;
+    public final @Nullable String startTag;
 
     @Nullable private final CharSequence myText;
     private final int          myOffset;
 
     Context() {
-      this(null, -1, -1, -1);
+      this(null, -1, -1, null, -1);
     }
 
-    Context(@Nullable CharSequence text, int startTagEndOffset, int endTagStartOffset, int offset) {
+    Context(@Nullable CharSequence text, int startTagEndOffset, int endTagStartOffset, @Nullable CharSequence tag, int offset) {
       myText = text;
       this.startTagEndOffset = startTagEndOffset;
       this.endTagStartOffset = endTagStartOffset;
+      startTag = tag != null ? tag.toString() : null;
       myOffset = offset;
     }
     
@@ -216,7 +218,7 @@ public class EnterAfterJavadocTagHandler extends EnterHandlerDelegateAdapter {
     }
     
     public boolean shouldIndent() {
-      if (startTagEndOffset < 0 || myText == null) {
+      if (startTagEndOffset < 0 || myText == null || "br".equals(getTagName((startTag)))) {
         return false;
       }
       for (int i = startTagEndOffset + 1; i < myOffset; i++) {
@@ -227,5 +229,22 @@ public class EnterAfterJavadocTagHandler extends EnterHandlerDelegateAdapter {
       }
       return true;
     }
+
+    private static String getTagName(@Nullable String tag) {
+      if (tag == null) return null;
+      int start = -1;
+      for (int i = 0; i < tag.length(); i ++) {
+        char c = tag.charAt(i);
+        if (Character.isAlphabetic(c)) {
+          if (start < 0)
+            start = i;
+        }
+        else {
+          if (start >= 0)
+            return tag.substring(start, i);
+        }
+      }
+      return start >= 0 ? tag.substring(start) : null;
+    }
   }
 }