From 8697922e415e62bf29ff6ea3620f665c46f287c8 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 27 Jan 2011 17:54:06 +0100 Subject: [PATCH] IDEA-64687 Impossible to add an import statement when import section is collapsed --- ...oldingTest.java => JavaFoldingTest.groovy} | 32 ++++++++++++++----- .../impl/UpdateFoldRegionsOperation.java | 8 ++++- 2 files changed, 31 insertions(+), 9 deletions(-) rename java/java-tests/testSrc/com/intellij/codeInsight/folding/{JavaFoldingTest.java => JavaFoldingTest.groovy} (54%) diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy similarity index 54% rename from java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.java rename to java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy index 831b27feecce..16448ee85a08 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/folding/JavaFoldingTest.groovy @@ -15,8 +15,10 @@ */ package com.intellij.codeInsight.folding; -import com.intellij.openapi.application.ex.PathManagerEx; -import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase; + +import com.intellij.codeInsight.folding.impl.CodeFoldingManagerImpl +import com.intellij.openapi.application.ex.PathManagerEx +import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase /** * @author Denis Zhdanov @@ -25,12 +27,26 @@ import com.intellij.testFramework.fixtures.CodeInsightFixtureTestCase; public class JavaFoldingTest extends CodeInsightFixtureTestCase { public void testEndOfLineComments() { - doTest(); + myFixture.testFolding("$PathManagerEx.testDataPath/codeInsight/folding/${getTestName(false)}.java"); } - - private void doTest() { - StringBuilder path = new StringBuilder(PathManagerEx.getTestDataPath()).append("/codeInsight/folding/") - .append(getTestName(false)).append(".java"); - myFixture.testFolding(path.toString()); + + public void testEditingImports() { + myFixture.configureByText "a.java", """\ +import java.util.List; +import java.util.Map; + + +class Foo { List a; Map b; } +""" + + CodeFoldingManagerImpl.getInstance(getProject()).buildInitialFoldings(myFixture.editor); + myFixture.doHighlighting() + assert myFixture.editor.foldingModel.getCollapsedRegionAtOffset(10) + + myFixture.type 'import ' + myFixture.doHighlighting() + assert !myFixture.editor.foldingModel.getCollapsedRegionAtOffset(10) } + + } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java index dbef9c8ba6f3..9563a448477c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/UpdateFoldRegionsOperation.java @@ -18,6 +18,7 @@ package com.intellij.codeInsight.folding.impl; import com.intellij.lang.folding.FoldingDescriptor; import com.intellij.lang.injection.InjectedLanguageManager; +import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.FoldRegion; import com.intellij.openapi.editor.FoldingGroup; @@ -124,7 +125,12 @@ class UpdateFoldRegionsOperation implements Runnable { } private boolean shouldExpandNewRegion(PsiElement element, TextRange range, Map rangeToExpandStatusMap) { - boolean caretInside = FoldingUtil.caretInsideRange(myEditor, range); + final Document document = myEditor.getDocument(); + final int firstLine = document.getLineNumber(range.getStartOffset()); + final int lastLine = document.getLineNumber(range.getEndOffset()); + final int currentLine = document.getLineNumber(myEditor.getCaretModel().getOffset()); + boolean caretInside = firstLine <= currentLine && currentLine <= lastLine; + if (myApplyDefaultState) { return caretInside || !FoldingPolicy.isCollapseByDefault(element); }