From d4b08e45b3bdd0941062cf8ee962b024165ee0d5 Mon Sep 17 00:00:00 2001 From: Liana Bakradze Date: Wed, 3 Aug 2016 13:53:14 +0300 Subject: [PATCH 1/6] EDU-642 Local course doesn't replace its old version --- .../learning/courseGeneration/StudyProjectGenerator.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/python/educational-core/student/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java b/python/educational-core/student/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java index 0d2245936a94..02249eab3688 100644 --- a/python/educational-core/student/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java +++ b/python/educational-core/student/src/com/jetbrains/edu/learning/courseGeneration/StudyProjectGenerator.java @@ -478,7 +478,11 @@ public class StudyProjectGenerator { flushCache(myCourses); if (courseName != null && !courseName.getName().equals(unzippedName)) { //noinspection ResultOfMethodCallIgnored - courseDir.renameTo(new File(OUR_COURSES_DIR, courseName.getName())); + File dest = new File(OUR_COURSES_DIR, courseName.getName()); + if (dest.exists()) { + FileUtil.delete(dest); + } + courseDir.renameTo(dest); //noinspection ResultOfMethodCallIgnored courseDir.delete(); } From 7b81e4f53f16245a482a02d3252e0741f759be8d Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Wed, 3 Aug 2016 14:04:17 +0300 Subject: [PATCH 2/6] IDEA-159282 When commenting with line comment Hebrew text is placed on the left side of the comment --- .../openapi/editor/impl/view/LineLayout.java | 33 ++++++++++++++++--- .../openapi/editor/impl/EditorRtlTest.java | 6 ++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java index 563d34246c42..4841fd7bc73e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java @@ -15,6 +15,9 @@ */ package com.intellij.openapi.editor.impl.view; +import com.intellij.lang.CodeDocumentationAwareCommenter; +import com.intellij.lang.Commenter; +import com.intellij.lang.LanguageCommenters; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.bidi.BidiRegionsSeparator; @@ -23,6 +26,7 @@ import com.intellij.openapi.editor.colors.FontPreferences; import com.intellij.openapi.editor.highlighter.HighlighterIterator; import com.intellij.openapi.editor.impl.ComplementaryFontsRegistry; import com.intellij.openapi.editor.impl.FontInfo; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.StringEscapesTokenTypes; import com.intellij.psi.tree.IElementType; import com.intellij.util.BitUtil; @@ -134,12 +138,23 @@ abstract class LineLayout { HighlighterIterator iterator = view.getEditor().getHighlighter().createIterator(startOffsetInEditor); int endOffsetInEditor = startOffsetInEditor + textLength; while (!iterator.atEnd() && iterator.getStart() < endOffsetInEditor) { + int relStartOffset = Math.max(0, iterator.getStart() - startOffsetInEditor); IElementType currentToken = iterator.getTokenType(); - if (distinctTokens(lastToken, currentToken)) { - int tokenStart = Math.max(iterator.getStart(), startOffsetInEditor); - addRuns(runs, text, lastOffset - startOffsetInEditor, tokenStart - startOffsetInEditor, flags); + String lcPrefix = getLineCommentPrefix(currentToken); + if (!StringUtil.isEmpty(lcPrefix) && lcPrefix.length() <= (iterator.getEnd() - iterator.getStart()) && + CharArrayUtil.regionMatches(text, relStartOffset, relStartOffset + lcPrefix.length(), lcPrefix)) { + addRuns(runs, text, lastOffset - startOffsetInEditor, relStartOffset, flags); + int textStartOffset = Math.min(textLength, Math.min(iterator.getEnd() - startOffsetInEditor, + CharArrayUtil.shiftForward(text, relStartOffset + lcPrefix.length(), " \t"))); + lastOffset = Math.min(iterator.getEnd(), endOffsetInEditor); + lastToken = null; + addRuns(runs, text, relStartOffset, textStartOffset, flags); + addRuns(runs, text, textStartOffset, lastOffset - startOffsetInEditor, flags); + } + else if (distinctTokens(lastToken, currentToken)) { + addRuns(runs, text, lastOffset - startOffsetInEditor, relStartOffset, flags); lastToken = currentToken; - lastOffset = tokenStart; + lastOffset = relStartOffset + startOffsetInEditor; } iterator.advance(); } @@ -151,6 +166,14 @@ abstract class LineLayout { return runs; } + private static String getLineCommentPrefix(IElementType token) { + if (token == null) return null; + Commenter commenter = LanguageCommenters.INSTANCE.forLanguage(token.getLanguage()); + return (commenter instanceof CodeDocumentationAwareCommenter) && + token.equals(((CodeDocumentationAwareCommenter)commenter).getLineCommentTokenType()) ? + commenter.getLineCommentPrefix() : null; + } + private static boolean distinctTokens(@Nullable IElementType token1, @Nullable IElementType token2) { if (token1 == token2) return false; if (token1 == null || token2 == null) return true; @@ -162,7 +185,7 @@ abstract class LineLayout { } private static void addRuns(List runs, char[] text, int start, int end, int flags) { - if (!Bidi.requiresBidi(text, start, end)) { + if (start < end && !Bidi.requiresBidi(text, start, end)) { addOrMergeRun(runs, new BidiRun((byte)0, start, end)); return; } diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java index 7dbfcc702db5..b960e62083b7 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java @@ -594,6 +594,12 @@ public class EditorRtlTest extends AbstractEditorTest { EditorSettingsExternalizable.getInstance().setBidiTextDirection(savedValue); } } + + public void testLineCommentLayout() throws Exception { + prepare("// R", TestFileType.JAVA); + right(); + checkResult("// R"); + } private void prepareText(String text) throws IOException { prepare(text, TestFileType.TEXT); From 030c5290c7b6c33f9d55ee02ba4f686f52caf120 Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Tue, 2 Aug 2016 17:08:20 +0300 Subject: [PATCH 3/6] Extract editor color scheme test case --- .../impl/EditorColorsSchemeImplTest.java | 60 +------------ .../editor/EditorColorSchemeTestCase.java | 85 +++++++++++++++++++ 2 files changed, 88 insertions(+), 57 deletions(-) create mode 100644 platform/testFramework/src/com/intellij/editor/EditorColorSchemeTestCase.java diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/colors/impl/EditorColorsSchemeImplTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/colors/impl/EditorColorsSchemeImplTest.java index ba9f9eb8ce54..04e3771729a1 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/colors/impl/EditorColorsSchemeImplTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/colors/impl/EditorColorsSchemeImplTest.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.editor.colors.impl; +import com.intellij.editor.EditorColorSchemeTestCase; import com.intellij.openapi.editor.DefaultLanguageHighlighterColors; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; @@ -23,23 +24,9 @@ import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.editor.markup.EffectType; import com.intellij.openapi.editor.markup.TextAttributes; import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.WriteExternalException; -import com.intellij.testFramework.LightPlatformCodeInsightTestCase; import org.jdom.Element; -import org.jdom.input.DOMBuilder; -import org.jdom.output.Format; -import org.jdom.output.XMLOutputter; -import org.jetbrains.annotations.NotNull; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import javax.xml.parsers.ParserConfigurationException; import java.awt.*; -import java.io.IOException; -import java.io.StringReader; -import java.io.StringWriter; import java.util.Arrays; import java.util.Collections; @@ -47,7 +34,7 @@ import static com.intellij.openapi.editor.colors.FontPreferencesTest.*; import static java.util.Collections.singletonList; @SuppressWarnings("Duplicates") -public class EditorColorsSchemeImplTest extends LightPlatformCodeInsightTestCase { +public class EditorColorsSchemeImplTest extends EditorColorSchemeTestCase { EditorColorsSchemeImpl myScheme = new EditorColorsSchemeImpl(null); public void testDefaults() { @@ -326,46 +313,5 @@ public class EditorColorsSchemeImplTest extends LightPlatformCodeInsightTestCase } } - - private static EditorColorsScheme loadScheme(@NotNull String docText) throws ParserConfigurationException, IOException, SAXException { - DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - InputSource inputSource = new InputSource(new StringReader(docText)); - org.w3c.dom.Document doc = docBuilder.parse(inputSource); - Element root = new DOMBuilder().build(doc.getDocumentElement()); - - EditorColorsScheme defaultScheme = EditorColorsManager.getInstance().getScheme(EditorColorsScheme.DEFAULT_SCHEME_NAME); - EditorColorsScheme targetScheme = new EditorColorsSchemeImpl(defaultScheme); - - targetScheme.readExternal(root); - - return targetScheme; - } - - @NotNull - public Pair doTestWriteRead(TextAttributesKey key, TextAttributes attributes) - throws WriteExternalException { - EditorColorsScheme defaultScheme = EditorColorsManager.getInstance().getScheme(EditorColorsScheme.DEFAULT_SCHEME_NAME); - - EditorColorsScheme sourceScheme = (EditorColorsScheme)defaultScheme.clone(); - sourceScheme.setName("test"); - sourceScheme.setAttributes(key, attributes); - - Element root = new Element("scheme"); - ((AbstractColorsScheme)sourceScheme).writeExternal(root); - - EditorColorsScheme targetScheme = new EditorColorsSchemeImpl(defaultScheme); - targetScheme.readExternal(root); - assertEquals("test", targetScheme.getName()); - TextAttributes targetAttrs = targetScheme.getAttributes(key); - return Pair.create(targetScheme,targetAttrs); - } - - private static void assertXmlOutputEquals(String expected, Element root) throws IOException { - StringWriter writer = new StringWriter(); - Format format = Format.getPrettyFormat(); - format.setLineSeparator("\n"); - new XMLOutputter(format).output(root, writer); - String actual = writer.toString(); - assertEquals(expected, actual); - } + } diff --git a/platform/testFramework/src/com/intellij/editor/EditorColorSchemeTestCase.java b/platform/testFramework/src/com/intellij/editor/EditorColorSchemeTestCase.java new file mode 100644 index 000000000000..5314d25edfa1 --- /dev/null +++ b/platform/testFramework/src/com/intellij/editor/EditorColorSchemeTestCase.java @@ -0,0 +1,85 @@ +/* + * Copyright 2000-2016 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 com.intellij.editor; + +import com.intellij.openapi.editor.colors.EditorColorsManager; +import com.intellij.openapi.editor.colors.EditorColorsScheme; +import com.intellij.openapi.editor.colors.TextAttributesKey; +import com.intellij.openapi.editor.colors.impl.AbstractColorsScheme; +import com.intellij.openapi.editor.colors.impl.EditorColorsSchemeImpl; +import com.intellij.openapi.editor.markup.TextAttributes; +import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.WriteExternalException; +import com.intellij.testFramework.LightPlatformTestCase; +import org.jdom.Element; +import org.jdom.input.DOMBuilder; +import org.jdom.output.Format; +import org.jdom.output.XMLOutputter; +import org.jetbrains.annotations.NotNull; +import org.w3c.dom.Document; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.io.StringReader; +import java.io.StringWriter; + +public abstract class EditorColorSchemeTestCase extends LightPlatformTestCase { + protected static EditorColorsScheme loadScheme(@NotNull String docText) throws ParserConfigurationException, IOException, SAXException { + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + InputSource inputSource = new InputSource(new StringReader(docText)); + Document doc = docBuilder.parse(inputSource); + Element root = new DOMBuilder().build(doc.getDocumentElement()); + + EditorColorsScheme defaultScheme = EditorColorsManager.getInstance().getScheme(EditorColorsScheme.DEFAULT_SCHEME_NAME); + EditorColorsScheme targetScheme = new EditorColorsSchemeImpl(defaultScheme); + + targetScheme.readExternal(root); + + return targetScheme; + } + + @NotNull + protected Pair doTestWriteRead(TextAttributesKey key, TextAttributes attributes) + throws WriteExternalException { + EditorColorsScheme defaultScheme = EditorColorsManager.getInstance().getScheme(EditorColorsScheme.DEFAULT_SCHEME_NAME); + + EditorColorsScheme sourceScheme = (EditorColorsScheme)defaultScheme.clone(); + sourceScheme.setName("test"); + sourceScheme.setAttributes(key, attributes); + + Element root = new Element("scheme"); + ((AbstractColorsScheme)sourceScheme).writeExternal(root); + + EditorColorsScheme targetScheme = new EditorColorsSchemeImpl(defaultScheme); + targetScheme.readExternal(root); + assertEquals("test", targetScheme.getName()); + TextAttributes targetAttrs = targetScheme.getAttributes(key); + return Pair.create(targetScheme, targetAttrs); + } + + protected static void assertXmlOutputEquals(String expected, Element root) throws IOException { + StringWriter writer = new StringWriter(); + Format format = Format.getPrettyFormat(); + format.setLineSeparator("\n"); + new XMLOutputter(format).output(root, writer); + String actual = writer.toString(); + assertEquals(expected, actual); + } +} From f73dbb431bf06d8e51ed333a2b6dcead9957e7ed Mon Sep 17 00:00:00 2001 From: Rustam Vishnyakov Date: Wed, 3 Aug 2016 14:25:46 +0300 Subject: [PATCH 4/6] FIXED WI-32618 The colours for elements in the theme change on startup. --- platform/platform-resources/src/DefaultColorSchemesManager.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/platform/platform-resources/src/DefaultColorSchemesManager.xml b/platform/platform-resources/src/DefaultColorSchemesManager.xml index 43bcf9e6bad2..bb17f74b5d37 100644 --- a/platform/platform-resources/src/DefaultColorSchemesManager.xml +++ b/platform/platform-resources/src/DefaultColorSchemesManager.xml @@ -127,6 +127,9 @@ +