From 46218275c2ebe15585d439e3ca9d7408e71eabb7 Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Fri, 3 May 2013 15:16:18 +0400 Subject: [PATCH] IDEA-59266 successive usage of the "comment code fragment" adds new comments instead of toggling them --- .../CommentByBlockCommentHandler.java | 6 +- .../plugins/groovy/GrCommentTest.groovy | 109 ++++++++++++++++++ 2 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 plugins/groovy/test/org/jetbrains/plugins/groovy/GrCommentTest.groovy diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java index 0057cf1fc5fa..6d287064b112 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -202,7 +202,7 @@ public class CommentByBlockCommentHandler implements CodeInsightActionHandler { } } else { - if (!isWhiteSpaceOrComment(element)) { + if (!isWhiteSpaceOrComment(element, range)) { return false; } } @@ -235,7 +235,7 @@ public class CommentByBlockCommentHandler implements CodeInsightActionHandler { intersection.substring(element.getText()).trim().length() == 0; } - private boolean isWhiteSpaceOrComment(PsiElement element) { + private static boolean isWhiteSpaceOrComment(PsiElement element) { return element instanceof PsiWhiteSpace || PsiTreeUtil.getParentOfType(element, PsiComment.class, false) != null; } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/GrCommentTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/GrCommentTest.groovy new file mode 100644 index 000000000000..af16cc4ccb21 --- /dev/null +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/GrCommentTest.groovy @@ -0,0 +1,109 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jetbrains.plugins.groovy + +import com.intellij.codeInsight.actions.CodeInsightAction +import com.intellij.codeInsight.generation.actions.CommentByBlockCommentAction +import com.intellij.codeInsight.generation.actions.CommentByLineCommentAction +import com.intellij.ide.DataManager +import com.intellij.openapi.actionSystem.ActionManager +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.actionSystem.DataContext +import org.jetbrains.annotations.NotNull +import org.jetbrains.plugins.groovy.util.TestUtils + +/** + * @author Max Medvedev + */ +class GrCommentTest extends LightGroovyTestCase { + @Override + protected String getBasePath() { + TestUtils.testDataPath + 'grComment/' + } + + void testLine() { + lineTest('''\ +print 2 +''', '''\ +//print 2 +''') + } + + + void testUncommentLine() { + lineTest('''\ +//print 2 +''', '''\ +print 2 +''') + } + + + void testBlock0() { + blockTest('''\ +print 2 +''', '''\ +/*print 2*/ +''') + } + + void testUncommentBlock0() { + blockTest('''\ +/*print 2*/ +''', '''\ +print 2 +''') + } + + void testBlock1() { + blockTest('''\ +print 2 + +''', '''\ +/* +print 2 +*/ + +''') + } + + void testUncommentBlock1() { + blockTest('''\ +/* +print 2 +*/ + +''', '''\ +print 2 + +''') + } + + void lineTest(String before, String after) { + doTest(before, after, new CommentByLineCommentAction()) + } + + void blockTest(String before, String after) { + doTest(before, after, new CommentByBlockCommentAction()) + } + + private void doTest(@NotNull String before, @NotNull String after, final CodeInsightAction action) { + myFixture.configureByText(GroovyFileType.GROOVY_FILE_TYPE, before) + final DataContext dataContext = DataManager.instance.dataContextFromFocus.result + action.actionPerformed(new AnActionEvent(null, dataContext, "", action.templatePresentation, ActionManager.instance, 0)); + myFixture.checkResult(after) + } +}