From 93ea30094f557bfe7dd17c4221bc7ac434795fd4 Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Mon, 9 Jan 2017 15:09:30 +0300 Subject: [PATCH 01/14] Fix NPE, IAE --- .../src/com/intellij/util/ui/ImageUtil.java | 26 ++++++++++++++++++- .../util/src/com/intellij/util/ui/JBUI.java | 5 ++-- 2 files changed, 28 insertions(+), 3 deletions(-) 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(); } From 30ade388b064b3430151d4d4ba20cafaed400194 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Mon, 9 Jan 2017 13:45:59 +0100 Subject: [PATCH 02/14] add a test for abbreviate package names --- .../PackagesTreeStructureTest.java | 71 ++++++++++--------- 1 file changed, 38 insertions(+), 33 deletions(-) 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); } From 2d2392df55a4b7b089196e5f7d10ce68ac5bd9d3 Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Mon, 9 Jan 2017 15:43:14 +0300 Subject: [PATCH 03/14] Fix EmptyIcon.equals(..) --- platform/util/src/com/intellij/util/ui/EmptyIcon.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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; } From 19044af06515d4cd3c22d582e537f727854ddc4d Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 9 Jan 2017 14:52:17 +0300 Subject: [PATCH 04/14] IDEA-163839 ui: do not ignore drop position on editor's tabs DnD --- .../openapi/fileEditor/impl/EditorWindow.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) 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; } } From 1812ec26b4acfe96f671f9b1e62d84abf718aab2 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 9 Jan 2017 15:25:01 +0300 Subject: [PATCH 05/14] IDEA-163839 ui: fix tabs layout jumping on editor's tabs DnD --- .../platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java | 1 + 1 file changed, 1 insertion(+) 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); From ca37232205af63bdec240232303a69e770c64f43 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Mon, 9 Jan 2017 14:13:10 +0100 Subject: [PATCH 06/14] update download icons --- platform/icons/src/actions/download.png | Bin 310 -> 268 bytes platform/icons/src/actions/download@2x.png | Bin 665 -> 627 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/platform/icons/src/actions/download.png b/platform/icons/src/actions/download.png index 3df555ee6a48e432afc44cebc66b345c3c41f3cf..d285a0ea256f9dfbd2013288311c7c4b2bb57c92 100644 GIT binary patch delta 240 zcmVxGWCN_$hW~fmkqE{hHpvEfH8;-5(CMB)Zlf2#vJDc-KF0D4Oa*JH)&cI1jZmXNDL&0)df{m zRVY|%v3rB=Dxd#)t9`*3#0H6>t3x*6KN{|^oZ-7zYq{Hh5C*Y9V(9Ad82~oKe5%)C q5XPn%mjMh!V%ix%5~iL3lwbhdSb)DRbJV#20000B!B%$L_t(|+GF_t|33pZtT)xc%wW3H9w4obOAQD!;FC08X*PrQHN1h8-1|POwANk*Cq4zGb3@}>af7oJO#DBv@zGuiX zKyRVfVUsl>|3Ng-2FP`pv@7(Q|5ur6`(J0V=YNA${$Lu!2Y-nJ(Uy>%ZpIQ<9FAU;rh9kM!n27vIgyxKxtwq(R%7#>|hqT$BkH za4(#*6kr7spQbSN{SFsp!UbHVxFz383gYG@>fdg2Q6^mA^s_-r-d7jlY-0koueZ1; z6E4sihW4=a1y0U|!TB@-uCfZ=Y8s?>mkjAc z4oR>!f{HnYk*#qq%4nuFPit-e1U-*}tV9TUpU1#c(SLz$1R*nTgf~ag4q9`dJK&g= zo2ZDh6b1L|B>3NFLH;;W44PN48*J9FeF+PNLX)Ey*wr&DfpcDg{*?sy-ey3m=ZbRU zGIqjdjMiSA@Cx8QD$JB#oiGFSEb_2ylV<+RcHHkE1$Ij$*T+r&#t^oncikQ?Qedyd z+L-C9rBjj6vz^053+$Cx&6~vT;awFt@xTpS4?W;237e z03*nxoK~xw))lvwv&!R6>|ABX1b>02b`<%hXT9MK5P@5OO z?b-A7{?6WaI|=|$w39y`U}L5@Ay2TjMSv5m7PVjl)iVn)F@IBne%jwDtH9Zn^Bu-l zo^SfpFsNVJfr*<_vI-!U^5svqY8Z@JFLW~X!J_l+b+B!XLvMBzR4?p% zvI-arKEd`T0`{G2V6KFqC+UW+n2C~2K$rE*o5|N(cOo#bJr4Su7wG5KDcJ;iRxdp6 zuZCdY^;J>8SbqutyEr%_n?QHUE%a4_VA{SSV%!)5F5wbn6X23Vf`J^`w;2*KYy?2H z%*!XhuJD3x-4DIhpa{m8lTCnLb_&{(7j%_?2*#L`T;Svb%>n@$QO@guN(_Q#%>&x9 zPXuGkVeQ9$+|jbYsfXHQ$_2xc@`(ZJoQ|IZD(L`qaeo9f>!TtVV-9PLy*P_I{^|1e0@pX7c1Jen!r Date: Mon, 9 Jan 2017 14:13:55 +0100 Subject: [PATCH 07/14] more contrast nodes icons --- platform/icons/src/nodes/DataSource.png | Bin 131 -> 132 bytes platform/icons/src/nodes/DataSource@2x.png | Bin 184 -> 185 bytes platform/icons/src/nodes/Module.png | Bin 122 -> 109 bytes platform/icons/src/nodes/Module@2x.png | Bin 158 -> 145 bytes platform/icons/src/nodes/TreeClosed.png | Bin 94 -> 94 bytes platform/icons/src/nodes/TreeClosed@2x.png | Bin 127 -> 129 bytes platform/icons/src/nodes/TreeOpen.png | Bin 94 -> 94 bytes platform/icons/src/nodes/TreeOpen@2x.png | Bin 127 -> 129 bytes platform/icons/src/nodes/artifact.png | Bin 221 -> 221 bytes platform/icons/src/nodes/artifact@2x.png | Bin 335 -> 338 bytes platform/icons/src/nodes/copyOfFolder.png | Bin 125 -> 125 bytes platform/icons/src/nodes/copyOfFolder@2x.png | Bin 184 -> 184 bytes platform/icons/src/nodes/cvs_global.png | Bin 203 -> 203 bytes platform/icons/src/nodes/cvs_global@2x.png | Bin 364 -> 371 bytes platform/icons/src/nodes/cvs_roots.png | Bin 241 -> 242 bytes platform/icons/src/nodes/cvs_roots@2x.png | Bin 434 -> 442 bytes platform/icons/src/nodes/extractedFolder.png | Bin 177 -> 173 bytes platform/icons/src/nodes/extractedFolder@2x.png | Bin 251 -> 250 bytes platform/icons/src/nodes/folder.png | Bin 94 -> 94 bytes platform/icons/src/nodes/folder@2x.png | Bin 127 -> 129 bytes platform/icons/src/nodes/homeFolder.png | Bin 195 -> 194 bytes platform/icons/src/nodes/homeFolder@2x.png | Bin 292 -> 292 bytes platform/icons/src/nodes/ideaModule.png | Bin 133 -> 133 bytes platform/icons/src/nodes/ideaModule@2x.png | Bin 175 -> 175 bytes platform/icons/src/nodes/ideaProject.png | Bin 116 -> 117 bytes platform/icons/src/nodes/ideaProject@2x.png | Bin 155 -> 154 bytes platform/icons/src/nodes/inspectionResults.png | Bin 115 -> 116 bytes .../icons/src/nodes/inspectionResults@2x.png | Bin 152 -> 152 bytes platform/icons/src/nodes/jarDirectory.png | Bin 111 -> 111 bytes platform/icons/src/nodes/jarDirectory@2x.png | Bin 157 -> 157 bytes platform/icons/src/nodes/javaDocFolder.png | Bin 136 -> 127 bytes platform/icons/src/nodes/javaDocFolder@2x.png | Bin 201 -> 200 bytes platform/icons/src/nodes/jsr45.png | Bin 283 -> 296 bytes platform/icons/src/nodes/jsr45@2x.png | Bin 564 -> 597 bytes platform/icons/src/nodes/keymapAnt.png | Bin 171 -> 169 bytes platform/icons/src/nodes/keymapAnt@2x.png | Bin 301 -> 301 bytes platform/icons/src/nodes/keymapEditor.png | Bin 179 -> 188 bytes platform/icons/src/nodes/keymapEditor@2x.png | Bin 298 -> 313 bytes platform/icons/src/nodes/keymapMainMenu.png | Bin 136 -> 139 bytes platform/icons/src/nodes/keymapMainMenu@2x.png | Bin 199 -> 206 bytes platform/icons/src/nodes/keymapOther.png | Bin 158 -> 153 bytes platform/icons/src/nodes/keymapOther@2x.png | Bin 248 -> 249 bytes platform/icons/src/nodes/keymapTools.png | Bin 129 -> 129 bytes platform/icons/src/nodes/keymapTools@2x.png | Bin 194 -> 194 bytes platform/icons/src/nodes/moduleGroup.png | Bin 111 -> 111 bytes platform/icons/src/nodes/moduleGroup@2x.png | Bin 164 -> 150 bytes platform/icons/src/nodes/newFolder.png | Bin 104 -> 94 bytes platform/icons/src/nodes/newFolder@2x.png | Bin 139 -> 129 bytes platform/icons/src/nodes/package.png | Bin 120 -> 115 bytes platform/icons/src/nodes/package@2x.png | Bin 175 -> 172 bytes platform/icons/src/nodes/plugin.png | Bin 144 -> 159 bytes platform/icons/src/nodes/plugin@2x.png | Bin 220 -> 280 bytes platform/icons/src/nodes/pluginJB.png | Bin 164 -> 181 bytes platform/icons/src/nodes/pluginJB@2x.png | Bin 247 -> 302 bytes platform/icons/src/nodes/pluginLogo.png | Bin 220 -> 280 bytes platform/icons/src/nodes/pluginLogo@2x.png | Bin 366 -> 463 bytes platform/icons/src/nodes/pluginRestart.png | Bin 185 -> 187 bytes platform/icons/src/nodes/pluginRestart@2x.png | Bin 332 -> 323 bytes platform/icons/src/nodes/pluginUpdate.png | Bin 145 -> 158 bytes platform/icons/src/nodes/pluginUpdate@2x.png | Bin 219 -> 274 bytes platform/icons/src/nodes/pluginnotinstalled.png | Bin 222 -> 217 bytes .../icons/src/nodes/pluginnotinstalled@2x.png | Bin 412 -> 414 bytes platform/icons/src/nodes/pluginobsolete.png | Bin 158 -> 172 bytes platform/icons/src/nodes/pluginobsolete@2x.png | Bin 247 -> 295 bytes platform/icons/src/nodes/ppFile.png | Bin 94 -> 94 bytes platform/icons/src/nodes/ppFile@2x.png | Bin 127 -> 129 bytes platform/icons/src/nodes/ppJdk.png | Bin 151 -> 149 bytes platform/icons/src/nodes/ppJdk@2x.png | Bin 242 -> 234 bytes platform/icons/src/nodes/ppLibFolder.png | Bin 145 -> 128 bytes platform/icons/src/nodes/ppLibFolder@2x.png | Bin 201 -> 169 bytes platform/icons/src/nodes/resourceBundle.png | Bin 148 -> 132 bytes platform/icons/src/nodes/resourceBundle@2x.png | Bin 188 -> 164 bytes platform/icons/src/nodes/sourceFolder.png | Bin 130 -> 115 bytes platform/icons/src/nodes/sourceFolder@2x.png | Bin 185 -> 172 bytes platform/icons/src/nodes/unknownJdk.png | Bin 220 -> 208 bytes platform/icons/src/nodes/unknownJdk@2x.png | Bin 350 -> 332 bytes platform/icons/src/nodes/upFolder.png | Bin 149 -> 131 bytes platform/icons/src/nodes/upFolder@2x.png | Bin 213 -> 179 bytes platform/icons/src/nodes/webFolder.png | Bin 149 -> 131 bytes platform/icons/src/nodes/webFolder@2x.png | Bin 196 -> 180 bytes 80 files changed, 0 insertions(+), 0 deletions(-) diff --git a/platform/icons/src/nodes/DataSource.png b/platform/icons/src/nodes/DataSource.png index 6fad36d3411c6ac6d2eaae3fff38c3d9fc645fa9..3a5766909dab460804fb78c7c3d89a2069eab741 100644 GIT binary patch delta 103 zcmZo>Y+;;uunKD>*?z=9v)%5=+?{3YeC%JviEYhoLK(Q6=u85r-3c`%v$p9mB(+aSJ#N;Vp|G#hE%+ouOu_|;261MFxW#D>sf&27FaUw4tDnm{ Hr-UW|98o69 delta 102 zcmZo+Y-XIG67S{d;uunKD>*?z?m*)0=9v)%5=+?{3YeC%Jvh3>wBeBhOJ{hApS3fG zunEIWB?B!7QNL_t(|+GAiC1*2dTK!L-y2Q!JlZ9r@}kPd+1gn@Pd^<m z1E}i=G95rR9(BObb-+LuM1#ix6`j-0Py-Kr2jB`(ba_Jjq3eLrG=Q#uAfliFgp+4& zIs?KmJ`g{HVqE-T;(!5Fo&*76Oy$e0`hHetajlo|lS`RK00>QX!g;Kf78 x0FWAoZ4Vrgp=*2N55X}b3d+Bo(|cGR+8Vl=p8aDi{ZKIIby45hM; z%a~6bTg)d>dSC^!o2qpFBg=f}_j~ OK;Y@>=d#Wzp$Pyhax4x2 delta 129 zcmbQpIFE6HN>!?-i(^Q|t>gp=*2M`M8X`}dzj$=`OThs(r4KR+WpWIRRAX&D4 g<`t}NvIb8W7`BLtw>!=~Z_5A#p00i_>zopr01&e*49*7*cWT?YWJd3<^A~7j<6voqNc%tts1LirB5w>H-I?cl?_v_|_}; y@uPiy6B~;A*nTLpH0V3AoM2{vf<5dCzqWCv{(pVxTgPS=kf5ilpUXO@geCwD)+c5F delta 97 zcmZoC~?dIv?7*cWT?YWJd3<^A~7vDT{c&Ger+oP7K4E^~IEbkxuN_TVFed*VZ w9qWQs9?V(H_>Y6}LAL*49*7*cWT?YWJd3<^A~7j<6voqNc%tts1LirB5w>H-I?cl?_v_|_}; y@uPiy6B~;A*nTLpH0V3AoM2{vf<5dCzqWCv{(pVxTgPS=kf5ilpUXO@geCwD)+c5F delta 97 zcmZoC~?dIv?7*cWT?YWJd3<^A~7vDT{c&Ger+oP7K4E^~IEbkxuN_TVFed*VZ w9qWQs9?V(H_>Y6}LALa{~~cf#PK#4NyanHN)jm3_;V3Vh9$^aCu|{mXTpV z14`hbJCT4F8nDIyERc{i!vhf%uu%D#c%u=EW*A-$iekLc2rErQ+&B!#CnY7K8 gUVs^rPtzO=0D`nI3N#5>?*IS*07*qoM6N<$g1I8Jdd7$)KVr0ODuJ6}5Qs9cRPzF%KgntjZR_&6YqM7p2F(rfs zA@Hr9CqWNOqZpA0!FduMct`?)V-gX#Pr_Vq3sCQt0O21J)`CUrl}ms%f%z7|r?(?R z+YWjA-th}i35o3eQj1V>8c^d9wDblh) zhR7&6BqLdlf4&2sBSo?Fb)4S=?6a%tKMsuRd>beiO8qVP-K4C911~EPfR~X-z-1*s zxQql%rWo)wGo?8UK0jV3N^2x~23(o?cAeu0e4;Fr4wSIroqwsFc1cjtNO_vr63T!O z_*T!8pog_pj7Y@bJc$52CV{{)i3B_(VK2A^sP{{N@DB-R!J_q(Pk=Rn{T9HdccWw5 z4te|5^9xW3jqH7?MW{IqDEBthd%9q*Ml|MX#UZ$zK1(b197YJ-mDqn6ImdCsfNxPb z?*p~DWT5at;w?smN(_>B!jyy@9FUNQMNKQ-Phco8vYh?E`x0000n!`Ri7Ck}C4i=3f&N~_+c$aYYHzxF~dC4Od!*gWX6bXhyyg&AM p_b^6$T)`M(#9-^icB6rjmErEn4$sneC-fMAz|+;wWt~$(69AYbAO-*c delta 85 zcmb=eouC^a5t4B26EAPX2KJ?F4FwFEZ3PS)nLLE$m=8)sURKkwVC~@5Fl1=?{IPPn p1oMVRfy^sX7^|t^9hv|D diff --git a/platform/icons/src/nodes/copyOfFolder@2x.png b/platform/icons/src/nodes/copyOfFolder@2x.png index 9567ab87b32f83a90fa3516266713a034028c6f9..7c43be745b3ffb8fb2985ef9d84fcb2a32b90557 100644 GIT binary patch delta 145 zcmV;C0B--d0k{E>FMl||tmPYK5`o)**m58p0K*9b?EvaKf(!@HCM2Ma;R0ecP<#V% zF`14-!IU~k4VnO{=K!GK86xmzAa+0sl^S|G0EW{jbp)jj0O1Bo5;rv*K$at@?Es?j zr~^hFFzSF&2aGy^m@<0Q0izBWSO<)P5eooXLJ71q?Vv;e015yANkvXXu0mjf&qOpz delta 145 zcmV;C0B--d0k{E>FMp!|2bi^dLjw`G0Ei6+(g83WFwhR5z9YzR0Bu47>KG0nRsh8} z5GRo7I225&gA||%ka`XP3T`3-&jDf!q)^GAw*z1}l2S)d>HrYVrzCMx!vSPDg4zxs z8jm_))B&Ro7S?PhT3Wa#Ivy&l#SJEPz}fm zH$z>r8H*t{P)que4OkA9On_n#yB~-{uowWt3CITQ$6~;K9N__%!)5@6BBBgHG6>np z{b;Vi>xB?3foOvx5JNBmk>Y4XGsp&qle5W9&M>d^Q<5hnKpI}6Np1xIo24hh)B1kf P00000NkvXXu0mjf$4x=5 delta 161 zcmV;S0AByg0m}i9GJiRrBF#X&iBwIxAWdkv3M5WQV+s&2huUfZ#1pX?l!Dc3Pz}fm zmqT5$9E%|qP)pj74VVL!jD%tkyA6o_uowWtk;n#Y!eYQC9N__%!)5@6BBBgHG6>np zZD_8+>jgh7foOpv5dAO$k>Y4XGspsmlT*k|&M>dEQIaRbKpI}6Np1xIPSYZy5(aLk P00000NkvXXu0mjfX{0|X diff --git a/platform/icons/src/nodes/cvs_global@2x.png b/platform/icons/src/nodes/cvs_global@2x.png index 4ebe0ba4a7c6b457f58a45fb7ece3cb0207d9d0a..551464bf747bda5f426b6031b5501064455b0753 100644 GIT binary patch delta 344 zcmV-e0jK`#0`mfpB!4?gd>-~BTRmlNsRq`qVZ1Um)fS?780Bw^x z*uG(<1W3RXAvah6>a-9rAdql#v$URfNJ0@J4pj}h(lw}!L4UY%qKI!;0=YAV$oY;z zMf}bN_av?g3D5+CMuZ{?(4MLh6xYv~d=l?}c9jr{dADReB+{t@``w7o`-D&!1mnLZ z2w1IZNfn@|0%9RJBS26EMDfo8R7yt-mD-R!2|eU2B7o!jtYyfEji^m+L}+`UUIT&*M;2e3W<1ZA-R88sp|uf(kgFxTXWL@0000b4oN6N#Hp%5SGoqZF$h;q6!8s9Ab)qJ5IH|EsEFU$;GV=) zApx3T(1=h(0oqeFg5vralTYIP&#n?eF&~z!heSG6V80vjd7lspgJAr(1Ob~>EvW(& zRX{8RR|E*EfGGZ1fJ*6zp;8;NC!vR&MFenspS27bu@SYYjRTj6COm?@H{TBNDH6BfC7rqE~cE%yUjd40k?KU4Qp*$~>)F)R>a{Q{Aq>@Vb(_ jT_F*#JtWT$D|LMUMjaOj>lZ@<00000NkvXXu0mjfTL_K3 diff --git a/platform/icons/src/nodes/cvs_roots.png b/platform/icons/src/nodes/cvs_roots.png index 5de59238c648eaabbc07dd949f4dbb7807781b35..6e5913b444381a01cf07f265fe8c70866f25383f 100644 GIT binary patch delta 214 zcmV;{04e|R0rCNmB!9U{L_t(|+GAj#HkiC{wJ{L)0Pz_#3=%UYq`3jAcqS10LJc#9 zvS&i&ig9T!hAQxdiQQc6>;c5fk<|ENH3Vu4Tr*IU4G`}~!u>$3f@X*@vH>9f%>*hk zfNCfQ;t(`L_Cw{%q2B31HUMlp$hl~?CSWmSIm{L41{fo0L{GL6-GFA8m(dMS!{KD2 z4S)q;2svJW1)>TNZzd-Y2}R?6ywQl33Vo5qkrNZngoGtElAe^Ql9|W>0AAI1*x9b# QGXMYp07*qoM6N<$g8TYgKL7v# delta 213 zcmV;`04o3T0r3HlB!9R`L_t(|+O1PN3d1lA%~f&$?b)?w@1EVe58y+TY#p)|-=?>z z6rPF@Hf>D|4}z@s^zq9yU48DylLT2%12jh8$O*|szz`#R7u;<<@`ePq*z3V8*j)}c zMNs8K7SbZ94n;5r5%K~$pC%CqNw5Zyiu;6dvKKh3YrCQ9txh4bTNhD)9MM;d0@+56 z0&}P3p9O4z>&OVUMD5}jSz>%fZjk%W7+lCc?#^CG?{fvGA_S3 P00000NkvXXu0mjf0ZU-E diff --git a/platform/icons/src/nodes/cvs_roots@2x.png b/platform/icons/src/nodes/cvs_roots@2x.png index 7b7bd5911862c4fa1c5f26f103f3a40e713d5b3c..43c19b699a683a05857545438dbb3ea7362b5e04 100644 GIT binary patch delta 416 zcmV;R0bl;I1G)o{B!7WPL_t(|+U-|6s=`nZbpc853Q`McUlDkXTS%A6#?r!8uoY6g z(n^yu7CQFpAboC?EUyVN1T-y z3C(RMf^6sHu|ns=VED_G7hzVbdg&AuCayh_F6oE?;5E-TLShE;skzlR~@Oya2><(t< z>RltiuM79P)qgmo0O0D#cC*fkL*{tqGH3$4Jt+mRCKGtTD~N;-IkO)^wO+f30q)ST{YRx*gWTR+GN70s#;=^PVpBZK!|2zO5LJHoyDn7CR0000< KMNUMnLSTZo=(nf< delta 408 zcmV;J0cZZY1F{29kvOs_t@AE4fSdiUzxtM>!kyIrJ9!FJ)_ znE3=4vt`$DG*P?;)QMO=|7)al0YzN`H)o_O25_wsUfmBSy>t z88^6yw#Gh4kt2~qOp#QeM_dacAX`Rp+8ZTn%d<|vCCagMM=ty2z!9NAjEEsvF22i& z2rd~W+>3*0Gy$Dl5H^ayBMC5>Qbc%)5lV9x33i%**uw*}JDFXmcR@fr7vXczIHUmJ z>d5wNofU_&>wlTcpb3cfSPH&uCh&kjYuZWymN;zW*(+c!lu6>cM}Ufz0?g3@UQz-` zwTM!JmmEU1MX2T6JK9jYi24IAB42wE{kn=Nz`M(V_yRTc!!#q|T|mr7tQXJ?+10ah zM>I)cfMf_*Gs%GnGX#pykZS-&%uvUGp$z~uyOP1oUb#yE015yANkvXXu0mjfrU^Po delta 149 zcmV;G0BZlO0kHv)B!75GL_t(|+GAiK0A?-U@E;#$AjSZ4sx!$3O##Sz#5E(hQQWHZp(d2sr|7IY=$7 zvLP-;XfsqVc0l;UiyZP101$J_>YVSzXO1r zO+?^1KIK1a|i4Zs}%v}8WIrFigpAQqrj8X(mXn3hu^5fbYNuvq0-qmBwWfRH2LmV?yN zDjVW*1d8P}EeEhT0>g4zI{+h#qFYW62f!VH&2oA<0Op8^_=;>=JAh!FG3tO(2aJMI Z007i$OR?S9=*j>9002ovPDHLkV1i*49*7*cWT?YWJd3<^A~7j<6voqNc%tts1LirB5w>H-I?cl?_v_|_}; y@uPiy6B~;A*nTLpH0V3AoM2{vf<5dCzqWCv{(pVxTgPS=kf5ilpUXO@geCwD)+c5F delta 97 zcmZoC~?dIv?7*cWT?YWJd3<^A~7vDT{c&Ger+oP7K4E^~IEbkxuN_TVFed*VZ w9qWQs9?V(H_>Y6}LAL0B!7uXL_t(|+GAj#6>!-0Ko*F1L9r~Unk|9&IvTblR&xpvKZV-N z2gSRfVk!7Ef)w^c752|szJV8rmw|BB`jgVgav-(X41n7L)T9Q)`+@ij6oc4m$gaa? z0N9^Eg}yM2FgYZHd|}~(HPnF$8juuYGXR7eaK;LnLYx?9Kp#@w07Bw}(14){0FG-9 UVK{YX2><{907*qoM6N<$g2u~7xBvhE delta 167 zcmV;Y09gOR0mA{1B!7xYL_t(|+GAiCw7_B80|g*H55)?kYIXqP_h{IGSj`1M{2yww z02H5xiWT6~2vRs7s&M|S2EC*7H%>cM9KuwB3yc~!(K{1G}i0nFS z27vtuROk%T2$MrH$Qc$sSVJACARkFFHUmI7A7`wfDa46!1|THW4Im^w2n`qz0073# V3tsl%Zv6lN002ovPDHLkV1fd-KN|o5 diff --git a/platform/icons/src/nodes/homeFolder@2x.png b/platform/icons/src/nodes/homeFolder@2x.png index a706868a695a4753b7d41cf206a750711e1482cc..3392ee09b78b9b2600236c6f793fe696cd593ae1 100644 GIT binary patch delta 253 zcmVTFeK; z{b&}3K{2uzNDUvY;u|^0wUOkt(V~QU=>ki9@51IoXbA11YP!G@-~BMTS<5%@0`W2^ z=EW0DDb$MZ6eP>lfOtO;pMhc!TMeJXiB1t{r;PVVI4!{UDr1*wggsuAF$zpU|Kue1S zfOtNdg$YoMECx~|K&$vh4srt|c>}a4ps`4AdH=c$@5u*CO#nB1)88@PdZ zA{2AuiKYT-#diUc<%&SO9EdkTF^H{*&*4O;3moz7fMmHdl6J-D*qK1oDG=iToSJ|Z zJ>4I1X;EQi!9Dp-j5S8tSiEkntfHhqZof8Pf zHwg|vNf)FzU=ua*r~`(d11MEL>VQ!P41NcUf)N7%8%emZ-l19x00000NkvXXu0mjf DQG_1iJU5$i(6&f2z#<|!h9P4bU-eo^LP00K`}KbLh*2~7a$)eJWP delta 36 qcmZ3_xSnx>5v!tn=ibhV<|!i5f^S29T%NAW00f?{elF{r5}E+#>I`K7 diff --git a/platform/icons/src/nodes/ideaProject.png b/platform/icons/src/nodes/ideaProject.png index 94357674a957b9e322dd4d1891f2b53a86df36fe..081e99f9c1f0a9dc15597d216d271ee060b37922 100644 GIT binary patch delta 86 zcmXRZouCqE^bFAAtY> diff --git a/platform/icons/src/nodes/ideaProject@2x.png b/platform/icons/src/nodes/ideaProject@2x.png index 34c0d4ba170d8f6d03b60b2a885668ece6691873..4b0728dd639ee77f50154ea3afdb70af5014d597 100644 GIT binary patch delta 125 zcmbQuIE!(DN?D?(i(^Q|t>gp=*2N55X}b3d+Bo(|cGR+8Vl=p8aDi{ZKIIby45hM; z%a~6bTg)d>dSC^!o2mdKI;Vst00UVuYXATM delta 126 zcmbQmIGb^TN_mo}i(^Q|t>gp=*2M`T4hPpfl{OP>e9o}(vx5~w+h_J$j91E8B>5Js zQ$A6`aI@kH<6=IE(gPog4>X9oG#_I;^@%Ip;~-dU1v6Ve^9t4kw*9rgzlodK6v-Go c2z1b4W5|hcknk1$oW%eHp00i_>zopr0B(LT00000 diff --git a/platform/icons/src/nodes/inspectionResults.png b/platform/icons/src/nodes/inspectionResults.png index 0799e7dc2a24c94edf22bd3a3eebdb71cb1eb7ba..d65c281d1ff8998be0490e9b558df3f1229dd77f 100644 GIT binary patch delta 85 zcmXRenV=G2?djqeQgJIeK|&^ACABg|} delta 84 zcmXRZo}l7y<>}%WQgJIeK|(I!+9%%G8y<*w@iIKD@!~zu?ar%kiJ>c*QRTm8=t~}+ n<{#$b*8kfdIwmnFIs`K_aM$KX=5c0kVgLe9S3j3^P6J5K?Va?n(qCAHjX`#9kuM27!B?iT;N-*J4R@b(MnZf0+QRocC!v+jM N;OXk;vd$@?2>?!LDM0`L delta 111 zcmbQiID>J5K}Ldz!@)IArOgBzpEGRy>|n*v_L=<_{oeBv?7V8;+ Nz|+;wWt~$(699ftD8v8& diff --git a/platform/icons/src/nodes/jarDirectory.png b/platform/icons/src/nodes/jarDirectory.png index 4a724bfc8a367bf8f1a5255fd083c85563e43dd5..9d2a20e9d92e685d86a04ae19f38f55696bb0e24 100644 GIT binary patch delta 70 zcmd1LpP=U`l5p)4Z~BG@NnX4R581qU4|K0gXE-BJlrbZXUBORz>axDK&B_Ao?k0S( Z3=FCf{$i`5x-=Ppz|+;wWt~$(69Aki7oY$D delta 70 zcmd1LpP=U`mvHS9@9Yf^M7($z9@cpA9_U_~&TvMcC}Tz%w?d!F)Mb5do0SFF-A(u; Z7#OPCodZ=qEL+0>1fH&bF6*2UngGh=8EF6j diff --git a/platform/icons/src/nodes/jarDirectory@2x.png b/platform/icons/src/nodes/jarDirectory@2x.png index 9bedcf0cb5f64ecd0218bbf3e6b4eab149005b1d..e08a2e0c1c62c0c2170ca332b87f2d5f32e582ee 100644 GIT binary patch delta 116 zcmV-)0E_>f0i6MmFl_(|W-Z@vh6ubFh!!Bgk+7bsa&b1IWgs4j6n6 zKz9he_=C~`X+XT6UVLPWX9BSll+8f0i6MmFl}HIK*6l#8#WPv=K!(uKso@1^9R}i)OQ3K4xp|h$aDbNc+>%d z&jIKTp%;HpIv^5=m(z=nY;hY9i$U4kwC3Xq`sMWE58lK#S`dvoVAKJlwc#ijaR2~x WSlg6kSLVI|0000tXRzR6N(}(v21*UUi-(f|6a$BC4>pmD zu^OP|to3P*%N(}(vd`b<#iwBVb6a$BC4`z~! zu^OQ56@G1q8lW4Tbir=zmAPaYV7uhxLLL9uOCZg9ky)oH@&YLs0Bj+No_UPzD*ylh M07*qoM6N<$f(vjf1^@s6 diff --git a/platform/icons/src/nodes/javaDocFolder@2x.png b/platform/icons/src/nodes/javaDocFolder@2x.png index 64e475f29fa9f46f2d3068d7b795152494bee99e..724a50cbb7b10e80b302a5147e086ec2fd850766 100644 GIT binary patch delta 172 zcmV;d08{_T0muQ6B!7=dL_t(|+GAiC1)~58W-Z@vh6ubFh!!Bgk+7 zbsa&b1IWgs4j6U7r~?L{14e%-4j6n67zGa79?TpFJainOA76M}+bjIqr~^hFFmfHB8;LXhQjbAVav!VNGBK|!zMAA1SLrdtS@lqOHu0karpx!u|;b4PAb bOe+ik;&CR6dO2fR00000NkvXXu0mjf+z&;7 diff --git a/platform/icons/src/nodes/jsr45.png b/platform/icons/src/nodes/jsr45.png index a0737e621eede284a5cbece1d74512993a6c6518..00e7ed537a0225dbb9385cf17c76ddad19c54fe2 100644 GIT binary patch delta 269 zcmV+o0rLKv0;mFzB!BNoL_t(|+GAkA0%k4W&;X^+V8aaf07x@T5y=L?G?QfjvSzYf zfW=UfTyTb1JV*_o2smte5DCPmf%vlRwj0-gbQ2Ie0`W{j7^K-4h!+C!VIaPVgu8$^ z6QoE#zUa8RvDIr38$^S!wpYY;m;nVqyaP=$411fDPuQVh;eYrHW`LGUz#WUO73=I) zU7QCqpaJA`G>yxFc&}OG+&qwG%PCt|zzhJ{3^GL1&f_7n3nn6Y;RMvs22BUAEifm8 zFiaE7D=-5bpc%2kV|0R(G5(v2sQv33ot{bLFoiyV*vng*1WdO TXvGl#0000 zFHoVDn1la0mLC9Y4 zfNI!*W`GAQ3}8+NX@+?RWEj{0Xe@vfw?SP3(@az>0002b^Y1l0tPBYy%MNkl2T5<5Bkb?uc zxQKF5q`h#Vv<}-+$~xGxk&sBMBy!LkNKy{|6wg=Bqo=1C+h!ZJOnvvAnRn*-e%|MK z=G{P`jAJW*lv3vphFa?DAD)UnY-H+LknPqjJW|ElmJNcbLf+NbZvjWA%7S?M!=5j#hx}405m4dkR{yH zK=O_*fi$68Chk?Ad@304Ei^QRue`ckH=33-t3U!EYJ#Ut?Hy|lHMX>kgpz|Ny0g*k zx*xD|jL3v!M4r(A*jVO`fnxxQoE@1Tu%DqV0nE@F(jyuWqumE020-^ihBqden`P*P zO|R_%)HYe~4^kSbzuk&0MBc0#nj+Ozd@EKEb*d>-X4UaZ{|`VPDk#^9Pi;LP00000 LNkvXXu0mjfJvt2d delta 540 zcmV+%0^|MF1hfQ@BYy$=NklFC7rg~%T@ZEcMcHZavInQ~{ zStwLRJG#g$iGH>kg}&QhE&~M$z~+AfAk6~@(B^>x*vtb1@P9K81fZPxpPd39&>97( zHgFxF4p4gl|GPzQ-Uf~Kj9y6>qc^2f^V~7&qd6T$+eU{!A!!~ndN9h<6972@1I2zC zg3Z^Bj*a3*y8^(bC3A zcUuhr#0KD%G55qgK%@a+0`+py4eZ~YBcRRzvI7B>Gk=A5Yyd6=x9xpO%!3jDXlQ9) z)kVfY=rfd*29!l8SEy4TSDFQYG267Im=)eQ$iNWCleYx*paC2ed{+THkmMXkA4A&; z<;lP}n}50oC{R=xc;Yy^1jWBa{VpO6fEDA+>q`jZwyRh|BxoyK1s464t5`rdmYRsu enDZNdMiuWtyrGSJktv`600008624f&Tg9R5;Y5)i~P-*~PJlqYSI2u86 zlNYYu55@O^*Z_$CLunAd0Eo{MG9Unm8-UmWs_8$Jo)6LtGK7!;@1dIBLpA(IqCt2+ vAp`ys!1xmyQ7#~00O2sequGF%SO5SKKfpcoWo38(00005d50Z=gqAT}T? z44`8Bq4++?ARzt^r9u1xAU+SW1fKx`K->Uz$$h8+AbLJja{(b2yoYLf57qD=iT)3D xodK>uR6tUQ3pY^D1vmnh_%Og>08z0309w+C5)_@A7ytkO00>D%PDHLkV1g!;GtU43 diff --git a/platform/icons/src/nodes/keymapAnt@2x.png b/platform/icons/src/nodes/keymapAnt@2x.png index 0e914f108d3edee2f2801de173d9e400f384c9ff..abe3683ee454e44cc7b2b52916412217adb9c2ce 100644 GIT binary patch delta 265 zcmV+k0rvi_0<8j&Eq~t$!ypicGeSlYx_}E5IzmUt2=36gzDS??kcSjHKo%%;gpA+_ z_Jp5BB!Tukumul3f`8EO%q4bRixw2;>upCoKHyI5YYIe6Z2?&crhuG8fdHE(&;**m z{|eN;jDAPpbQyhyBTOkIoEdFJEF}Uu;Xq6fvAIC#!++R>`3f>#^cB#8LzIXD z$>sy*^dWNysFD-tv4O`^W!buzCHjs@JD^Kzz^>GRNivLm3ywUm7yYgorhr=!2t2bf zw;}6`YG7-@FR;>|Azy$KqOX7{AXkJ;0lCjmD%d|FX7+NwVupa0x{O`~y?QqkC88Vv P0000o^G;jcDPs&IV|7u0<5-}_8!f3Mvl<2_KXaUIV16Uh;3xDDTV606Pn*rmW9E1ZP z$tT40s9f!mM|Pk`0*$Bes#T;)YrB!V-nBjfU=GZIBo#W_hL-#DG9rFR1yBJ1tFPx% z2e9EzoB=?UI#YAW@aNLFVRM*tN48T|m59I!?^Y(}pD P00005defMq~zoV3+h zfgA&tWo{100c!pa!lW92qM1|!Ff;>k0F6z70bGcE&wiuQvrRDOT? zh8(cwE$s&PKcy<|2a0jyO6s{U?LFfCT(?A zAjg1-8C(3aftvq=FsTNhXeQMF49!5CK&%0{HRCb>IhG1G#W~>AjL!g|!u=o&0PQAoqY$V0>I(n>002ovPDHLk FV1gqBKwJO- diff --git a/platform/icons/src/nodes/keymapEditor@2x.png b/platform/icons/src/nodes/keymapEditor@2x.png index 402be651f6306c33c684463bf7cca3668b700dfa..7335bbe71a10684fd3effe5256fd1387a21ee89f 100644 GIT binary patch delta 287 zcmV+)0pR|s0=WW^BYyz^NklxM#AWox(1I{30B>fFQ z{2$E`=aDQ2W2jngvRh7g9Izki0I(yV(IJ3rIm`hR0X$LgALMQ`n>w)+`6rZPu1CT90k7PL* z)7k-eEvK~u2wDz`4q7>Y7|TK80<>@d>6TN`0pwXuB?pjiIe#e*z*nD;Z8^0Zki9uH zfh^0(aRAW3G$1|$#c4n}2OvJ5wK=!|o8_NUmC}It3>2qP!vSZIF;K1ni2tKG0`7Ap z%g=mFQ#nTq2keJB0PF~8bijih*#RI-izxUHbp$9R9MH`t7zLw%h&JPYTHpb9003;$ WrvBTQCfEP~00{s|MNUMnLSTZoO>JTT diff --git a/platform/icons/src/nodes/keymapMainMenu.png b/platform/icons/src/nodes/keymapMainMenu.png index 8d6be2d5af60d349f946b07641eaf1d8acd3158c..40b1072bca4fe66432e5a0c617b5a3a136f2ebc7 100644 GIT binary patch delta 110 zcmV-!0FnQQ0gC~UBxh1dL_t(|+GAiC6kyi!4QH_6VoD7F;RZ?#z>9~Y0Tf3gh&_4X z>i?u*+898r%kdhJwAJ}N2!q%T+aA0JVG#RMs?vK9#%USV3?Ru1=z^qR0I=$FzS!6O QT>t<807*qoM6N<$f;P4=Pyhe` delta 107 zcmV-x0F?iW0f+&RBxFxXL_t(|+GAiC9$?n;4V$pw6iN*M;e1LBz>5c=0Tjmql>MI+ zOdA78a5-)RlD0bU2VoG~VcUcKAPi!EN>$nq!qhbYtFuV)0=gh67yx@lO#m&WDN_Id N002ovPDHLkV1kv+CoBK} diff --git a/platform/icons/src/nodes/keymapMainMenu@2x.png b/platform/icons/src/nodes/keymapMainMenu@2x.png index 4f6a2ad0e1709aa46da4316f0f1672422c893823..9a244407cdbed2cafe4116f86288efa392790e61 100644 GIT binary patch delta 178 zcmV;j08RhL0nP!CB!87jL_t(|+GAiC1)~58W-Z@vh6ubFh!!Bgk+7 zbsa&b1IWgs4j6U7r~?MS0|vY@8Z-`=ym0k@TH;X$3>^nhJIxJU2PAEEZUEx{Pz-O7 zIBa{+0L1^H7%u)PRjC1p|3h&DH5~9C86!F1KQcygz<*>+ax2IVMhDO)3W!cDv`U17 g-T^c(hz8050LS3RuJ;ke1Y~Cb1Jn;t|B9;t(D{+f z0PO$-cCJytaCo3F1o6HQ=p Z0=#@nEo4gex}yL9002ovPDHLkV1h`pMS%bS diff --git a/platform/icons/src/nodes/keymapOther.png b/platform/icons/src/nodes/keymapOther.png index 71615dd61a1cf74dbc77e85e4a75c1766195b4a8..8d673b5ae09b5ed252af1a15a4d0279179a4241c 100644 GIT binary patch delta 94 zcmbQoIFoULic*57i(^Q|t>gp=k%ViXc+)pLNb=%kc*y3(d!XCBi&2DKX`-8wVYB~A yuhR`bcskmmcJO2!G)m&NXl_~RQKo1o&cJYCbIF%C_x~y|0D-5gpUXO@geCxdL?dGW delta 99 zcmbQqIFE6Hic+eli(^Q|t>gp=xrA$%tB!9q3L_t(|+U?ZA3Bxc9K+!Cq1#;{pg`T@aAbWHTWr17^rI|uQ zWQI;q85E;K(iT@nZII!EAqT(M#!V9=hKymn(g)qRvnOEb;tjAz6aZ`yg@ED$5P$&e z2jKn?{S2VHpMXP-q%?=+`*E6qLyn|02TOonJR=l9FP;&W09M+l6#%VO9iVogI>7x1 zd@teuzXRWnM}GhgIg-*G)DHrO3ZLd+3DApYgaY8o4x%N1HfmoTadp7EJGQGMD7u7C X^}@ZC50|l200000NkvXXu0mjf(%4@b delta 220 zcmV<203-kT0r&xsB!9n2L_t(|+U=B03IZ_+fDW$`N+UcB0000jd>*76N!u;5}!4FKT=N)5n^M-3SC22h+5LE=eUo!^5ni0!cL w!Fvz}u|K6My$4}}22*SR*j+0*76OTu;3I*4FKVMN)5n^M-8C00Td@Bka*Ho=lviIVmoYm wupfj$>`$pm`#+|s9HPho5THe0m1>0Fn<6FW-Z@vh6ubFh!!Bgk+7bsa&b1IWgs4j6U7 zr~^hFFzSF&2Mk>Y40Mxh@Hil8t8)Vo|A%6D!^C0Rg9ae}55;itPpL``K>Qzy8>r!c z|Hv500soOPk^}xDV~Rs;FgSp^Q7{S!fyoP3|EC2Wa0dVYZxdD-O^nGDB>(^b07*qo IM6N<$g0A&Dk^lez delta 154 zcmV;L0A>He0m1>0Fn?eaK*6l#8#WPv=K!(uKso@1^9R}i)OQ3K4xp|h$aDbNc+>%- z4j6U7r~^hFFmxR-&<&EoQ;tty$qyh06D29uFN>xe&;xka3Mhyp? zLB>c9ID?Fl900TY%*Qm9a|7xC5FUI{FbassCI4xG2iySw0~57`M4skpWB>pF07*qo IM6N<$f;34zD*ylh diff --git a/platform/icons/src/nodes/moduleGroup.png b/platform/icons/src/nodes/moduleGroup.png index 92750aa6b99da7865f09faa2b5e023e8290c5f17..d652955c16d017116a1e3f50a3529e4a4b3092ac 100644 GIT binary patch delta 70 zcmd1LpP=U`l5p)4Z~BG@NnX4R581qU4|KbCF^aG&dE869-MrkOr`Mi^XMu!3$-xFG Z28O$j>gv@W^ztwOfv2mV%Q~loCIGWW8F&By delta 70 zcmd1LpP=U`mvHS9@9Yf^M7($z9@cpA9_ViGU=(R*^thLJyZOICPp>@-&w^SB0VWeu Z28KGDR5Rr}?SC17z|+;wWt~$(69CKV8E60i diff --git a/platform/icons/src/nodes/moduleGroup@2x.png b/platform/icons/src/nodes/moduleGroup@2x.png index bf48e0b1cac78e7c3dc0c09e6f0ab7c2e6d05000..9e08daef84a92ffcfb1aa69a5b73c6407dd75125 100644 GIT binary patch delta 121 zcmZ3&IE`_FN>Qw*i(^Q|t>gp=*2N55X}b3d+Bo(|cGR+8Vl=p8aDi{ZKIIby45hM; z%a~6bTg)d>dSC@}TR$_~9t9~AzJeRy9%!2RtogHo*-h5q3lN=V^kO_3Xz;2bkez1= ZGebJ>*JUOSzYjA2fv2mV%Q~loCIIQ7Et&uT delta 136 zcmV;30C)eE0i*$tB!6p3L_t(|+GAiC1*2fFfLY5o=;FilaKI)a@Ejm^9!LkkaQ;9$ zfclOg!vSDN5K22lrztWWKsFwAz^DU;j{^p}9DqB(VcP=-Y?xSiYB=COHcYJir~^hF qF!UWTS`G~TG(agBb-<8y004Ba@i>d4&>{c;002ovPDHLkU;%=goirc- diff --git a/platform/icons/src/nodes/newFolder.png b/platform/icons/src/nodes/newFolder.png index d111c34c15936cc6e6d39b065d0fbd6a4e5b1993..f5d47c755007e628ce316c31bb695e82278408f2 100644 GIT binary patch delta 63 zcmd0Zo1kK)>gnPbQgJIeK|&=d#Wzp$P!kMiw;y delta 73 zcma#cn4sdK@9E+gQgJIeK|&u dA?ZK^6T`<>tzMUzzCL3B0#8>zmvv4FO#pV*9^?Q3 diff --git a/platform/icons/src/nodes/newFolder@2x.png b/platform/icons/src/nodes/newFolder@2x.png index 42e807a20a38647648404d74ecc20e9e9ae9cf6a..01324d8fc52ea0a362a3f82bd21b5d3251d73c89 100644 GIT binary patch delta 100 zcmeBXY-F6E66@jV;uunK>+QLXoD2#)tQU1&_?>&mw5=)IVv5+U)9L~Tt#|yJDfrea z_wl2BeiIvt``CUcvoz>Cv7BILfPy{j3ct2-rv86@>08HU7LcH)tDnm{r-UW|6KN-N delta 110 zcmZo<>}H&xk{;yg;uunK>+K~+E(QS+*Ffn_T-=-FXU;yw}%WQgJIeK|&BL_t(|+GAiC1)~58W-Z@vh6ubFh!!Bgk+7 zbsa&b1IWgs4j6R+sSel=#A!fm48>_sF}gSaWRV&c^=gzjf)od&;mNvb^l*SN9tRkY y2nP&!6byJG9Pn&7S`v;rfIbcw1*2fZ0s!ypi8`j@1)Bf>00{s|MNUMnLSTYAo-|4T delta 147 zcmV;E0BrxP0j~j&B!6~EL_t(|+GAiC1*2dTK*6l#8#WPv=K!(uKso@1^9R}i)OQ3K z4xp|h$aDbNc+>%-4j|P5>wvfdh{K_{0xCuq2Y@W{17c$|>_>?sNO3>~7RzC{f*uYC z$K!zT5#fLVkAeYDgae)pM@zy{2hhg>qhQ1W05mq8gpI}ycnkml002ovPDHLkV1m@r BI7R>f diff --git a/platform/icons/src/nodes/plugin.png b/platform/icons/src/nodes/plugin.png index 37de1e2cb7981c1b34a3f18fa237f5956edfd753..cc094e665d5dacc7759b327c3c28e0674f98bccb 100644 GIT binary patch delta 130 zcmV-|0Db?E0iOYoBztB_L_t(|+GAj#1(>ybgD()DLC2&RupgTNK%9oxK&Zwv9GcJI zvr!GnR(&5GgSr66y+HN(^a0 kicVunT(X(ubU+CJ02Sx;k7geyFaQ7m07*qoM6N<$f>Sv#!TybgEJ6sLdT>SupFBKKpctJK&Z{SI5ck} z#%2s#h%x|86IlizYb4JAioyV0lH^#xVt_M6E+8l64FUt80mMzN0XXBHtjt6T001XX V^VuKV002ovPDHLkV1nNYD>ncD diff --git a/platform/icons/src/nodes/plugin@2x.png b/platform/icons/src/nodes/plugin@2x.png index bac5ce1e63a970f09536b745df6e5073441664c6..d78643ec3b7eeee11be51428f6ca0e7bc2b5084b 100644 GIT binary patch delta 252 zcmVEH7`^ zrdc&Q34 delta 192 zcmV;x06+hj0^9+RB!8nxL_t(|+GAiC1tfr3%Qq+jaT^eCB7|vSxfl>HC&qGGIUt`{ z%V7?nssl-}oazpM20zITpft!WfOrluzM+)^hz`!-;{fDfr@I57mXnpDspSBe&nKcg zhF%VUX|@=UG=Q#=?%9x##v$ndk{n2c1M&yj0ko}-iP1>Y2001M8WN)p7ybgD()DLC2&RupgTNK%9oxK&Zwv9GcJI zvr!GnR0cClGGuSZ9fX$#lq{M(o zs4INQG5~5w15$JvlWYKzOEzN*eURc)r%wHXVXOv_69xbnr4k_;JPj0t00000NkvXX Hu0mjfB#Jw4 delta 136 zcmV;30C)ej0i*$tB!6p3L_t(|+GAj#1(>ybgEJ6sLdT>SupFBKKpctJK&Z{SI5ck} z#%2s#h%x|86IlizYb4JAioyV0lH^#xVgPzNXai{`+6CBvvb@3>Yg&B!BfuL_t(|+GAiC1tfr3%QvV2@k}5-LkQEtaw#C*PmJZXazF#I zmctxCRR@w{IaM40ROAZ_a&jF&X^<1`8>%`0sJWQb;G~)ZfEpvoiBD=JGG1KSj9w1# zB{xM=%K<$|21E{o17N}5fSwJZr6A260Ml$dAO#T-4rri@1AhjrG9pGJO{-&?Rii`B z0k{$&u|Qc~;S4Dln*)3Y$^pxu4wyMm4nQt`9R|Vy$h9GemZGZzppI}r3Wa6lID#Sv zU@3Cx)u!~t~A1q0y# Z0C)jKk5otjT?_yK002ovPDHLkV1h9-XVd@y delta 219 zcmV<103`pe0`~!sB!9k1L_t(|+GAiC1tfr3%Qq+jaT^eCB7|vSxfl>HC&qGGIUt`{ z%V7?nssl-}oazpM20zITpft!WfOrluzM+)^hz`!-;{fDfr@I57mXnpDspSBe&nKcg zhF%VUX|@=UG=Q#=?%9x##v$ndk{n2c1M&yj0ko}-iP1=?K~zGOqL3@Lcj z0izBWd=7wBMg!phlHYm(8;0n`9wN5Mcj001Di VKnW!JfeHWs002ovPDHLkV1ho!TI~P; diff --git a/platform/icons/src/nodes/pluginLogo.png b/platform/icons/src/nodes/pluginLogo.png index bac5ce1e63a970f09536b745df6e5073441664c6..d78643ec3b7eeee11be51428f6ca0e7bc2b5084b 100644 GIT binary patch delta 252 zcmVEH7`^ zrdc&Q34 delta 192 zcmV;x06+hj0^9+RB!8nxL_t(|+GAiC1tfr3%Qq+jaT^eCB7|vSxfl>HC&qGGIUt`{ z%V7?nssl-}oazpM20zITpft!WfOrluzM+)^hz`!-;{fDfr@I57mXnpDspSBe&nKcg zhF%VUX|@=UG=Q#=?%9x##v$ndk{n2c1M&yj0ko}-iP1>Y2001M8WN)p7eGgi88=CRLnkOa8_9#7*4m=5!Jh6BA2lxBH{^e(`R-k9(b4^4hzLkvKa5 zl>8Xmxg@VrB+m(eO${JhfT>EK6M!BafGZw=|Dnpe`Al~2AAe)B2~zSd_R4Sq(4{C% zP5?$Y06uWDcD5G_VC%VFBmi3Z5fZ@MZjS`O9NC~`1>o1!FA;z~x<$# z@)&&g?-mU}Xe`zu0SGC-4yq@Zse<=>00ly5MAjn#IL`o%6yXOEoMNW~ur^o@kdo9_$7N4*# zxKM&g3XzQE_XM65eFXV;7#Iu&LouG=bx-4w#+F9BI;<5xrx7FyHwTc5kJ7_R@smdJ zmH;+wfMx-;etk;-D>^_x2Z%KQT5f% zq!ZLq_$*=fo1uRbcDo(EnvehlFn%a10I;G1%+LVluf~J`CfFuu{(4+8p~(jl(h1Ey zkum)yhX4d1089Z0KmY;|fB*y_fEd93VgwOjK?69v97O;)yB@zGAb9Nyj_#hwbOrE( l;9&uFJ;A{OFc^%k;|-f^0V9*Q8Z!U@002ovPDHLkV1kdghZg_< diff --git a/platform/icons/src/nodes/pluginRestart.png b/platform/icons/src/nodes/pluginRestart.png index 28c7c87de36fbb5d965f59a8d91ab280f1aa31c4..ee8f9d36d7c313beda5137fa4911ed5db359477f 100644 GIT binary patch delta 159 zcmV;Q0AT;Q0lNW^B!7ZQL_t(|+GAj#6_~YrgD()DLC2&RupgTNK%9oxK&Zwv9GcJI zvr!GnRybgEJ6sLdT>SupFBKKpctJK%k%>5bNU5 zyonf_F>E2q05nac832^vM$<^10ThJ+x+IWaMN%w)B#221SZ#M(p~MTsGlBRF6oc5j zL?;>~&1uMnkYWH>6O^q6Gmu;ZjDdJRsRqEjP>k#aZ0Ug}fffh=57-eiwBAlm00000 LNkvXXu0mjfky1Ta diff --git a/platform/icons/src/nodes/pluginRestart@2x.png b/platform/icons/src/nodes/pluginRestart@2x.png index 0ff45a47f28b241cd9129f8c1e215b1b08433126..bf979ea973e6e0da1b9d16f2ef2db04179b77b05 100644 GIT binary patch delta 296 zcmV+@0oVS_0>c83B!3D?L_t(|+U=FQ5yK!1hP{9npiJQf*dd()1sK2!I140Y zHedmUipas8!Wn~!1WkPRHwK{(p~o=%zl!hvcuk-UWOL$hEAmMXJW0Dp6BMpFT-=m6CNAcS9c zDMMr|yELK{K(khy3my9~Dludo$82NtWEpz`RxEgZ~$oR2t{PufzTWPCI&!jD$WTG0Gk5v>m!av4}h;IGJ delta 305 zcmV-10nYxz0?Y!CB!3f0L_t(|+GAiC1tfr3%Qq+jaT^eCB7|vSxfl>HC&qGGIUt`{ z%V7?nssl-}oazpM20zITpft#xVR24w2vF((qJwkzH~^^80*L33nxLqa$}PxE(bRGP z%;yu)9Yb>m05xzUX||wy8bEfyfMr8M8V7>|=Fqe#CdTDJd4E4*YeaG!05UkA$Tq=p zT0{Xii4BwGRCR#c3MDBZZUEx_Kzs&@_d~^`Xxh{QTA+qzF**jxsnN=EDKyK|@Hj$> z77l1Ywg@RiW@2$f11%h|AKd{+a*^n1f))-qgUbO>d0ynu7zhXWB8LLqq5$gi9`uAr zuS95!BU?5Q+bTz(BpVjv%ZAXZo4Q5ufEGjpT@(WVm^JF+4%}kU00000NkvXXu0mjf Dr__8C diff --git a/platform/icons/src/nodes/pluginUpdate.png b/platform/icons/src/nodes/pluginUpdate.png index 8e8789b88a19e510cf18483f425b03a909593c12..11f94ea40057e2fa24292d4088b4cfa6ecf699ac 100644 GIT binary patch delta 129 zcmV-{0Dk|G0iFSnBzk2@L_t(|+GAj#1^ASzWCz5{&@m|n%)w>=5C`Km5UMd4hvsGY zY?Mc`l`I2_a5g0g(ZaByCtpL_t(|+GAj#1^ASzWC_GG(J?6o^kXvsh<))I2o!V%Vl^C^ zXA)yGhAl)HfToEo1CTY6X8=WEfG$aLEMPIfk|Gz7lkx_E0iXb)!~mRePgZ6k1pol( WhP{jR9HONF0000!dTnog@2w_@SE(*kRh_Rej4#*(Z za+m|C>OfK~r-}oBitJ!PPObwe4RWG=LsbU=HOG<~oK$lFP@^X~@ky;j#)T`J(aQmL z%W9#u wqZYlRV-BgcAXN)AXu`B3w*04Q&uG{J0I%Q2g)K^W^Z)<=07*qoM6N<$f0ko}-iP1>Y1~>`L8WN)p7>OJ&d=jtC!PQR002ovPDHLkV1naoMkW9N diff --git a/platform/icons/src/nodes/pluginnotinstalled.png b/platform/icons/src/nodes/pluginnotinstalled.png index 07dcfa33c26186e862cff3962b6eca4bf19f31da..a5a2894e05c65c394a7b6d4516fea91b5ea80715 100644 GIT binary patch delta 189 zcmV;u07C!X0oehNB!8euL_t(|+GAj#1(>ybgD()DLC2&RupgTNK%9oxK&Zwv9GcJI zvr!GnRoAdND|h6axx@coPucM8bH^=F1>ViUDmvycfv;kT!vHNHHJ*h#R1q&p{1H r00k^ju>cKykRj86xEspmAl3l@DM2nVLt1>W00000NkvXXu0mjf7`aKL delta 194 zcmV;z06qWN0p0ybgEJ6sLdT>SupFBKK-`AcK&Z`;I5dN> zA`t7sFuG)(%Zd?G;i$P*UCmNvQLLlA*#5a-fVp0s4h^F~62$Nz!8#@s1MKSE2f%{AVL-AWl4j!pDTr`6fNn)Gp?{#Gd1XY5Mw(W~G^<8Q z%!c6jci8rT1BeCa>HwgH(m>n+#HWGyCJ-;T-FAHqR7{N4mTLm>1|Z%6#A~4rxD2Il zLLH?^E6W9dcqtG!0P!XuK7nNMO*BV{(ZT@%P|GKx`TQ~#N7T~70Tn>pjb`Cx9HDTG z77hUUei{x7VSJ8R2*l?=>S*PFZafZH3so}*ltyS31r1QV5Y2K>f^0*Qub^cjgkj|P zUk;5Pm|Os;u%c>F49$kfp>P;#`8lWq=D>UpQcIJ%0BEoTk|Wxn6O|0m+}XttMN z0otF?2p<6x60RjshK7@?q=J#*X$4sRSb-rWdI<@gf+l1&Dt|o?Q_kc9J%M=yyt3yN zVEC^(I+cK1`3l@+72qS|emu?Igfc)JyA`81zrbGyQBnc*Q5+~xY75x?F3<9J%%@;@ z))$hS-RA|k2k+nr%=PZ$na4(|uUZJ0fGv0d8wzy%K2mC;6<&ZRP*Y$pf+cS%mB3AB z3}1OG?|LNW8hQd1SbBlosVZm)*wsIr2y`-QaIn{D2`s-6*zlSLv|3wGleHIa8*(Ae zSDH=eko#}gobKE#bS%d{hO!E;3_q~^ja$9FmQ&LtorJjYSV-8Cw`|N>gpakSVZrUF fykL8*(8~P+4&ba?|1rJr00000NkvXXu0mjfq;a;S diff --git a/platform/icons/src/nodes/pluginobsolete.png b/platform/icons/src/nodes/pluginobsolete.png index 7b44a30d100b05c1cd216f6567052e0e473c347b..efe4c74be607fa5e335a9564d1a67ff9f94703fa 100644 GIT binary patch delta 144 zcmV;B0B`@E0jvR#B!6>BL_t(|+GAj#1(>ybgD()DLC2&RupfwvftVLb3}i?eUIU>T zVTz>CybgEJ6sLdT>SupEd}fS4Oe3}i?oUIT%G zen6}XRUn2Yw}}{=;kICt!>1A1X`~qd@+X@A$TNVVFhG|iITo-OKw3H=DUl3b13&>p ji2;$=0*&mK@P&94(78Zqi9b^z3uuppO0(riqu11JshGuV7XtUgLCF2)vIba4Ps zVM1%uq zTND!tI+|BT#Au{xbxgBrbjUe?P;EyK2lx(@1C~J@Fms?BfL#1K41@!aYs3Ax3L08F z!T~81mJO668ju{Zf1siRy;(LBTK*f;J35Fi`)SfKfhJ5}V#|M;_Kb!t008>Cr+hSw S3rhe1002ovP6b4+LSTa6NN8jL delta 219 zcmV<103`pX0`~!sB!9k1L_t(|+GAiC1tfr3%Qq+jaT^eCB7|vSxfl>HC&qGGIUpZu zILHysAP3=42X_Ef9f+hkk{ETgbbv0g4xlv1ondiKiow)$z$R?LIlLVJ)Mx?3bFd{C znmYh$InESI4+p?}J`vq9GX|7IaSo$PO5=Y)D8WQdEd24zvSkQxp^70NPeY zL^y!9)iE&|Y1$y6Swmvf0izBWat?r1Mg!phl*49*7*cWT?YWJd3<^A~7j<6voqNc%tts1LirB5w>H-I?cl?_v_|_}; y@uPiy6B~;A*nTLpH0V3AoM2{vf<5dCzqWCv{(pVxTgPS=kf5ilpUXO@geCwD)+c5F delta 97 zcmZoC~?dIv?7*cWT?YWJd3<^A~7vDT{c&Ger+oP7K4E^~IEbkxuN_TVFed*VZ w9qWQs9?V(H_>Y6}LAL7x>pp^lnL_IDS z7&~lx@Dv}0>M_P;fCC`|knk?7&I3yH?4K@QnlGn+00n`v}AU=Vl7{t~_ aR|f!I2&6Boz((u<00007x>z+nI>F^9_q zx(?eO{Kto(dUSCaU_r!!Bgk+7 zbsa&b1IWgs4j6U7r~^hFFzSGz;{aOKxci8seDJ2-m9%Go91L6R3+5^5& z2VAGr5omY~5c3h^fMTcv=2F=KU`G(0cz}w-D6l9D%`911h)0r?g2{}A6Ije4+W{Wr zH~<>oCn$;nBuDhqBoUJ6h(;nTXryUZ4rqZTj+_A!vn19W00aVKiL>UxLjV8(07*qo IM6N<$f-?qEHUIzs delta 214 zcmV;{04e|K0rCNmB!9U{L_t(|+GAiC1*2dTK*6l#8#WPv=K!(uKso@1^9R}i)OQ3K z4xp|h$aDbNc+>%-4j6U7r~`(M187y}3>^mmu`Wp7VcUcMlwc%#bYW%=hy%!}4K1J! zcu%P#(C~gB79hp}DNqNjr?LaUjv&SXbD$1LpunO8=qJL0ewub9~N0oc5Z*8pr` zHF@Fc|3n8OvWA>p{{NBr4%;65r-}h^7Y)1txWLdb003&rSC0g(ZaByCtpL_t(|+GAiC6kyi!4Z6sf90N9C!6}p)0K)m`uEXk5JO<#! z^fdsg&H-6HUIUOdF6*vIUeF@PD`%fG360-T(ks WCtM8Lu8dg#0000-Y diff --git a/platform/icons/src/nodes/ppLibFolder@2x.png b/platform/icons/src/nodes/ppLibFolder@2x.png index 234f2c7f384e9c64eb694d0655a2d60061743328..c000110d54ade4a4824ed848f19e0d6e9aae3737 100644 GIT binary patch delta 141 zcmV;80CNAy0jU9yB!6&8L_t(|+GAiC1)~58W-Z@vh6ubFh!!Bgk+7 zbsa&b1IWgs4j6U7@O1#Oxoqeedv5B1K4gj(pK$z+dAR$}-2Vtt01Gs#cv&-KB zgmF2*VcP=-5T>RBP%Hpi{vU+#IN(1B4;lxchu}as05y$_IwoM$0izBWa0iglgd26h b@NfVCNp>il)JoQ!00000NkvXXu0mjfWj947 diff --git a/platform/icons/src/nodes/resourceBundle.png b/platform/icons/src/nodes/resourceBundle.png index 008c8c55f82e06032fccde3c2da6bc31bfd297b2..1fb08dde3a2460d26ef8abef7dc3c4b02b8ad0cc 100644 GIT binary patch delta 103 zcmV-t0GR)j0fYgNBw$NPL_t(|+GAiC6kyi!4QH_6VoD7F;RZ?#z>5dY0E)c;(&M&5 z=_v>kZ2-EZWEpUCvGY?9CfWdWTgfuuQ>xNa5T>mG_`u*d008=SbJ_}(kwO3f002ov JPDHLkV1jDcDU<*J delta 119 zcmV--0EqvD0h9rdByd|vL_t(|+GAiC6kyi!4Z6sf90N9C!6}p)0K)m`uEXk5JO<#! zWE%j|a Z0RVhSd_r44g?a!0002ovPDHLkV1j)cE{XsE diff --git a/platform/icons/src/nodes/resourceBundle@2x.png b/platform/icons/src/nodes/resourceBundle@2x.png index 59c143f7d8be2b8c0ce5f4b00f7e076c6968e71c..4135c651f690585915dd110dd0ebfba691281372 100644 GIT binary patch delta 136 zcmV;30C)eq0i*$tB!6p3L_t(|+GAiC1)~58W-Z@vh6ubFh!!Bgk+7 zbsa&b1IWgs4j6e381O_mXdK|SLg^_o9)1oW6w)Kd0XG*rKSjpF&jEyjdgM6ZQ>xNa qWIXDCq3Zy0!Ked99Wdk_001V=%Mv~+0yY2u002ovPDHLkU;%>T1~P&G delta 160 zcmV;R0AK&40lWc_B!7cRL_t(|+GAiC1*2fFfLY5o=;FilaKI)a@Ejm^9!LkkaQ;9$ zfclOg!vSDN5K22lrztWWKsFwE4xm*UAlU(KE0i3N@jy7>KQbPE4j>fObaTL$^|lVk zcpx0`9~lon2M~&Dx;fxes*(dT9ta2gN5-QL7&jRud_4*!?}MMR>pky{1|}1)78&qol`;+0Q$)rp8x;= delta 100 zcmV-q0Gt1Ff&q{uUP(zrK~#9!V_+B*VAk>ty2zLu12$p7DU=!j!ujZ~!|GBz2H?ds zGhho4&xhhI08NCt!thzlqVg8_)f0R;fe#(-`utqD>90000BL_t(|+GAiC1)~58W-Z@vh6ubFh!!Bgk+7 zbsa&b1IWgs4j6R+sSel=#A!fm48>_sF}gSaWRV&c^=gzjf)od&;mNvb^l*SN9tRkY y2nP&!6byJG9Pn&7S`v;rfIbcw1*2fZ0s!ypi8`j@1)Bf>00{s|MNUMnLSTYGJ~UJS delta 157 zcmV;O0Al~F0l5K?B!7TOL_t(|+GAiC1*2fFfLY5o=;FilaKI)a@Ejm^9!LkkaQ;9$ zfclOg!vSDN5K22lrztWWKsFwAz^DUAb-+3xt^ne2D6W8t(ZvBEi~NAt7!CVT;s{b4 zP=UpA7_Oj)1H$n*AbdnPV8Ekbz!TwsXT#BwaMS_xalj}Tu@(RT2O!KCKfWOK00000 LNkvXXu0mjfkyJq< diff --git a/platform/icons/src/nodes/unknownJdk.png b/platform/icons/src/nodes/unknownJdk.png index 2ed600cb04bd8d5b8ed5387b80996e1c81253b53..a6f652149ddb55ac6bc96fa45d9abb80ccc64843 100644 GIT binary patch delta 180 zcmV;l089Ve0nh=EB!8DlL_t(|+GAiCa4>8624f&Tg9R5;Y5)i~P-*~POm_p80kJPs zJqSCHV!$$oZ4VrP_&yN-hvN4@oItb-T37FO25OiOGAMrIc~2mH9%K+HUYH4r6)3w0 zsJWk11K{2X-h9m#>V@;98nD@C%gq>Q7=XMWK&k<0Ku!Chfh{ROR?-KBJP-$vop*qm i*Ml%627uE5j1K_I9Hs9zcRoP?0000_v6} delta 192 zcmV;x06+iG0o(zQB!8nxL_t(|+GAiC6kyi!4Z6sf90N9C!6}p)0K)m`uEXk5JO<#! zq#7_0h@C+;m#jVF1EeiTF<_#@wg(PCd>@GaL-BhcP9WL^O{@3X05!}985Fzmq8pGt z4>E`pFSJ1e6~wLrYVIf10JwJoH($4gdf_~&2F&r^aw{4d200)v2#{((Bv8|SXkZGE ulMX-zBmi*$+4%;jc|8bIVgNV|!1w@pw~^FG3wH4U0000%qH*`0%xGWvFDVM0vd>Xor1)Um)`CHZ~zQ2&VLwy8VDr>N))J>U``}n zTfhLy&JII*;5Y@rGY2{%VI=lIfnhOOVMRVqNLNBaz^=j`$IXC>*(0I?ErvFnn2Qy7 z*ApUUgBlkCHe4~`BBy}6K`HDD9UCqzkmAf~L+YNwB?ZXYr{RIC3rU3nnh501Z`|ac zVA$FJd|~6!_$p5beFzL>5A;3+#+TOXSb#R5dj9?anSdJfrW|B100000NkvXXu0mjf DbOMD+ delta 323 zcmV-J0lfaq0^S0UB!4AIL_t(|+U=Gx4uUWghS^z|oZ$c@jE*K;fR)XGU5~)z&T2>) zSq+0LN8ku}1CD?X@<^VgRYQ2Ki8T4*K+^wf`}(S7ZDSk1GOp##e}@i%>I-rpG$}A~ zGA*#a!~%g);#2K>T~iAM7V{SZ84xRuAmJ1k>cSJ}KinTKM}HBD_!#B@N1z6Jfet8U zLMsU*C{Rd(Wg@}a0wrJ%tHY2MI8Q07*qo IM6N<$f;Dv}fdBvi delta 120 zcmV-;0EhpB0hIxeByn6xL_t(|+GAiK5;$yoAOOVkK{NxY0IK;s5dVkLsD{j1zCjlm zlCSiUl{mEs$@KWMgvBt>-%WmpRk2R<`kQ(V@N>TWbzW zDt$;(_@;Wf=ue-*B}Rig4$GeIkab+dyupg;tfR&>p&n}^nTG3vUy2ym)SfVulrH9z zC_S)(xotf&$5ivf*BMi+ORg}21skjrM0%P8xfwE9-YgK%nYjEh0}yz+`njxgN@xNA Dw_Q8( delta 185 zcmV;q07n0_0o4JJB!8SqL_t(|+GAj#5pdY{Kmddp1_D4WKM%zM17-PtD5jqyuvkt% zN8quXI7iG{zCjlsrqFW2jsRM+i3mIgh@Hu_9KR!obN~$JBRPN+%i)fo)Bz}tKnoG9 zmJ&=vWHYbu`&f7)g3^nHbufTa{y%_ nHtK*;2aGykz#T9OMl1jTse3ys3exPR00000NkvXXu0mjfYI;S% diff --git a/platform/icons/src/nodes/webFolder.png b/platform/icons/src/nodes/webFolder.png index af559d0b70bbdbc61df496a6f2d372342207e01e..bdbce350cb005af72204749e15d106e0a700501d 100644 GIT binary patch delta 102 zcmV-s0Ga=l0fPaMBwtENL_t(|+GAiC6kyi!4QH_6VoD7F;RZ?#z>8^PK;O#kmvYvh zcnrcIHpvDAY`Ol$ee0cHAPi!YYyeC%4Ab8Q6o-B!7EJL_t(|+GAiC1)~58W-Z@vh6ubFh!!Bgk+7 zbsa&b1IWgs4j6R+Ne-x4bKq9Mmg`^Kx8C^$!XP$Cj4loUSp>5f9aG{6q8)(jb94-n zqqzfcSq{U)-vI+21p}T42Rs{&mV~1Ypqm3m!6+E9001~h@DV13xOa^J0000^TJh delta 168 zcmV;Z09XIC0mK22B!7!ZL_t(|+GAiC1*2fFfLY5o=;FilaKI)a@Ejm^9!LkkaQ;9$ zfclOg!vSDN5K22lrztWWKsFwAz|eHSq!nAXgD~A4P`>u?DUYppzB+7s@E?RhY>*gT z900NiW-&UZ#1TY00NLm07$iq?2jH?ChKIic20RJ|JP{6fHX$4>ibowlHwTP@5eoon WsqD0VArI340000 Date: Mon, 9 Jan 2017 16:26:41 +0300 Subject: [PATCH 08/14] EA-93765 - TDDE: TraceableDisposable.throwDisposalError --- .../src/com/intellij/ide/impl/DataValidator.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 { From 123fd022b23dabd9ae59b1620455337eff0f7100 Mon Sep 17 00:00:00 2001 From: "Dmitry.Krasilschikov" Date: Mon, 9 Jan 2017 16:29:13 +0300 Subject: [PATCH 09/14] IDEA-CR-17175 don't null project generator on dispose --- .../ide/util/projectWizard/ProjectSettingsStepBase.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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() {} } From e4b1bf0ddcd34ba21a8bad6f6a0e83a08ca04f7c Mon Sep 17 00:00:00 2001 From: "Ilya.Kazakevich" Date: Mon, 9 Jan 2017 16:41:11 +0300 Subject: [PATCH 10/14] PY-1409: Input should be supported in tests --- .../python/testing/PythonTestCommandLineStateBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 01cb517b9c94173ce725c14432d533863805c84f Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Mon, 9 Jan 2017 14:45:37 +0100 Subject: [PATCH 11/14] add threads_dark.png --- platform/icons/src/debugger/threads_dark.png | Bin 0 -> 346 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 platform/icons/src/debugger/threads_dark.png diff --git a/platform/icons/src/debugger/threads_dark.png b/platform/icons/src/debugger/threads_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3b714e77bf3882aa7471cd37111c148a3852a515 GIT binary patch literal 346 zcmV-g0j2(lP)zX-W3}VADNDgj5 z>(M7D7-qoZjS&o`p&I`;^?3f@JH_Y!s&eE1yPC}YpXsv#8G!J@j2Scj12up#hz-T3 zfw=xmuhsucON0KOnCt(4dba-m_5_{(r6C#^1~`B;t=q8|jFAnvGTG+;z6zB4gxq sV2>poz%VF{;Ll7rQX(=YEjN;a0UE@gMxaI{<^TWy07*qoM6N<$g0aY((EtDd literal 0 HcmV?d00001 From 163cf2c5734e90aa63a6d83a917aac4646af09b3 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Mon, 9 Jan 2017 16:57:34 +0300 Subject: [PATCH 12/14] EA-89923 - IOOBE: ImmutableText.charAt --- .../codeInsight/hints/ParameterHintsPassFactory.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 From f230a1c160a26ed3f13bd3047ca59646ea42e595 Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Mon, 9 Jan 2017 17:07:51 +0300 Subject: [PATCH 13/14] IDEA-165337 Copy-paste from IDEA to TextEdit and back loses line breaks --- .../openapi/editor/richcopy/view/RtfTransferableData.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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"; From 442fe762b9db7499e0bf3986199be60de6be917f Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 9 Jan 2017 16:26:49 +0300 Subject: [PATCH 14/14] diff: detect text files by content for UnknownFileType --- .../intellij/diff/DiffContentFactoryImpl.java | 43 ++++++++++++++++--- 1 file changed, 36 insertions(+), 7 deletions(-) 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; + } + } }