diff --git a/java/java-tests/testSrc/com/intellij/projectView/PackagesTreeStructureTest.java b/java/java-tests/testSrc/com/intellij/projectView/PackagesTreeStructureTest.java index c38206960daa..2e291ab9c817 100644 --- a/java/java-tests/testSrc/com/intellij/projectView/PackagesTreeStructureTest.java +++ b/java/java-tests/testSrc/com/intellij/projectView/PackagesTreeStructureTest.java @@ -1,33 +1,17 @@ /* - * Copyright (c) 2004 JetBrains s.r.o. All Rights Reserved. + * Copyright 2000-2017 JetBrains s.r.o. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * 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 * - * -Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * -Redistribution in binary form must reproduct the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the distribution. - * - * Neither the name of JetBrains or IntelliJ IDEA - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. ALL - * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING - * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE - * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. JETBRAINS AND ITS LICENSORS SHALL NOT - * BE LIABLE FOR ANY DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT - * OF OR RELATING TO USE, MODIFICATION OR DISTRIBUTION OF THE SOFTWARE OR ITS - * DERIVATIVES. IN NO EVENT WILL JETBRAINS OR ITS LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, - * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY - * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN - * IF JETBRAINS HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * 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.projectView; @@ -35,21 +19,21 @@ import com.intellij.ide.projectView.ProjectView; import com.intellij.ide.projectView.impl.AbstractProjectTreeStructure; import com.intellij.ide.projectView.impl.PackageViewPane; import com.intellij.ide.projectView.impl.ProjectViewImpl; -import com.intellij.testFramework.IdeaTestUtil; +import com.intellij.lang.properties.projectView.ResourceBundleGrouper; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.impl.ModuleManagerImpl; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.testFramework.PlatformTestUtil; import com.intellij.testFramework.TestSourceBasedTestCase; import com.intellij.util.ui.tree.TreeUtil; -import com.intellij.lang.properties.projectView.ResourceBundleGrouper; import org.jetbrains.annotations.NonNls; import javax.swing.*; import java.io.IOException; public class PackagesTreeStructureTest extends TestSourceBasedTestCase { - public void testPackageView() throws IOException { + public void testPackageView() throws IOException, InterruptedException { ModuleManagerImpl.getInstanceImpl(myProject).setModuleGroupPath(myModule, new String[]{"Group"}); final VirtualFile srcFile = getSrcDirectory().getVirtualFile(); if (srcFile.findChild("empty") == null){ @@ -180,6 +164,21 @@ public class PackagesTreeStructureTest extends TestSourceBasedTestCase { " -PsiPackage: javax.servlet\n" + " Class1.java\n", 4); + doTest(false, false, true, true, "-Project\n" + + " -PsiPackage: com.package1\n" + + " Class1.java\n" + + " Class2.java\n" + + " Class4.java\n" + + " emptyClassFile.class\n" + + " Form1.form\n" + + " Form1.java\n" + + " Form2.form\n" + + " PsiPackage: empty\n" + + " -PsiPackage: java\n" + + " Class1.java\n" + + " -PsiPackage: j.servlet\n" + + " Class1.java\n", 3); + doTest(false, false, "-Project\n" + " -PsiPackage: com.package1\n" + " Class1.java\n" + @@ -194,17 +193,23 @@ public class PackagesTreeStructureTest extends TestSourceBasedTestCase { " Class1.java\n" + " -PsiPackage: javax.servlet\n" + " Class1.java\n", 3); - } - private void doTest(final boolean showModules, final boolean showLibraryContents, @NonNls final String expected, final int levels) { + private void doTest(final boolean showModules, final boolean showLibraryContents, @NonNls final String expected, final int levels) + throws InterruptedException { + doTest(showModules, showLibraryContents, false, false, expected, levels); + } + + private void doTest(final boolean showModules, final boolean showLibraryContents, boolean flattenPackages, boolean abbreviatePackageNames, @NonNls final String expected, final int levels) + throws InterruptedException { final ProjectViewImpl projectView = (ProjectViewImpl)ProjectView.getInstance(myProject); projectView.setShowModules(showModules, PackageViewPane.ID); projectView.setShowLibraryContents(showLibraryContents, PackageViewPane.ID); - projectView.setFlattenPackages(false, PackageViewPane.ID); + projectView.setFlattenPackages(flattenPackages, PackageViewPane.ID); + projectView.setAbbreviatePackageNames(abbreviatePackageNames, PackageViewPane.ID); projectView.setHideEmptyPackages(true, PackageViewPane.ID); PackageViewPane packageViewPane = new PackageViewPane(myProject); @@ -213,7 +218,7 @@ public class PackagesTreeStructureTest extends TestSourceBasedTestCase { packageViewPane.updateFromRoot(true); JTree tree = packageViewPane.getTree(); TreeUtil.expand(tree, levels); - IdeaTestUtil.assertTreeEqual(tree, expected); + PlatformTestUtil.assertTreeEqual(tree, expected); BaseProjectViewTestCase.checkContainsMethod(packageViewPane.getTreeStructure().getRootElement(), packageViewPane.getTreeStructure()); Disposer.dispose(packageViewPane); } diff --git a/platform/diff-impl/src/com/intellij/diff/DiffContentFactoryImpl.java b/platform/diff-impl/src/com/intellij/diff/DiffContentFactoryImpl.java index 677ab57d954e..ee028cd1d15e 100644 --- a/platform/diff-impl/src/com/intellij/diff/DiffContentFactoryImpl.java +++ b/platform/diff-impl/src/com/intellij/diff/DiffContentFactoryImpl.java @@ -26,10 +26,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.EditorFactory; import com.intellij.openapi.fileEditor.FileDocumentManager; -import com.intellij.openapi.fileTypes.BinaryFileTypeDecompilers; -import com.intellij.openapi.fileTypes.FileType; -import com.intellij.openapi.fileTypes.FileTypes; -import com.intellij.openapi.fileTypes.PlainTextFileType; +import com.intellij.openapi.fileTypes.*; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; @@ -250,7 +247,7 @@ public class DiffContentFactoryImpl extends DiffContentFactoryEx { public DiffContent createFromBytes(@Nullable Project project, @NotNull byte[] content, @NotNull FilePath filePath) throws IOException { - if (filePath.getFileType().isBinary()) { + if (isBinaryContent(content, filePath.getFileType())) { return createBinaryImpl(project, content, filePath.getFileType(), filePath.getName(), filePath.getVirtualFile()); } @@ -262,8 +259,7 @@ public class DiffContentFactoryImpl extends DiffContentFactoryEx { public DiffContent createFromBytes(@Nullable Project project, @NotNull byte[] content, @NotNull VirtualFile highlightFile) throws IOException { - // TODO: check if FileType.UNKNOWN is actually a text ? - if (highlightFile.getFileType().isBinary()) { + if (isBinaryContent(content, highlightFile.getFileType())) { return createBinaryImpl(project, content, highlightFile.getFileType(), highlightFile.getName(), highlightFile); } @@ -356,6 +352,13 @@ public class DiffContentFactoryImpl extends DiffContentFactoryEx { @NotNull String fileName, @Nullable VirtualFile highlightFile, @NotNull Charset charset) { + if (fileType.isBinary()) { + fileType = PlainTextFileType.INSTANCE; + + Charset guessedCharset = guessCharsetFromContent(content); + if (guessedCharset != null) charset = guessedCharset; + } + Charset bomCharset = CharsetToolkit.guessFromBOM(content); boolean isBOM = bomCharset != null; if (isBOM) charset = bomCharset; @@ -442,4 +445,30 @@ public class DiffContentFactoryImpl extends DiffContentFactoryEx { return document; }); } + + private static boolean isBinaryContent(@NotNull byte[] content, @NotNull FileType fileType) { + if (UnknownFileType.INSTANCE.equals(fileType)) { + return guessCharsetFromContent(content) == null; + } + return fileType.isBinary(); + } + + @Nullable + private static Charset guessCharsetFromContent(@NotNull byte[] content) { + // can't use CharsetToolkit.guessEncoding here because of false-positive INVALID_UTF8 + CharsetToolkit toolkit = new CharsetToolkit(content); + + Charset fromBOM = toolkit.guessFromBOM(); + if (fromBOM != null) return fromBOM; + + CharsetToolkit.GuessedEncoding guessedEncoding = toolkit.guessFromContent(content.length); + switch (guessedEncoding) { + case SEVEN_BIT: + return Charset.forName("US-ASCII"); + case VALID_UTF8: + return CharsetToolkit.UTF8_CHARSET; + default: + return null; + } + } } diff --git a/platform/icons/src/actions/download.png b/platform/icons/src/actions/download.png index 3df555ee6a48..d285a0ea256f 100644 Binary files a/platform/icons/src/actions/download.png and b/platform/icons/src/actions/download.png differ diff --git a/platform/icons/src/actions/download@2x.png b/platform/icons/src/actions/download@2x.png index a9d20fd9b351..7bf1a4609927 100644 Binary files a/platform/icons/src/actions/download@2x.png and b/platform/icons/src/actions/download@2x.png differ diff --git a/platform/icons/src/debugger/threads_dark.png b/platform/icons/src/debugger/threads_dark.png new file mode 100644 index 000000000000..3b714e77bf38 Binary files /dev/null and b/platform/icons/src/debugger/threads_dark.png differ diff --git a/platform/icons/src/nodes/DataSource.png b/platform/icons/src/nodes/DataSource.png index 6fad36d3411c..3a5766909dab 100644 Binary files a/platform/icons/src/nodes/DataSource.png and b/platform/icons/src/nodes/DataSource.png differ diff --git a/platform/icons/src/nodes/DataSource@2x.png b/platform/icons/src/nodes/DataSource@2x.png index 45c389ad7eea..1043c7231827 100644 Binary files a/platform/icons/src/nodes/DataSource@2x.png and b/platform/icons/src/nodes/DataSource@2x.png differ diff --git a/platform/icons/src/nodes/Module.png b/platform/icons/src/nodes/Module.png index 58ef470d96c1..2111c98144e3 100644 Binary files a/platform/icons/src/nodes/Module.png and b/platform/icons/src/nodes/Module.png differ diff --git a/platform/icons/src/nodes/Module@2x.png b/platform/icons/src/nodes/Module@2x.png index 0088dcb725f0..7d07742196af 100644 Binary files a/platform/icons/src/nodes/Module@2x.png and b/platform/icons/src/nodes/Module@2x.png differ diff --git a/platform/icons/src/nodes/TreeClosed.png b/platform/icons/src/nodes/TreeClosed.png index 14b79f93c93d..f5d47c755007 100644 Binary files a/platform/icons/src/nodes/TreeClosed.png and b/platform/icons/src/nodes/TreeClosed.png differ diff --git a/platform/icons/src/nodes/TreeClosed@2x.png b/platform/icons/src/nodes/TreeClosed@2x.png index 41a8bc8447ee..01324d8fc52e 100644 Binary files a/platform/icons/src/nodes/TreeClosed@2x.png and b/platform/icons/src/nodes/TreeClosed@2x.png differ diff --git a/platform/icons/src/nodes/TreeOpen.png b/platform/icons/src/nodes/TreeOpen.png index 14b79f93c93d..f5d47c755007 100644 Binary files a/platform/icons/src/nodes/TreeOpen.png and b/platform/icons/src/nodes/TreeOpen.png differ diff --git a/platform/icons/src/nodes/TreeOpen@2x.png b/platform/icons/src/nodes/TreeOpen@2x.png index 41a8bc8447ee..01324d8fc52e 100644 Binary files a/platform/icons/src/nodes/TreeOpen@2x.png and b/platform/icons/src/nodes/TreeOpen@2x.png differ diff --git a/platform/icons/src/nodes/artifact.png b/platform/icons/src/nodes/artifact.png index cabeb1f2bd45..ba95c4a843b0 100644 Binary files a/platform/icons/src/nodes/artifact.png and b/platform/icons/src/nodes/artifact.png differ diff --git a/platform/icons/src/nodes/artifact@2x.png b/platform/icons/src/nodes/artifact@2x.png index 1c85aba4062b..65f7b2d84cde 100644 Binary files a/platform/icons/src/nodes/artifact@2x.png and b/platform/icons/src/nodes/artifact@2x.png differ diff --git a/platform/icons/src/nodes/copyOfFolder.png b/platform/icons/src/nodes/copyOfFolder.png index 206ed6f2916f..650bdbdaa1bf 100644 Binary files a/platform/icons/src/nodes/copyOfFolder.png and b/platform/icons/src/nodes/copyOfFolder.png differ diff --git a/platform/icons/src/nodes/copyOfFolder@2x.png b/platform/icons/src/nodes/copyOfFolder@2x.png index 9567ab87b32f..7c43be745b3f 100644 Binary files a/platform/icons/src/nodes/copyOfFolder@2x.png and b/platform/icons/src/nodes/copyOfFolder@2x.png differ diff --git a/platform/icons/src/nodes/cvs_global.png b/platform/icons/src/nodes/cvs_global.png index b74ff10ba573..1e5bb5feb808 100644 Binary files a/platform/icons/src/nodes/cvs_global.png and b/platform/icons/src/nodes/cvs_global.png differ diff --git a/platform/icons/src/nodes/cvs_global@2x.png b/platform/icons/src/nodes/cvs_global@2x.png index 4ebe0ba4a7c6..551464bf747b 100644 Binary files a/platform/icons/src/nodes/cvs_global@2x.png and b/platform/icons/src/nodes/cvs_global@2x.png differ diff --git a/platform/icons/src/nodes/cvs_roots.png b/platform/icons/src/nodes/cvs_roots.png index 5de59238c648..6e5913b44438 100644 Binary files a/platform/icons/src/nodes/cvs_roots.png and b/platform/icons/src/nodes/cvs_roots.png differ diff --git a/platform/icons/src/nodes/cvs_roots@2x.png b/platform/icons/src/nodes/cvs_roots@2x.png index 7b7bd5911862..43c19b699a68 100644 Binary files a/platform/icons/src/nodes/cvs_roots@2x.png and b/platform/icons/src/nodes/cvs_roots@2x.png differ diff --git a/platform/icons/src/nodes/extractedFolder.png b/platform/icons/src/nodes/extractedFolder.png index a0cf2c75314b..36c4fd37ca7a 100644 Binary files a/platform/icons/src/nodes/extractedFolder.png and b/platform/icons/src/nodes/extractedFolder.png differ diff --git a/platform/icons/src/nodes/extractedFolder@2x.png b/platform/icons/src/nodes/extractedFolder@2x.png index 75cf4002adc2..a5edf2960d68 100644 Binary files a/platform/icons/src/nodes/extractedFolder@2x.png and b/platform/icons/src/nodes/extractedFolder@2x.png differ diff --git a/platform/icons/src/nodes/folder.png b/platform/icons/src/nodes/folder.png index 14b79f93c93d..f5d47c755007 100644 Binary files a/platform/icons/src/nodes/folder.png and b/platform/icons/src/nodes/folder.png differ diff --git a/platform/icons/src/nodes/folder@2x.png b/platform/icons/src/nodes/folder@2x.png index 41a8bc8447ee..01324d8fc52e 100644 Binary files a/platform/icons/src/nodes/folder@2x.png and b/platform/icons/src/nodes/folder@2x.png differ diff --git a/platform/icons/src/nodes/homeFolder.png b/platform/icons/src/nodes/homeFolder.png index d47f59be0696..393ccc0064de 100644 Binary files a/platform/icons/src/nodes/homeFolder.png and b/platform/icons/src/nodes/homeFolder.png differ diff --git a/platform/icons/src/nodes/homeFolder@2x.png b/platform/icons/src/nodes/homeFolder@2x.png index a706868a695a..3392ee09b78b 100644 Binary files a/platform/icons/src/nodes/homeFolder@2x.png and b/platform/icons/src/nodes/homeFolder@2x.png differ diff --git a/platform/icons/src/nodes/ideaModule.png b/platform/icons/src/nodes/ideaModule.png index e8baa78af5e3..615ef63ad845 100644 Binary files a/platform/icons/src/nodes/ideaModule.png and b/platform/icons/src/nodes/ideaModule.png differ diff --git a/platform/icons/src/nodes/ideaModule@2x.png b/platform/icons/src/nodes/ideaModule@2x.png index d21693b8effd..62669179e8b1 100644 Binary files a/platform/icons/src/nodes/ideaModule@2x.png and b/platform/icons/src/nodes/ideaModule@2x.png differ diff --git a/platform/icons/src/nodes/ideaProject.png b/platform/icons/src/nodes/ideaProject.png index 94357674a957..081e99f9c1f0 100644 Binary files a/platform/icons/src/nodes/ideaProject.png and b/platform/icons/src/nodes/ideaProject.png differ diff --git a/platform/icons/src/nodes/ideaProject@2x.png b/platform/icons/src/nodes/ideaProject@2x.png index 34c0d4ba170d..4b0728dd639e 100644 Binary files a/platform/icons/src/nodes/ideaProject@2x.png and b/platform/icons/src/nodes/ideaProject@2x.png differ diff --git a/platform/icons/src/nodes/inspectionResults.png b/platform/icons/src/nodes/inspectionResults.png index 0799e7dc2a24..d65c281d1ff8 100644 Binary files a/platform/icons/src/nodes/inspectionResults.png and b/platform/icons/src/nodes/inspectionResults.png differ diff --git a/platform/icons/src/nodes/inspectionResults@2x.png b/platform/icons/src/nodes/inspectionResults@2x.png index 6ec676ab70e9..9f48970169a4 100644 Binary files a/platform/icons/src/nodes/inspectionResults@2x.png and b/platform/icons/src/nodes/inspectionResults@2x.png differ diff --git a/platform/icons/src/nodes/jarDirectory.png b/platform/icons/src/nodes/jarDirectory.png index 4a724bfc8a36..9d2a20e9d92e 100644 Binary files a/platform/icons/src/nodes/jarDirectory.png and b/platform/icons/src/nodes/jarDirectory.png differ diff --git a/platform/icons/src/nodes/jarDirectory@2x.png b/platform/icons/src/nodes/jarDirectory@2x.png index 9bedcf0cb5f6..e08a2e0c1c62 100644 Binary files a/platform/icons/src/nodes/jarDirectory@2x.png and b/platform/icons/src/nodes/jarDirectory@2x.png differ diff --git a/platform/icons/src/nodes/javaDocFolder.png b/platform/icons/src/nodes/javaDocFolder.png index 87b6e95bf64c..daafd3f665d5 100644 Binary files a/platform/icons/src/nodes/javaDocFolder.png and b/platform/icons/src/nodes/javaDocFolder.png differ diff --git a/platform/icons/src/nodes/javaDocFolder@2x.png b/platform/icons/src/nodes/javaDocFolder@2x.png index 64e475f29fa9..724a50cbb7b1 100644 Binary files a/platform/icons/src/nodes/javaDocFolder@2x.png and b/platform/icons/src/nodes/javaDocFolder@2x.png differ diff --git a/platform/icons/src/nodes/jsr45.png b/platform/icons/src/nodes/jsr45.png index a0737e621eed..00e7ed537a02 100644 Binary files a/platform/icons/src/nodes/jsr45.png and b/platform/icons/src/nodes/jsr45.png differ diff --git a/platform/icons/src/nodes/jsr45@2x.png b/platform/icons/src/nodes/jsr45@2x.png index 0c8498795001..f99a8a1bb288 100644 Binary files a/platform/icons/src/nodes/jsr45@2x.png and b/platform/icons/src/nodes/jsr45@2x.png differ diff --git a/platform/icons/src/nodes/keymapAnt.png b/platform/icons/src/nodes/keymapAnt.png index c374920ad43c..40c2f273a590 100644 Binary files a/platform/icons/src/nodes/keymapAnt.png and b/platform/icons/src/nodes/keymapAnt.png differ diff --git a/platform/icons/src/nodes/keymapAnt@2x.png b/platform/icons/src/nodes/keymapAnt@2x.png index 0e914f108d3e..abe3683ee454 100644 Binary files a/platform/icons/src/nodes/keymapAnt@2x.png and b/platform/icons/src/nodes/keymapAnt@2x.png differ diff --git a/platform/icons/src/nodes/keymapEditor.png b/platform/icons/src/nodes/keymapEditor.png index 680783fbf37b..efca3ebc82e9 100644 Binary files a/platform/icons/src/nodes/keymapEditor.png and b/platform/icons/src/nodes/keymapEditor.png differ diff --git a/platform/icons/src/nodes/keymapEditor@2x.png b/platform/icons/src/nodes/keymapEditor@2x.png index 402be651f630..7335bbe71a10 100644 Binary files a/platform/icons/src/nodes/keymapEditor@2x.png and b/platform/icons/src/nodes/keymapEditor@2x.png differ diff --git a/platform/icons/src/nodes/keymapMainMenu.png b/platform/icons/src/nodes/keymapMainMenu.png index 8d6be2d5af60..40b1072bca4f 100644 Binary files a/platform/icons/src/nodes/keymapMainMenu.png and b/platform/icons/src/nodes/keymapMainMenu.png differ diff --git a/platform/icons/src/nodes/keymapMainMenu@2x.png b/platform/icons/src/nodes/keymapMainMenu@2x.png index 4f6a2ad0e170..9a244407cdbe 100644 Binary files a/platform/icons/src/nodes/keymapMainMenu@2x.png and b/platform/icons/src/nodes/keymapMainMenu@2x.png differ diff --git a/platform/icons/src/nodes/keymapOther.png b/platform/icons/src/nodes/keymapOther.png index 71615dd61a1c..8d673b5ae09b 100644 Binary files a/platform/icons/src/nodes/keymapOther.png and b/platform/icons/src/nodes/keymapOther.png differ diff --git a/platform/icons/src/nodes/keymapOther@2x.png b/platform/icons/src/nodes/keymapOther@2x.png index 9c8d08d575d8..07481c435ae9 100644 Binary files a/platform/icons/src/nodes/keymapOther@2x.png and b/platform/icons/src/nodes/keymapOther@2x.png differ diff --git a/platform/icons/src/nodes/keymapTools.png b/platform/icons/src/nodes/keymapTools.png index 1620474158c3..4032e8b5b4b9 100644 Binary files a/platform/icons/src/nodes/keymapTools.png and b/platform/icons/src/nodes/keymapTools.png differ diff --git a/platform/icons/src/nodes/keymapTools@2x.png b/platform/icons/src/nodes/keymapTools@2x.png index d50357875aad..0ab57a944905 100644 Binary files a/platform/icons/src/nodes/keymapTools@2x.png and b/platform/icons/src/nodes/keymapTools@2x.png differ diff --git a/platform/icons/src/nodes/moduleGroup.png b/platform/icons/src/nodes/moduleGroup.png index 92750aa6b99d..d652955c16d0 100644 Binary files a/platform/icons/src/nodes/moduleGroup.png and b/platform/icons/src/nodes/moduleGroup.png differ diff --git a/platform/icons/src/nodes/moduleGroup@2x.png b/platform/icons/src/nodes/moduleGroup@2x.png index bf48e0b1cac7..9e08daef84a9 100644 Binary files a/platform/icons/src/nodes/moduleGroup@2x.png and b/platform/icons/src/nodes/moduleGroup@2x.png differ diff --git a/platform/icons/src/nodes/newFolder.png b/platform/icons/src/nodes/newFolder.png index d111c34c1593..f5d47c755007 100644 Binary files a/platform/icons/src/nodes/newFolder.png and b/platform/icons/src/nodes/newFolder.png differ diff --git a/platform/icons/src/nodes/newFolder@2x.png b/platform/icons/src/nodes/newFolder@2x.png index 42e807a20a38..01324d8fc52e 100644 Binary files a/platform/icons/src/nodes/newFolder@2x.png and b/platform/icons/src/nodes/newFolder@2x.png differ diff --git a/platform/icons/src/nodes/package.png b/platform/icons/src/nodes/package.png index 25579935892d..7c35ef907a73 100644 Binary files a/platform/icons/src/nodes/package.png and b/platform/icons/src/nodes/package.png differ diff --git a/platform/icons/src/nodes/package@2x.png b/platform/icons/src/nodes/package@2x.png index 62e5d4d07843..5f0558dee6a1 100644 Binary files a/platform/icons/src/nodes/package@2x.png and b/platform/icons/src/nodes/package@2x.png differ diff --git a/platform/icons/src/nodes/plugin.png b/platform/icons/src/nodes/plugin.png index 37de1e2cb798..cc094e665d5d 100644 Binary files a/platform/icons/src/nodes/plugin.png and b/platform/icons/src/nodes/plugin.png differ diff --git a/platform/icons/src/nodes/plugin@2x.png b/platform/icons/src/nodes/plugin@2x.png index bac5ce1e63a9..d78643ec3b7e 100644 Binary files a/platform/icons/src/nodes/plugin@2x.png and b/platform/icons/src/nodes/plugin@2x.png differ diff --git a/platform/icons/src/nodes/pluginJB.png b/platform/icons/src/nodes/pluginJB.png index b68a3eee1cce..6b45bbb4550b 100644 Binary files a/platform/icons/src/nodes/pluginJB.png and b/platform/icons/src/nodes/pluginJB.png differ diff --git a/platform/icons/src/nodes/pluginJB@2x.png b/platform/icons/src/nodes/pluginJB@2x.png index 09adb7b53d21..a5f8265de79f 100644 Binary files a/platform/icons/src/nodes/pluginJB@2x.png and b/platform/icons/src/nodes/pluginJB@2x.png differ diff --git a/platform/icons/src/nodes/pluginLogo.png b/platform/icons/src/nodes/pluginLogo.png index bac5ce1e63a9..d78643ec3b7e 100644 Binary files a/platform/icons/src/nodes/pluginLogo.png and b/platform/icons/src/nodes/pluginLogo.png differ diff --git a/platform/icons/src/nodes/pluginLogo@2x.png b/platform/icons/src/nodes/pluginLogo@2x.png index 5be74b877a49..d2f59cf75ac3 100644 Binary files a/platform/icons/src/nodes/pluginLogo@2x.png and b/platform/icons/src/nodes/pluginLogo@2x.png differ diff --git a/platform/icons/src/nodes/pluginRestart.png b/platform/icons/src/nodes/pluginRestart.png index 28c7c87de36f..ee8f9d36d7c3 100644 Binary files a/platform/icons/src/nodes/pluginRestart.png and b/platform/icons/src/nodes/pluginRestart.png differ diff --git a/platform/icons/src/nodes/pluginRestart@2x.png b/platform/icons/src/nodes/pluginRestart@2x.png index 0ff45a47f28b..bf979ea973e6 100644 Binary files a/platform/icons/src/nodes/pluginRestart@2x.png and b/platform/icons/src/nodes/pluginRestart@2x.png differ diff --git a/platform/icons/src/nodes/pluginUpdate.png b/platform/icons/src/nodes/pluginUpdate.png index 8e8789b88a19..11f94ea40057 100644 Binary files a/platform/icons/src/nodes/pluginUpdate.png and b/platform/icons/src/nodes/pluginUpdate.png differ diff --git a/platform/icons/src/nodes/pluginUpdate@2x.png b/platform/icons/src/nodes/pluginUpdate@2x.png index 9400965a80fa..84da4e550414 100644 Binary files a/platform/icons/src/nodes/pluginUpdate@2x.png and b/platform/icons/src/nodes/pluginUpdate@2x.png differ diff --git a/platform/icons/src/nodes/pluginnotinstalled.png b/platform/icons/src/nodes/pluginnotinstalled.png index 07dcfa33c261..a5a2894e05c6 100644 Binary files a/platform/icons/src/nodes/pluginnotinstalled.png and b/platform/icons/src/nodes/pluginnotinstalled.png differ diff --git a/platform/icons/src/nodes/pluginnotinstalled@2x.png b/platform/icons/src/nodes/pluginnotinstalled@2x.png index a077bb251cbe..97fbac2a7fa0 100644 Binary files a/platform/icons/src/nodes/pluginnotinstalled@2x.png and b/platform/icons/src/nodes/pluginnotinstalled@2x.png differ diff --git a/platform/icons/src/nodes/pluginobsolete.png b/platform/icons/src/nodes/pluginobsolete.png index 7b44a30d100b..efe4c74be607 100644 Binary files a/platform/icons/src/nodes/pluginobsolete.png and b/platform/icons/src/nodes/pluginobsolete.png differ diff --git a/platform/icons/src/nodes/pluginobsolete@2x.png b/platform/icons/src/nodes/pluginobsolete@2x.png index 655b897135c9..5620bfc4070d 100644 Binary files a/platform/icons/src/nodes/pluginobsolete@2x.png and b/platform/icons/src/nodes/pluginobsolete@2x.png differ diff --git a/platform/icons/src/nodes/ppFile.png b/platform/icons/src/nodes/ppFile.png index 14b79f93c93d..f5d47c755007 100644 Binary files a/platform/icons/src/nodes/ppFile.png and b/platform/icons/src/nodes/ppFile.png differ diff --git a/platform/icons/src/nodes/ppFile@2x.png b/platform/icons/src/nodes/ppFile@2x.png index 41a8bc8447ee..01324d8fc52e 100644 Binary files a/platform/icons/src/nodes/ppFile@2x.png and b/platform/icons/src/nodes/ppFile@2x.png differ diff --git a/platform/icons/src/nodes/ppJdk.png b/platform/icons/src/nodes/ppJdk.png index 92cee080d156..53dd3c1c1814 100644 Binary files a/platform/icons/src/nodes/ppJdk.png and b/platform/icons/src/nodes/ppJdk.png differ diff --git a/platform/icons/src/nodes/ppJdk@2x.png b/platform/icons/src/nodes/ppJdk@2x.png index ffa77f6a1d18..80f34c9a94ae 100644 Binary files a/platform/icons/src/nodes/ppJdk@2x.png and b/platform/icons/src/nodes/ppJdk@2x.png differ diff --git a/platform/icons/src/nodes/ppLibFolder.png b/platform/icons/src/nodes/ppLibFolder.png index 14260c960ee7..a95340e1c735 100644 Binary files a/platform/icons/src/nodes/ppLibFolder.png and b/platform/icons/src/nodes/ppLibFolder.png differ diff --git a/platform/icons/src/nodes/ppLibFolder@2x.png b/platform/icons/src/nodes/ppLibFolder@2x.png index 234f2c7f384e..c000110d54ad 100644 Binary files a/platform/icons/src/nodes/ppLibFolder@2x.png and b/platform/icons/src/nodes/ppLibFolder@2x.png differ diff --git a/platform/icons/src/nodes/resourceBundle.png b/platform/icons/src/nodes/resourceBundle.png index 008c8c55f82e..1fb08dde3a24 100644 Binary files a/platform/icons/src/nodes/resourceBundle.png and b/platform/icons/src/nodes/resourceBundle.png differ diff --git a/platform/icons/src/nodes/resourceBundle@2x.png b/platform/icons/src/nodes/resourceBundle@2x.png index 59c143f7d8be..4135c651f690 100644 Binary files a/platform/icons/src/nodes/resourceBundle@2x.png and b/platform/icons/src/nodes/resourceBundle@2x.png differ diff --git a/platform/icons/src/nodes/sourceFolder.png b/platform/icons/src/nodes/sourceFolder.png index 1493b3143fa4..7c35ef907a73 100644 Binary files a/platform/icons/src/nodes/sourceFolder.png and b/platform/icons/src/nodes/sourceFolder.png differ diff --git a/platform/icons/src/nodes/sourceFolder@2x.png b/platform/icons/src/nodes/sourceFolder@2x.png index 5f16bc935ddb..5f0558dee6a1 100644 Binary files a/platform/icons/src/nodes/sourceFolder@2x.png and b/platform/icons/src/nodes/sourceFolder@2x.png differ diff --git a/platform/icons/src/nodes/unknownJdk.png b/platform/icons/src/nodes/unknownJdk.png index 2ed600cb04bd..a6f652149ddb 100644 Binary files a/platform/icons/src/nodes/unknownJdk.png and b/platform/icons/src/nodes/unknownJdk.png differ diff --git a/platform/icons/src/nodes/unknownJdk@2x.png b/platform/icons/src/nodes/unknownJdk@2x.png index b91030d704f9..e78e3d546110 100644 Binary files a/platform/icons/src/nodes/unknownJdk@2x.png and b/platform/icons/src/nodes/unknownJdk@2x.png differ diff --git a/platform/icons/src/nodes/upFolder.png b/platform/icons/src/nodes/upFolder.png index 20b91117d5ae..2de5904746e4 100644 Binary files a/platform/icons/src/nodes/upFolder.png and b/platform/icons/src/nodes/upFolder.png differ diff --git a/platform/icons/src/nodes/upFolder@2x.png b/platform/icons/src/nodes/upFolder@2x.png index 4135152c1051..e17d9b4f4020 100644 Binary files a/platform/icons/src/nodes/upFolder@2x.png and b/platform/icons/src/nodes/upFolder@2x.png differ diff --git a/platform/icons/src/nodes/webFolder.png b/platform/icons/src/nodes/webFolder.png index af559d0b70bb..bdbce350cb00 100644 Binary files a/platform/icons/src/nodes/webFolder.png and b/platform/icons/src/nodes/webFolder.png differ diff --git a/platform/icons/src/nodes/webFolder@2x.png b/platform/icons/src/nodes/webFolder@2x.png index a2448c2a2c77..9af7e789d24c 100644 Binary files a/platform/icons/src/nodes/webFolder@2x.png and b/platform/icons/src/nodes/webFolder@2x.png differ diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsPassFactory.java b/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsPassFactory.java index 94f286546a72..01fd4e930861 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsPassFactory.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hints/ParameterHintsPassFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -161,7 +161,9 @@ public class ParameterHintsPassFactory extends AbstractProjectComponent implemen int offset = inlay.getOffset(); Caret caret = caretMap.get(offset); if (caret == null) return false; - char afterCaret = myEditor.getDocument().getImmutableCharSequence().charAt(offset); + CharSequence text = myEditor.getDocument().getImmutableCharSequence(); + if (offset >= text.length()) return false; + char afterCaret = text.charAt(offset); if (afterCaret != ',' && afterCaret != ')') return false; VisualPosition afterInlayPosition = myEditor.offsetToVisualPosition(offset, true, false); // check whether caret is to the right of inlay diff --git a/platform/lang-impl/src/com/intellij/ide/util/projectWizard/ProjectSettingsStepBase.java b/platform/lang-impl/src/com/intellij/ide/util/projectWizard/ProjectSettingsStepBase.java index 639b52d15cc5..6273dfad4860 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/projectWizard/ProjectSettingsStepBase.java +++ b/platform/lang-impl/src/com/intellij/ide/util/projectWizard/ProjectSettingsStepBase.java @@ -311,8 +311,5 @@ public class ProjectSettingsStepBase extends AbstractActionWithPanel implements } @Override - public void dispose() { - myProjectGenerator = null; - myCallback = null; - } + public void dispose() {} } diff --git a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/RtfTransferableData.java b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/RtfTransferableData.java index da7e0aa0d493..2757120560e4 100644 --- a/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/RtfTransferableData.java +++ b/platform/lang-impl/src/com/intellij/openapi/editor/richcopy/view/RtfTransferableData.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -34,7 +34,8 @@ public class RtfTransferableData extends AbstractSyntaxAwareInputStreamTransfera @NotNull private static final String HEADER_PREFIX = "{\\rtf1\\ansi\\deff0"; @NotNull private static final String HEADER_SUFFIX = "}"; @NotNull private static final String TAB = "\\tab\n"; - @NotNull private static final String NEW_LINE = "\\line\n"; + // using undocumented way to denote line break on Mac (used e.g. by TextEdit) to resolve IDEA-165337 + @NotNull private static final String NEW_LINE = SystemInfo.isMac ? "\\\n" : "\\line\n"; @NotNull private static final String BOLD = "\\b"; @NotNull private static final String ITALIC = "\\i"; diff --git a/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java b/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java index ba2ff680f169..58b3fe2ca098 100644 --- a/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java +++ b/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java @@ -3266,6 +3266,7 @@ public class JBTabsImpl extends JComponent TabInfo dropInfo = myDropInfo; myDropInfo = null; myShowDropLocation = true; + myForcedRelayout = true; setDropInfoIndex(-1); if (!isDisposed()) { removeTab(dropInfo, null, false, true); diff --git a/platform/platform-impl/src/com/intellij/ide/impl/DataValidator.java b/platform/platform-impl/src/com/intellij/ide/impl/DataValidator.java index 00e6025041a0..c7c006e9e168 100644 --- a/platform/platform-impl/src/com/intellij/ide/impl/DataValidator.java +++ b/platform/platform-impl/src/com/intellij/ide/impl/DataValidator.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -17,6 +17,7 @@ package com.intellij.ide.impl; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.Editor; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; @@ -48,6 +49,12 @@ public abstract class DataValidator { return project.isDisposed() ? project : null; } }; + private static final DataValidator EDITOR_VALIDATOR = new DataValidator() { + @Override + public Editor findInvalid(final String dataId, final Editor editor, final Object dataSource) { + return editor.isDisposed() ? editor : null; + } + }; @Nullable public abstract T findInvalid(final String dataId, T data, final Object dataSource); @@ -73,6 +80,7 @@ public abstract class DataValidator { ourValidators.put(CommonDataKeys.VIRTUAL_FILE.getName(), VIRTUAL_FILE_VALIDATOR); ourValidators.put(CommonDataKeys.VIRTUAL_FILE_ARRAY.getName(), new ArrayValidator<>(VIRTUAL_FILE_VALIDATOR)); ourValidators.put(CommonDataKeys.PROJECT.getName(), PROJECT_VALIDATOR); + ourValidators.put(CommonDataKeys.EDITOR.getName(), EDITOR_VALIDATOR); } public static class ArrayValidator extends DataValidator { diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java index 12e33ddab5ca..1ae915766153 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/EditorWindow.java @@ -653,18 +653,22 @@ public class EditorWindow { } } else { + int indexToInsert; + Integer initialIndex = editor.getFile().getUserData(INITIAL_INDEX_KEY); - int indexToInsert = 0; - if (Registry.is("ide.editor.tabs.open.at.the.end")) { + if (initialIndex != null) { + indexToInsert = initialIndex; + } + else if (Registry.is("ide.editor.tabs.open.at.the.end")) { indexToInsert = myTabbedPane.getTabCount(); - } else { - if (initialIndex == null) { - int selectedIndex = myTabbedPane.getSelectedIndex(); - if (selectedIndex >= 0) { - indexToInsert = selectedIndex + 1; - } - } else { - indexToInsert = initialIndex; + } + else { + int selectedIndex = myTabbedPane.getSelectedIndex(); + if (selectedIndex >= 0) { + indexToInsert = selectedIndex + 1; + } + else { + indexToInsert = 0; } } diff --git a/platform/util/src/com/intellij/util/ui/EmptyIcon.java b/platform/util/src/com/intellij/util/ui/EmptyIcon.java index 102314ef7e42..8b9eb2538054 100644 --- a/platform/util/src/com/intellij/util/ui/EmptyIcon.java +++ b/platform/util/src/com/intellij/util/ui/EmptyIcon.java @@ -157,8 +157,8 @@ public class EmptyIcon extends JBUI.CachingScalableJBIcon { final EmptyIcon icon = (EmptyIcon)o; - if (scaleVal(height, Scale.EFFECTIVE) != icon.scaleVal(height, Scale.EFFECTIVE)) return false; - if (scaleVal(width, Scale.EFFECTIVE) != icon.scaleVal(width, Scale.EFFECTIVE)) return false; + if (scaleVal(height, Scale.EFFECTIVE) != icon.scaleVal(icon.height, Scale.EFFECTIVE)) return false; + if (scaleVal(width, Scale.EFFECTIVE) != icon.scaleVal(icon.width, Scale.EFFECTIVE)) return false; return true; } diff --git a/platform/util/src/com/intellij/util/ui/ImageUtil.java b/platform/util/src/com/intellij/util/ui/ImageUtil.java index 69910bdde997..cc2a2b10b01f 100644 --- a/platform/util/src/com/intellij/util/ui/ImageUtil.java +++ b/platform/util/src/com/intellij/util/ui/ImageUtil.java @@ -37,8 +37,32 @@ public class ImageUtil { return (BufferedImage)image; } + final int width = image.getWidth(null); + final int height = image.getHeight(null); + if (width <= 0 || height <= 0) { + // avoiding NPE + return new BufferedImage(Math.max(width, 1), Math.max(height, 1), BufferedImage.TYPE_INT_ARGB) { + @Override + public int getWidth() { + return Math.max(width, 0); + } + @Override + public int getHeight() { + return Math.max(height, 0); + } + @Override + public int getWidth(ImageObserver observer) { + return Math.max(width, 0); + } + @Override + public int getHeight(ImageObserver observer) { + return Math.max(height, 0); + } + }; + } + @SuppressWarnings("UndesirableClassUsage") - BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB); + BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = bufferedImage.createGraphics(); g.drawImage(image, 0, 0, null); g.dispose(); diff --git a/platform/util/src/com/intellij/util/ui/JBUI.java b/platform/util/src/com/intellij/util/ui/JBUI.java index df42683a8714..2f0fa3628695 100644 --- a/platform/util/src/com/intellij/util/ui/JBUI.java +++ b/platform/util/src/com/intellij/util/ui/JBUI.java @@ -215,11 +215,12 @@ public class JBUI { */ public static float sysScale(@Nullable Graphics2D g) { if (UIUtil.isJDKManagedHiDPI() && g != null) { - if (g.getDeviceConfiguration() instanceof BufferedImageGraphicsConfig) { + GraphicsConfiguration conf = g.getDeviceConfiguration(); + if (conf instanceof BufferedImageGraphicsConfig) { // take BI's scale directly, not inspecting the device return (float)g.getTransform().getScaleX(); } - return sysScale(g.getDeviceConfiguration().getDevice()); + if (conf != null) return sysScale(conf.getDevice()); } return sysScale(); } diff --git a/python/src/com/jetbrains/python/testing/PythonTestCommandLineStateBase.java b/python/src/com/jetbrains/python/testing/PythonTestCommandLineStateBase.java index eca55db76acb..49b74c2c0798 100644 --- a/python/src/com/jetbrains/python/testing/PythonTestCommandLineStateBase.java +++ b/python/src/com/jetbrains/python/testing/PythonTestCommandLineStateBase.java @@ -85,7 +85,7 @@ public abstract class PythonTestCommandLineStateBase extends PythonCommandLineSt } protected PythonTRunnerConsoleProperties createConsoleProperties(Executor executor) { - return new PythonTRunnerConsoleProperties(myConfiguration, executor, false, getTestLocator()); + return new PythonTRunnerConsoleProperties(myConfiguration, executor, true, getTestLocator()); } @Nullable