diff --git a/java/java-tests/testData/properties/addcomment/afterAddCommentBetweenPropertiesNoSpace.properties b/java/java-tests/testData/properties/addcomment/afterAddCommentBetweenPropertiesNoSpace.properties new file mode 100644 index 000000000000..7284a7ba6776 --- /dev/null +++ b/java/java-tests/testData/properties/addcomment/afterAddCommentBetweenPropertiesNoSpace.properties @@ -0,0 +1,5 @@ +# " euler constant" "true" +# pi +pi=3.14 +# euler constant +e=2.7 diff --git a/java/java-tests/testData/properties/addcomment/afterAddCommentBetweenPropertiesWithSpace.properties b/java/java-tests/testData/properties/addcomment/afterAddCommentBetweenPropertiesWithSpace.properties new file mode 100644 index 000000000000..7284a7ba6776 --- /dev/null +++ b/java/java-tests/testData/properties/addcomment/afterAddCommentBetweenPropertiesWithSpace.properties @@ -0,0 +1,5 @@ +# " euler constant" "true" +# pi +pi=3.14 +# euler constant +e=2.7 diff --git a/java/java-tests/testData/properties/addcomment/afterAddCommentToFirstProperty.properties b/java/java-tests/testData/properties/addcomment/afterAddCommentToFirstProperty.properties new file mode 100644 index 000000000000..c1f24ceeb398 --- /dev/null +++ b/java/java-tests/testData/properties/addcomment/afterAddCommentToFirstProperty.properties @@ -0,0 +1,3 @@ +# " the first words" "true" +# the first words +hello=world diff --git a/java/java-tests/testData/properties/addcomment/beforeAddCommentBetweenPropertiesNoSpace.properties b/java/java-tests/testData/properties/addcomment/beforeAddCommentBetweenPropertiesNoSpace.properties new file mode 100644 index 000000000000..e06bf79f9a34 --- /dev/null +++ b/java/java-tests/testData/properties/addcomment/beforeAddCommentBetweenPropertiesNoSpace.properties @@ -0,0 +1,4 @@ +# " euler constant" "true" +# pi +pi=3.14 +e=2.7 diff --git a/java/java-tests/testData/properties/addcomment/beforeAddCommentBetweenPropertiesWithSpace.properties b/java/java-tests/testData/properties/addcomment/beforeAddCommentBetweenPropertiesWithSpace.properties new file mode 100644 index 000000000000..d92bdbf2846c --- /dev/null +++ b/java/java-tests/testData/properties/addcomment/beforeAddCommentBetweenPropertiesWithSpace.properties @@ -0,0 +1,6 @@ +# " euler constant" "true" +# pi +pi=3.14 + + +e=2.7 diff --git a/java/java-tests/testData/properties/addcomment/beforeAddCommentToFirstProperty.properties b/java/java-tests/testData/properties/addcomment/beforeAddCommentToFirstProperty.properties new file mode 100644 index 000000000000..228bf980b4d4 --- /dev/null +++ b/java/java-tests/testData/properties/addcomment/beforeAddCommentToFirstProperty.properties @@ -0,0 +1,2 @@ +# " the first words" "true" +hello=world diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertiesParserDefinition.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertiesParserDefinition.java index dff7b143f569..4fbb948a241d 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertiesParserDefinition.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertiesParserDefinition.java @@ -60,6 +60,7 @@ public class PropertiesParserDefinition implements ParserDefinition { @Override public SpaceRequirements spaceExistenceTypeBetweenTokens(ASTNode left, ASTNode right) { + if (PropertiesTokenTypes.COMMENTS.contains(left.getElementType())) return SpaceRequirements.MUST_LINE_BREAK; return SpaceRequirements.MAY; } diff --git a/plugins/properties/tests/testSrc/com/intellij/lang/properties/AddCommentViaAPITest.java b/plugins/properties/tests/testSrc/com/intellij/lang/properties/AddCommentViaAPITest.java new file mode 100644 index 000000000000..1fc1af075dd9 --- /dev/null +++ b/plugins/properties/tests/testSrc/com/intellij/lang/properties/AddCommentViaAPITest.java @@ -0,0 +1,42 @@ +package com.intellij.lang.properties; + +import com.intellij.codeInsight.daemon.quickFix.ActionHint; +import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCase; +import com.intellij.lang.properties.psi.Property; +import com.intellij.openapi.application.WriteAction; +import com.intellij.psi.PsiComment; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiParserFacade; +import com.intellij.psi.util.PsiTreeUtil; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; + +public class AddCommentViaAPITest extends LightQuickFixParameterizedTestCase { + + private PsiParserFacade myParser; + + @Override + protected void setUp() throws Exception { + super.setUp(); + myParser = PsiParserFacade.SERVICE.getInstance(getProject()); + } + + @Override + protected @NonNls String getBasePath() { + return "/properties/addcomment"; + } + + @Override + protected void doAction(@NotNull ActionHint actionHint, @NotNull String testFullPath, @NotNull String testName) { + final int offset = getEditor().getCaretModel().getOffset(); + final PsiElement psiElement = getFile().findElementAt(offset); + assert psiElement != null; + final Property property = PsiTreeUtil.getParentOfType(psiElement, Property.class); + + final PsiComment comment = myParser.createLineCommentFromText(PropertiesFileType.INSTANCE, actionHint.getExpectedText()); + WriteAction.runAndWait(() -> property.getParent().addBefore(comment, property)); + + final String expectedFilePath = getBasePath() + "/after" + testName; + checkResultByFile("In file: " + expectedFilePath, expectedFilePath, false); + } +}