diff --git a/java/java-impl/java-impl.iml b/java/java-impl/java-impl.iml index c41067e99861..54da7ac1d6cc 100644 --- a/java/java-impl/java-impl.iml +++ b/java/java-impl/java-impl.iml @@ -5,6 +5,7 @@ + @@ -19,7 +20,6 @@ - diff --git a/platform/boot/boot.iml b/platform/boot/boot.iml index fc3b39684032..30fa05efe1fa 100644 --- a/platform/boot/boot.iml +++ b/platform/boot/boot.iml @@ -5,8 +5,8 @@ - + diff --git a/platform/lang-impl/lang-impl.iml b/platform/lang-impl/lang-impl.iml index 2613ed94031a..8826fbdf2382 100644 --- a/platform/lang-impl/lang-impl.iml +++ b/platform/lang-impl/lang-impl.iml @@ -6,10 +6,10 @@ + - diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java index e974a9b5a199..10f575a8155c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorImpl.java @@ -3103,6 +3103,10 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi region.setExpanded(true); } }); + + // The call below is performed because gutter's height is not updated sometimes, i.e. it sticks to the value that corresponds + // to the situation when fold region is collapsed. That causes bottom of the gutter to not be repainted and that looks really ugly. + getGutterComponentEx().invalidate(); } if (myMousePressedEvent != null && myMousePressedEvent.getClickCount() == 1 && myMousePressedInsideSelection) { diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java index 4a62bc806b85..0bd2d07ea032 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/CachingSoftWrapDataMapper.java @@ -210,7 +210,7 @@ public class CachingSoftWrapDataMapper implements SoftWrapDataMapper, SoftWrapAw int sortingKey = provider.getSortingKey(); // There is a possible case that, say, fold region is soft wrapped. We don't want to perform unnecessary then. - if (context.offset < sortingKey) { + if (context.offset <= sortingKey) { result = strategy.advance(context, sortingKey); if (result != null) { return result; diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java index ca2290485d68..b8b28447ffcb 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManager.java @@ -249,6 +249,8 @@ public class SoftWrapApplianceManager implements FoldingListener, DocumentListen start = context.offset; softWrapStartOffset = currentFold.getEndOffset(); } + myOffset2fontType.clear(); + myOffset2widthInPixels.clear(); } end = iterationState.getEndOffset(); diff --git a/platform/platform-impl/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManagerTest.java b/platform/platform-impl/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManagerTest.java index 4c02743824dc..f12af3fca412 100644 --- a/platform/platform-impl/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManagerTest.java +++ b/platform/platform-impl/testSrc/com/intellij/openapi/editor/impl/softwrap/mapping/SoftWrapApplianceManagerTest.java @@ -15,11 +15,17 @@ */ package com.intellij.openapi.editor.impl.softwrap.mapping; +import com.intellij.openapi.editor.FoldRegion; +import com.intellij.openapi.editor.FoldingModel; +import com.intellij.openapi.editor.LogicalPosition; +import com.intellij.openapi.editor.VisualPosition; import com.intellij.openapi.editor.ex.SoftWrapModelEx; +import com.intellij.openapi.editor.impl.FoldRegionImpl; import com.intellij.openapi.editor.impl.SoftWrapModelImpl; import com.intellij.testFramework.LightPlatformCodeInsightTestCase; import java.awt.*; +import java.io.IOException; /** * @author Denis Zhdanov @@ -56,8 +62,59 @@ public class SoftWrapApplianceManagerTest extends LightPlatformCodeInsightTestCa assertNotNull(getSoftWrapModel().getSoftWrap(offset)); } + public void testFoldRegionCollapsing() throws Exception { + String text = + "class Test {\n" + + " public void foo() {\n" + + " System.out.println(\"test\");\n" + + " }\n" + + "}"; + + init(300, text); + final FoldingModel foldingModel = myEditor.getFoldingModel(); + assertEmpty(foldingModel.getAllFoldRegions()); + + final int startOffset = text.indexOf('{'); + final int endOffset = text.indexOf('}') + 1; + + VisualPosition foldStartPosition = myEditor.offsetToVisualPosition(startOffset); + + foldingModel.runBatchFoldingOperation(new Runnable() { + @Override + public void run() { + foldingModel.addFoldRegion(startOffset, endOffset, "..."); + } + }); + + final FoldRegion foldRegion = foldingModel.getAllFoldRegions()[0]; + assertNotNull(foldRegion); + assertTrue(foldRegion.isExpanded()); + foldingModel.runBatchFoldingOperation(new Runnable() { + @Override + public void run() { + foldRegion.setExpanded(false); + } + }); + + // Expecting that all offsets that belong to collapsed fold region point to the region's start. + assertEquals(foldStartPosition, myEditor.offsetToVisualPosition(startOffset + 5)); + } + private void init(final int visibleWidth) throws Exception { - configureByFile(PATH + getTestName(false) + ".txt"); + configureByFile(PATH + getFileName()); + initCommon(visibleWidth); + } + + private void init(int visibleWidth, String fileText) throws IOException { + configureFromFileText(getFileName(), fileText); + initCommon(visibleWidth); + } + + private String getFileName() { + return getTestName(false) + ".txt"; + } + + private static void initCommon(final int visibleWidth) { myEditor.getSettings().setUseSoftWraps(true); SoftWrapModelImpl model = (SoftWrapModelImpl)myEditor.getSoftWrapModel(); model.refreshSettings(); diff --git a/plugins/properties/properties.iml b/plugins/properties/properties.iml index bc387eeb3f60..cec4a8781319 100644 --- a/plugins/properties/properties.iml +++ b/plugins/properties/properties.iml @@ -7,13 +7,13 @@ + -