Fixed IDEA-205110 Reformatting JavaDoc with generics Map adds extra spaces every time

This commit is contained in:
Rustam Vishnyakov
2019-01-11 13:34:31 +03:00
parent 404d5e6f94
commit b271fcd462
4 changed files with 49 additions and 7 deletions
@@ -25,6 +25,7 @@ import org.jetbrains.annotations.NotNull;
public class JavadocWhiteSpaceFormattingStrategy extends WhiteSpaceFormattingStrategyAdapter {
@Override
public boolean containsWhitespacesOnly(@NotNull final ASTNode node) {
return node.getElementType() == JavaDocTokenType.DOC_COMMENT_DATA && node.textContains('\n') && node.getText().trim().isEmpty();
return (node.getElementType() == JavaDocTokenType.DOC_COMMENT_DATA && node.textContains('\n') ||
node.getElementType() == JavaDocTokenType.DOC_TAG_VALUE_TOKEN) && node.getText().trim().isEmpty();
}
}
@@ -157,7 +157,7 @@ public class JavaSpacePropertyProcessor extends JavaElementVisitor {
private void init(ASTNode child) {
if (child == null) return;
ASTNode treePrev = child.getTreePrev();
while (treePrev != null && (treePrev.getElementType() == TokenType.WHITE_SPACE || treePrev.getTextLength() == 0)) {
while (treePrev != null && FormatterUtil.containsWhiteSpacesOnly(treePrev)) {
treePrev = treePrev.getTreePrev();
}
if (treePrev == null) {
@@ -1237,16 +1237,16 @@ public class JavaSpacePropertyProcessor extends JavaElementVisitor {
else if (myType2 == JavaDocTokenType.DOC_COMMENT_LEADING_ASTERISKS) {
createSpaceProperty(false, true, 0);
}
else if ((myType1 == JavaDocTokenType.DOC_TAG_VALUE_TOKEN || myType1 == JavaDocElementType.DOC_TAG_VALUE_ELEMENT) &&
(myType2 == JavaDocTokenType.DOC_TAG_VALUE_TOKEN || myType2 == JavaDocElementType.DOC_TAG_VALUE_ELEMENT)) {
createSpaceInCode(true);
}
else if (myRole1 == ChildRole.COMMA) {
createSpaceInCode(mySettings.SPACE_AFTER_COMMA);
}
else if (myRole2 == ChildRole.COMMA) {
createSpaceInCode(mySettings.SPACE_BEFORE_COMMA);
}
else if ((myType1 == JavaDocTokenType.DOC_TAG_VALUE_TOKEN || myType1 == JavaDocElementType.DOC_TAG_VALUE_ELEMENT) &&
(myType2 == JavaDocTokenType.DOC_TAG_VALUE_TOKEN || myType2 == JavaDocElementType.DOC_TAG_VALUE_ELEMENT)) {
createSpaceInCode(true);
}
}
@Override
@@ -36,7 +36,8 @@ public class PsiDocTagValueImpl extends CompositePsiElement implements PsiDocTag
@Override
public int getChildRole(@NotNull ASTNode child) {
if (child.getElementType() == JavaDocTokenType.DOC_TAG_VALUE_COMMA) {
if (child.getElementType() == JavaDocTokenType.DOC_TAG_VALUE_COMMA ||
child.getElementType() == JavaDocTokenType.DOC_TAG_VALUE_TOKEN && child.getTextLength() == 1 && child.getChars().charAt(0) == ',') {
return ChildRole.COMMA;
}
@@ -1338,4 +1338,44 @@ public class Test {
"""
)
}
fun testIdea205110() {
doTextTest(
"""
package com.test;
import java.util.HashMap;
import java.util.Map;
public class GeneralTest {
/**
* @return Map<String, string>
*/
private Map<String, String> test() {
return new HashMap<>();
}
}
""".trimIndent(),
"""
package com.test;
import java.util.HashMap;
import java.util.Map;
public class GeneralTest {
/**
* @return Map<String, string>
*/
private Map<String, String> test() {
return new HashMap<>();
}
}
""".trimIndent()
)
}
}