From 85bbc002c280063d5117aae5787dd4032639aa94 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 8 Feb 2013 10:25:05 +0100 Subject: [PATCH 01/10] Typo --- .../util/src/com/intellij/openapi/util/BuildNumber.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/util/src/com/intellij/openapi/util/BuildNumber.java b/platform/util/src/com/intellij/openapi/util/BuildNumber.java index 4212c34484be..7e2403703513 100644 --- a/platform/util/src/com/intellij/openapi/util/BuildNumber.java +++ b/platform/util/src/com/intellij/openapi/util/BuildNumber.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2013 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. @@ -103,7 +103,7 @@ public class BuildNumber implements Comparable { code = code.substring(baselineVersionSeparator + 1); } catch (NumberFormatException e) { - throw new RuntimeException("Unparseable version number: " + version + "; plugin name: " + name); + throw new RuntimeException("Invalid version number: " + version + "; plugin name: " + name); } buildNumber = parseBuildNumber(version, code, name); @@ -130,7 +130,7 @@ public class BuildNumber implements Comparable { return Integer.parseInt(code); } catch (NumberFormatException e) { - throw new RuntimeException("Unparseable version number: " + version +"; plugin name: " + name); + throw new RuntimeException("Invalid version number: " + version +"; plugin name: " + name); } } From a5c3f9c19cb6353b890c7c17d1c2c3c809f008b9 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 8 Feb 2013 15:30:14 +0100 Subject: [PATCH 02/10] Test case assessment and minor rewrite --- .../util/StringBuilderSpinAllocatorTest.java | 49 +++++++++++++------ 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/platform/platform-tests/testSrc/com/intellij/util/StringBuilderSpinAllocatorTest.java b/platform/platform-tests/testSrc/com/intellij/util/StringBuilderSpinAllocatorTest.java index 499c55578e48..ac61b53a5717 100644 --- a/platform/platform-tests/testSrc/com/intellij/util/StringBuilderSpinAllocatorTest.java +++ b/platform/platform-tests/testSrc/com/intellij/util/StringBuilderSpinAllocatorTest.java @@ -1,12 +1,26 @@ +/* + * Copyright 2000-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.intellij.util; -import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeTrue; public class StringBuilderSpinAllocatorTest { - private final String[] myStrings = new String[]{ "First String is the smallest", "Second String is definitely larger than the first one", @@ -14,17 +28,20 @@ public class StringBuilderSpinAllocatorTest { "Fourth String is the largest amongst all the myStrings. Congrats! It must be even larger than it is." }; - @Before - public void setUp() throws Exception { - // warm-up - new StringBuilder(); - StringBuilderSpinAllocator.dispose(StringBuilderSpinAllocator.alloc()); + @Test + public void testPerformance() { + assumeTrue(!com.intellij.testFramework.PlatformTestUtil.COVERAGE_ENABLED_BUILD); + doTest(true); + doTest(false); } - @Test - public void testPerformance() throws InterruptedException { + private void doTest(boolean warmUp) { StringBuilder builder; - final int count = 1000000; + int count = warmUp ? 1000 : 1000000; + + System.gc(); + System.runFinalization(); + TimeoutUtil.sleep(1000); long start = System.nanoTime(); for (int i = 0; i < count; ++i) { @@ -32,12 +49,11 @@ public class StringBuilderSpinAllocatorTest { builder.append(myStrings[i & 3]); builder.append(builder.toString()); } - final long regularTime = (System.nanoTime() - start)/1000; - System.out.println("StringBuilder regular allocations took: " + regularTime); + long regularTime = (System.nanoTime() - start) / 1000; System.gc(); System.runFinalization(); - Thread.sleep(2000); + TimeoutUtil.sleep(1000); start = System.nanoTime(); for (int i = 0; i < count; ++i) { @@ -46,10 +62,11 @@ public class StringBuilderSpinAllocatorTest { builder.append(builder.toString()); StringBuilderSpinAllocator.dispose(builder); } - final long spinTime = (System.nanoTime() - start)/1000; - System.out.println("StringBuilder spin allocations took: " + spinTime); + long spinTime = (System.nanoTime() - start) / 1000; - if (!com.intellij.testFramework.PlatformTestUtil.COVERAGE_ENABLED_BUILD) { + if (!warmUp) { + System.out.println("StringBuilder regular allocations took: " + regularTime); + System.out.println("StringBuilder spin allocations took: " + spinTime); assertTrue("regular:" + regularTime + "mks, spin:" + spinTime + "mks", spinTime < regularTime); } } From 6261ed0944ee184a760c770fbc5d1701d2e2e1a4 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 8 Feb 2013 17:37:31 +0100 Subject: [PATCH 03/10] IDEA-100690 (use build.txt as a fallback if application info is incomplete/unavailable) --- .../intellij/ide/plugins/PluginManager.java | 10 ++++- .../intellij/openapi/util/BuildNumber.java | 41 +++++++++++-------- .../openapi/util/BuildNumberTest.java | 24 ++++++----- 3 files changed, 46 insertions(+), 29 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java index 4d156792a1ec..323f3b955020 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/PluginManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2013 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. @@ -28,6 +28,8 @@ import com.intellij.notification.Notifications; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.PathManager; +import com.intellij.openapi.application.ex.ApplicationInfoEx; +import com.intellij.openapi.application.impl.ApplicationInfoImpl; import com.intellij.openapi.components.ExtensionAreas; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.Extensions; @@ -831,7 +833,11 @@ public class PluginManager { if (ourBuildNumber == null) { ourBuildNumber = BuildNumber.fromString(System.getProperty("idea.plugins.compatible.build")); if (ourBuildNumber == null) { - ourBuildNumber = BuildNumber.fromFile(); + ApplicationInfoEx appInfo = ApplicationInfoImpl.getShadowInstance(); + ourBuildNumber = appInfo != null ? appInfo.getBuild() : null; + if (ourBuildNumber == null) { + ourBuildNumber = BuildNumber.fallback(); + } } } return ourBuildNumber; diff --git a/platform/util/src/com/intellij/openapi/util/BuildNumber.java b/platform/util/src/com/intellij/openapi/util/BuildNumber.java index 7e2403703513..363771bb644a 100644 --- a/platform/util/src/com/intellij/openapi/util/BuildNumber.java +++ b/platform/util/src/com/intellij/openapi/util/BuildNumber.java @@ -13,10 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -/* - * @author max - */ package com.intellij.openapi.util; import com.intellij.openapi.application.PathManager; @@ -27,8 +23,14 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; +/** + * @author max + */ public class BuildNumber implements Comparable { private static final String BUILD_NUMBER = "__BUILD_NUMBER__"; + private static final String SNAPSHOT = "SNAPSHOT"; + private static final String FALLBACK_VERSION = "999.SNAPSHOT"; + private static final int TOP_BASELINE_VERSION = fromFile().getBaselineVersion(); private final String myProductCode; @@ -42,7 +44,7 @@ public class BuildNumber implements Comparable { } public String asString() { - return asString(true); + return asString(true); } public String asStringWithoutProductCode() { @@ -51,10 +53,9 @@ public class BuildNumber implements Comparable { private String asString(boolean includeProductCode) { StringBuilder builder = new StringBuilder(); - if (includeProductCode) { - if (!StringUtil.isEmpty(myProductCode)) { - builder.append(myProductCode).append('-'); - } + + if (includeProductCode && !StringUtil.isEmpty(myProductCode)) { + builder.append(myProductCode).append('-'); } builder.append(myBaselineVersion).append('.'); @@ -63,7 +64,7 @@ public class BuildNumber implements Comparable { builder.append(myBuildNumber); } else { - builder.append("SNAPSHOT"); + builder.append(SNAPSHOT); } return builder.toString(); @@ -123,29 +124,34 @@ public class BuildNumber implements Comparable { } private static int parseBuildNumber(String version, String code, String name) { - if ("SNAPSHOT".equals(code) || BUILD_NUMBER.equals(code)) { + if (SNAPSHOT.equals(code) || BUILD_NUMBER.equals(code)) { return Integer.MAX_VALUE; } try { return Integer.parseInt(code); } catch (NumberFormatException e) { - throw new RuntimeException("Invalid version number: " + version +"; plugin name: " + name); + throw new RuntimeException("Invalid version number: " + version + "; plugin name: " + name); } } - public static BuildNumber fromFile() { - String text = "999.SNAPSHOT"; + private static BuildNumber fromFile() { try { final String homePath = PathManager.getHomePath(); final File buildTxtFile = FileUtil.findFirstThatExist(homePath + "/build.txt", homePath + "/community/build.txt"); if (buildTxtFile != null) { - text = FileUtil.loadFile(buildTxtFile).trim(); + String text = FileUtil.loadFile(buildTxtFile).trim(); + return fromString(text); } } - catch (IOException ignored) { } + catch (IOException ignored) { + } - return fromString(text); + return fallback(); + } + + public static BuildNumber fallback() { + return fromString(FALLBACK_VERSION); } @Override @@ -197,6 +203,7 @@ public class BuildNumber implements Comparable { if (bn == Integer.MAX_VALUE) { return TOP_BASELINE_VERSION; // SNAPSHOTS } + if (bn >= 10000) { return 88; // Maia, 9x builds } diff --git a/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java b/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java index ed5a3a0b16bd..445bb4180d04 100644 --- a/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java +++ b/platform/util/testSrc/com/intellij/openapi/util/BuildNumberTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2013 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. @@ -13,20 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -/* - * @author max - */ package com.intellij.openapi.util; -import junit.framework.TestCase; +import org.junit.Test; -public class BuildNumberTest extends TestCase { - public void testHistoricBuild() { +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * @author max + */ +public class BuildNumberTest { + @Test + public void historicBuild() { assertEquals(new BuildNumber("", 75, 7512), BuildNumber.fromString("7512")); } - - public void testSnapshotDominates() { + + @Test + public void snapshotDomination() { assertTrue(BuildNumber.fromString("90.SNAPSHOT").compareTo(BuildNumber.fromString("90.12345")) > 0); assertTrue(BuildNumber.fromString("IU-90.SNAPSHOT").compareTo(BuildNumber.fromString("RM-90.12345")) > 0); } From 7054a69b685e3db6f1b8f3a2b313e7a3e43d562c Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 8 Feb 2013 17:40:53 +0100 Subject: [PATCH 04/10] Inspection profiles aligned --- .idea/inspectionProfiles/idea_default.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.idea/inspectionProfiles/idea_default.xml b/.idea/inspectionProfiles/idea_default.xml index 444a31a8b67c..c40eeae6772c 100644 --- a/.idea/inspectionProfiles/idea_default.xml +++ b/.idea/inspectionProfiles/idea_default.xml @@ -24,6 +24,8 @@ + + From 4ac2fc8f7d93500486eb7bb50efc6ee8da35a3b4 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 8 Feb 2013 18:13:35 +0100 Subject: [PATCH 05/10] Prevent stupid NPE --- .../options/ex/ConfigurableExtensionPointUtil.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java index a3f859887f8c..c06dbee44c1a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2010 JetBrains s.r.o. + * Copyright 2000-2013 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. @@ -67,8 +67,12 @@ public class ConfigurableExtensionPointUtil { final String parentId = wrapper.getParentId(); if (parentId != null) { final ConfigurableWrapper parent = idToConfigurable.get(parentId); - LOG.assertTrue(parent != null, "Can't find parent for " + parentId + " (" + wrapper + ")"); - idToConfigurable.put(parentId, parent.addChild(wrapper)); + if (parent != null) { + idToConfigurable.put(parentId, parent.addChild(wrapper)); + } + else { + LOG.error("Can't find parent for " + parentId + " (" + wrapper + ")"); + } } } //leave only roots (i.e. configurables without parents) From b9506e420e923fb83dfbdb5d73b0b0e07375234c Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 8 Feb 2013 18:16:05 +0100 Subject: [PATCH 06/10] Use predefined modality to report fsnotifier problems; revert postponed start --- .../openapi/vfs/impl/local/FileWatcher.java | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java index 9e8750d079cc..631b7d0b3d10 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java @@ -41,7 +41,6 @@ import java.io.File; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.*; -import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import static com.intellij.util.containers.ContainerUtil.*; @@ -81,44 +80,30 @@ public class FileWatcher { private final ManagingFS myManagingFS; private final File myExecutable; - private final AtomicBoolean myInitialized = new AtomicBoolean(false); private volatile MyProcessHandler myProcessHandler; private volatile int myStartAttemptCount = 0; private volatile boolean myIsShuttingDown = false; private volatile boolean myFailureShownToTheUser = false; private final AtomicInteger mySettingRoots = new AtomicInteger(0); - private final ModalityState myDefaultModalityState; /** @deprecated use {@linkplain com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl#getFileWatcher()} (to remove in IDEA 13) */ public static FileWatcher getInstance() { return ((LocalFileSystemImpl)LocalFileSystem.getInstance()).getFileWatcher(); } - FileWatcher(@NotNull final ManagingFS managingFS) { + FileWatcher(@NotNull ManagingFS managingFS) { myManagingFS = managingFS; - // eager initialization to avoid deadlock during component initialization (PY-8724) - myDefaultModalityState = ModalityState.defaultModalityState(); - boolean disabled = Boolean.parseBoolean(System.getProperty(PROPERTY_WATCHER_DISABLED)); myExecutable = getExecutable(); if (disabled) { - myInitialized.set(true); LOG.info("Native file watcher is disabled"); } else if (myExecutable == null) { - myInitialized.set(true); LOG.info("Native file watcher is not supported on this platform"); } - } - - private void init() { - if (!myInitialized.compareAndSet(false, true)) { - return; - } - - if (!myExecutable.exists()) { + else if (!myExecutable.exists()) { notifyOnFailure(ApplicationBundle.message("watcher.exe.not.found"), null); } else if (!myExecutable.canExecute()) { @@ -203,7 +188,7 @@ public class FileWatcher { String title = ApplicationBundle.message("watcher.slow.sync"); Notifications.Bus.notify(NOTIFICATION_GROUP.getValue().createNotification(title, cause, NotificationType.WARNING, listener)); } - }, myDefaultModalityState); + }, ModalityState.NON_MODAL); } } @@ -256,7 +241,7 @@ public class FileWatcher { } public boolean isOperational() { - return !myInitialized.get() || myProcessHandler != null; + return myProcessHandler != null; } public boolean isSettingRoots() { @@ -292,7 +277,6 @@ public class FileWatcher { } public void setWatchRoots(final List recursive, final List flat) { - init(); setWatchRoots(recursive, flat, false); } From da7003f1b6918addfd21dbb33763273dcc7715ef Mon Sep 17 00:00:00 2001 From: Vassiliy Kudryashov Date: Fri, 8 Feb 2013 21:18:56 +0400 Subject: [PATCH 07/10] IDEABKL-6053 IDE buttons Tooltip delay --- .../ide/ui/AppearanceConfigurable.java | 27 +++++++++++++- .../com/intellij/ide/ui/AppearancePanel.form | 35 +++++++++++++++++-- 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java index 9a475c352139..e2b4ded22112 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java @@ -21,6 +21,7 @@ import com.intellij.openapi.options.BaseConfigurable; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.ui.ComboBox; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.wm.ex.WindowManagerEx; import com.intellij.ui.components.JBCheckBox; import com.intellij.util.ui.UIUtil; @@ -66,6 +67,20 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab myComponent.myLafComboBox.setModel(new DefaultComboBoxModel(LafManager.getInstance().getInstalledLookAndFeels())); myComponent.myLafComboBox.setRenderer(new LafComboBoxRenderer()); + Dictionary delayDictionary = new Hashtable(); + delayDictionary.put(new Integer(0), new JLabel("0")); + delayDictionary.put(new Integer(1200), new JLabel("1200")); + //delayDictionary.put(new Integer(2400), new JLabel("2400")); + myComponent.myInitialTooltipDelaySlider.setLabelTable(delayDictionary); + UIUtil.setSliderIsFilled(myComponent.myInitialTooltipDelaySlider, Boolean.TRUE); + myComponent.myInitialTooltipDelaySlider.setMinimum(0); + myComponent.myInitialTooltipDelaySlider.setMaximum(1200); + myComponent.myInitialTooltipDelaySlider.setPaintLabels(true); + myComponent.myInitialTooltipDelaySlider.setPaintTicks(true); + myComponent.myInitialTooltipDelaySlider.setPaintTrack(true); + myComponent.myInitialTooltipDelaySlider.setMajorTickSpacing(1200); + myComponent.myInitialTooltipDelaySlider.setMinorTickSpacing(100); + myComponent.myEnableAlphaModeCheckBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { boolean state = myComponent.myEnableAlphaModeCheckBox.isSelected(); @@ -196,6 +211,11 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab settings.ALPHA_MODE_RATIO = ratio; } } + int tooltipDelay = Math.min(myComponent.myInitialTooltipDelaySlider.getValue(), 5000); + if (tooltipDelay != Registry.intValue("ide.tooltip.initialDelay")) { + update = true; + Registry.get("ide.tooltip.initialDelay").setValue(tooltipDelay); + } if (update) { settings.fireUISettingsChanged(); @@ -240,6 +260,7 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab myComponent.myAlphaModeRatioSlider.setValue(ratio); myComponent.myAlphaModeRatioSlider.setToolTipText(ratio + "%"); myComponent.myAlphaModeRatioSlider.setEnabled(alphaModeEnabled && settings.ENABLE_ALPHA_MODE); + myComponent.myInitialTooltipDelaySlider.setValue(Registry.intValue("ide.tooltip.initialDelay")); myComponent.updateCombo(); } @@ -284,6 +305,9 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab float ratio = myComponent.myAlphaModeRatioSlider.getValue() / 100f; isModified |= ratio != settings.ALPHA_MODE_RATIO; } + int tooltipDelay = -1; + tooltipDelay = myComponent.myInitialTooltipDelaySlider.getValue(); + isModified |= tooltipDelay != Registry.intValue("ide.tooltip.initialDelay"); return isModified; } @@ -320,9 +344,10 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab private JCheckBox myCbDisplayIconsInMenu; private JCheckBox myDisableMnemonics; private JCheckBox myDisableMnemonicInControlsCheckBox; - private JBCheckBox myHideNavigationPopupsCheckBox; + private JCheckBox myHideNavigationPopupsCheckBox; private JCheckBox myAllowMergeButtons; private JBCheckBox myUseSmallLabelsOnTabs; + private JSlider myInitialTooltipDelaySlider; public MyComponent() { myOverrideLAFFonts.addActionListener( new ActionListener() { diff --git a/platform/platform-impl/src/com/intellij/ide/ui/AppearancePanel.form b/platform/platform-impl/src/com/intellij/ide/ui/AppearancePanel.form index 5153fa2eaa2c..01a66b46b136 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/AppearancePanel.form +++ b/platform/platform-impl/src/com/intellij/ide/ui/AppearancePanel.form @@ -16,7 +16,7 @@ - + @@ -147,6 +147,7 @@ + @@ -161,14 +162,42 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 5b10ed4ba6919c805bd2f8b58827446c6b7b144a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 8 Feb 2013 17:26:55 +0100 Subject: [PATCH 08/10] add JSR 305 annotations jar --- lib/jsr305.jar | Bin 0 -> 33015 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/jsr305.jar diff --git a/lib/jsr305.jar b/lib/jsr305.jar new file mode 100644 index 0000000000000000000000000000000000000000..a9afc6619b4b9369f0501d06ceb1cf82a1e47cdd GIT binary patch literal 33015 zcma%@WmFz%)~*TePH=a3cXxMpcXxM!y9W~7fP)j+-e25PyyG!Zj}|3lN1wGR-uy>yO8}lA|p*pHwhhIw_%>8miZ zBaMX2n1m`&)Em-K!KpFP(n!)$$`-j4f~z7g@UyV67D@1aXsoV6Pw0+}AJ3D(9Ll;YXyMNsd z`SVX&4twAdy#WFO2L=Kn{@v}u7N*A5V)jmQt~NGw#x{n|&Y|%mazc!VVJ}YHQS7I+ z3XJ<D2H35g#biQ*-6C$tXo<3g?)f6D;BJMGV*4*Ssy*+l!HulYp z9{_&KsY^s-3TG+#k_^w((AAq$=QMRXPfw(!!>$ zWbz_$aL8b=BXFHhSqbvCd!!(-Ep;ZUe&}m^oWT~e-gm-70m<0GvkaV~K~GFM<}H^o zJxB?kh6#MSqvfsr7GDP%V~SYw{+xfe0VS`x{W>f%To_<=w68W5#ODg5)1RCOKfd`K$JVy(BD8i=ot7W#19~+ za_SOR7{R@Q)`j4E^DAlbfFH4{0MhyZ(&YbdrKAE8<)v}+H5$PiDf~x+`M=ylIsNoFW4=rAm>pGgI;Fi;6 z?6|F_T&c1>PAxIeAeDyc?ER#o;*%ybxQ>b(meBK?<@Dy zt&cZ^LliDV7JMU)4NNk(A`kqokR@^n%b=7g&G+}PrbJ+FPYW7oQxpZDDf_M7w!1ZXdeT+%XEj(RMq9?coG#?>P0P|Wcqy>h zl^d9tNa(nqp!2COKMB^B|Y^_#6M;tsGBi8jqz5SXWfjoeEz&Nlozn` zfHVk%@n?#-q=IiW3Z5B@hhsOs%t?z+PdhvGKuPIolR+NLCL}sZ$&69SA&m2JBMOX2 z`6aDY8Ho<^VL=bbcoH5IYe>S=^>+JXu)++v6bvD?b1eoIqkBafWvTNa?cMXROOabN zG1y>s2gmNV%$v!V(80;HP)EVln8{$%sBUwsDN%XBB6dmk7q}@|MOzNyO){-8aY*ji!eW6r{*+#jp~st{t`nqNk4$SHmw(6u=87`(Fee$=?um8@dsN)J+a1XhHkL7OoaucB>Z++%Hi z$btaSUmHz%}_u$jT?6DL3Cpebqs2Y(WY@`w*V}>!#OQ9FHtwFtvBDlam51@ z39~IjjmBT zg!dU_c$yhZojs#~y&?=o)s*mC5_x06Yb@W=P0TxobL<6mEl@<_(y~oTq1s+dyqHawSr+MkhC#{@Q6Rer}+x#zPF25;zISjcGoTLAG3^W+U0!#rOCip)^*QresLCS%5WHeQpWf!$A@ry!3M#&Co|UA@AE z(ecsrOT10t z5+X%R|NcxuWTWOaWZnZo%OpHZ>9`6v z2Fn6*wU(nMzVBp8<*^?k9KjY(thc1~3UHxmo*GV%SG@2v)i$CD!(RmKgx-1@=WTq~ zZNMIN4$OfH?o30Yh~@Z%pF7yplMj_KNedSHoc|sF`96Qu*qmdk)!gY2c3NlDfi=Ys zXf;kpNNWvqXogUMSmL-0`(N#Jen*pg z39u0tz+F-O&Rxmb+u50#19DY2(|`IZU3nBiRNiSin(uV)p|xlrgBFAe^CF~bv|zww zl)J^HE=8M6DPczF7VWTQZZZ2K&T`Z@-=N?}x7~k?c5iH;B~qO-Iljz(U^PEJjC-%& z`37SkC`2tp-uF{JD$MNR1|Fv2XU8_lrRk|pstm(XXsoHRo6ZF}n1ixQg9dgQ3R0-cJ1 zU4x0?vFFf;(e=LClxlJ#^Way1T$1vzRc0*-E7(%rG627h3MeBMwtuohRoo=XrXHS9 zpkdXKPAwpIqErZ;+l*ChOyiHRwvWz#dGGmogCp2nbObX>x4NW{eaBi?!RqR$szpV? z#a39Ewgt&nw?@{wr9(oo>O4xby4Ff)<6=^+C-z(c^JtggQNB=wCjqHXIV_bbg(W6C z+B_l$DxDFA#hWRYSk4)cpSF}PFqtt>69;l)Uhw2}>h&S7@*u zF2GTZ&lP$=+-uw%C$zGbiR{x&83N*R7lOj#@xwQW0!PR}9D#A5w4aHz(WfL|DBFrk z8Smr)t1L%Y32c{>0*yQDrex}ZB-8RJL?Xw_F$aF{qdvRP%n9gYx-i1q$#<~#)$g>c z83TB~xs5ePlYvTN@!vIDe(^ieQ+IP2t_Aj)f0q?Y^^jcte*YvgQ!Di6xzc;b{&7rJG`3B4LddYKUEw#-{2%;8k^9 z{3FyOnTYwS1ALq_;QSE%m$UO%YWrHNp=J{~fGNItpLdo(Fd4&MrHeEX0;>3ily2k- zs85>yGeWYy^BTmhVm~pX5YhSv%iQf%@c|fV_`V4V$uP0O1ZLJu#&4y}jl8lt5gmDb|K?s};(eQ&~m?0ig??20q zOgGq)*W%6@6bOjyKbZwkKL5j=DX#$B86frQ9Lpu2DT|0uLTu=~-25C;V98*WiA6!l zcxI}d>UP#rJkJ~SqPisraAfvm&x#?R4;B#*Bt0@Ra_+XX7BjxDn6LN)Eqq}{0f*MC zFrr0_gRRIKT&)Qt2hYW#U@~DVO!Rt3s7d3Bp#*m$!0?s55SiA00qqCg3D@Qj`*%Ed zu5U?QoK8iT0JR$Df^%|N3)nH|WE!DPAiQ}Z>i)!CCx zWxA60d;X{#{@^^%5s)ffduBg)ZIyAG){c1;dedrG>L?xrB^nb$EDBAEk4E`X&^<;t zX`wuJjHqLCrmUi{`eVQ&YjOyviju0_>pT^Ph}*Q zElfiPF13=(Q+wy^)$}GL1_@t7#PvxxwES?mDNyg zs!{u8zaeN)cHo%ted$s7M1U@4DKfLdQ@itPkj$N^P~!z0bUuKp@cuuF`YVeWdCg)f z1P#Cx1w{!N`H)Gy95)uH0cnh&ia_Lmp{!g0KTaW91@BkLQZbxaaCEa z=WF@u5d9&vEz}hT`zIDU^eGUSp!lI6iZ*sF=YJ zD*<*Y1zcGawCl!)K6`7+V}C0Z9(JsFsJ&RxYjY2a7`#2IL@igeyKha*Ipu z$ik(>ZW{N+S5wo&xMu;g%~efhJH^1E`egmu&?e+2=sA3!AMKWv@5syRmNk96H~eX! zAbUBsZ<|E3+YNFRqZEVU`+?D!V2w0-k#~4DOvf~1aoDR6)oQ{>dRTfm#DPl@eg$uI z?n8qI01pHJkN;cnfOBkUWb;?&K;dVZ>bqr)CVF-dkXV9l*K&3^BqAH30%fr=H}XQ~SB?(F>q&L~0Dr7-Ns+n9r^oQNbjH@6 zP{E;T~(K76x5LkE)8IVuVZy56MMY9aDW_Mu}ACC zVpK*!g3^)$aXl3#-LZ9ln$8yA3(8}S+)+?+{$bc!MTVqDLXx9b>-toSCtcQO0i`F^ zTCK!jZo~L*qQ+qtW?W<&1~*QJ1|a7pg%axUm+QshCdlBhJuT}`{Oy*Ku@9-)ZIvLuU0$Kphf=;HdNj5;qLY^X~W`?ddE`K_bcv)$X*RG4o!P33zRRMZu z9{Jw-;UUYkmrMx%0Dh_LWTVixa57{`H<&*p`8t2_1L+v7 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 literal 0 HcmV?d00001 From 08659b35544d725b3147d94c8698104390ae7195 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 8 Feb 2013 19:18:43 +0100 Subject: [PATCH 09/10] allow updateJavaParameters() to throw ExecutionException --- .../src/com/intellij/execution/RunConfigurationExtension.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java b/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java index 2353f470ff43..77d2b2db429d 100644 --- a/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java +++ b/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java @@ -37,7 +37,7 @@ import org.jetbrains.annotations.Nullable; public abstract class RunConfigurationExtension extends RunConfigurationExtensionBase{ public static final ExtensionPointName EP_NAME = new ExtensionPointName("com.intellij.runConfigurationExtension"); - public abstract void updateJavaParameters(final T configuration, final JavaParameters params, RunnerSettings runnerSettings); + public abstract void updateJavaParameters(final T configuration, final JavaParameters params, RunnerSettings runnerSettings) throws ExecutionException; @Override From 84dc01e773388c2c72a1fc437f313dd5747e7809 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 8 Feb 2013 20:30:26 +0100 Subject: [PATCH 10/10] Report inotify instances limit error --- bin/linux/fsnotifier | Bin 22809 -> 22734 bytes bin/linux/fsnotifier64 | Bin 29308 -> 29227 bytes native/fsNotifier/linux/fsnotifier.h | 10 ++- native/fsNotifier/linux/inotify.c | 62 +++++++++--------- native/fsNotifier/linux/main.c | 28 +++++--- .../openapi/vfs/impl/local/FileWatcher.java | 2 +- 6 files changed, 60 insertions(+), 42 deletions(-) diff --git a/bin/linux/fsnotifier b/bin/linux/fsnotifier index df7985a5bfc2147a9c26006274ebecda1bf2cbf2..a34b7855db4f8fc3fa4bc66447e74a79d662202d 100755 GIT binary patch delta 6430 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 E1EAmiNB{r; delta 6373 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 GS^gh0MA+^C diff --git a/bin/linux/fsnotifier64 b/bin/linux/fsnotifier64 index 9f0b3a46d2f2488c8b375be26b8227112ad4274d..812e326cd6a1136a4e233e1d3890dc7e1d94cd9a 100755 GIT binary patch delta 7254 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 delta 7343 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 SWAW}U*Pi@Mf3ICI;Qs*Y=07w5 diff --git a/native/fsNotifier/linux/fsnotifier.h b/native/fsNotifier/linux/fsnotifier.h index 0b3e52705513..0140d6be8102 100644 --- a/native/fsNotifier/linux/fsnotifier.h +++ b/native/fsNotifier/linux/fsnotifier.h @@ -21,6 +21,14 @@ #include +// messaging +typedef enum { + MSG_INSTANCE_LIMIT, MSG_WATCH_LIMIT +} MSG; + +void message(MSG id); + + // logging void userlog(int priority, const char* format, ...); @@ -59,8 +67,6 @@ enum { bool init_inotify(); void set_inotify_callback(void (* callback)(char*, int)); int get_inotify_fd(); -int get_watch_count(); -bool watch_limit_reached(); int watch(const char* root, array* mounts); void unwatch(int id); bool process_inotify_input(); diff --git a/native/fsNotifier/linux/inotify.c b/native/fsNotifier/linux/inotify.c index 75a97abc1339..8570d032e782 100644 --- a/native/fsNotifier/linux/inotify.c +++ b/native/fsNotifier/linux/inotify.c @@ -49,30 +49,18 @@ static void (* callback)(char*, int) = NULL; #define EVENT_BUF_LEN (2048 * (EVENT_SIZE + 16)) static char event_buf[EVENT_BUF_LEN]; - -static void read_watch_descriptors_count() { - FILE* f = fopen(WATCH_COUNT_NAME, "r"); - if (f == NULL) { - userlog(LOG_ERR, "can't open %s: %s", WATCH_COUNT_NAME, strerror(errno)); - return; - } - - char* str = read_line(f); - if (str == NULL) { - userlog(LOG_ERR, "can't read from %s", WATCH_COUNT_NAME); - } - else { - watch_count = atoi(str); - } - - fclose(f); -} +static void read_watch_descriptors_count(); +static void watch_limit_reached(); bool init_inotify() { inotify_fd = inotify_init(); if (inotify_fd < 0) { - userlog(LOG_ERR, "inotify_init: %s", strerror(errno)); + int e = errno; + userlog(LOG_ERR, "inotify_init: %s", strerror(e)); + if (e == EMFILE) { + message(MSG_INSTANCE_LIMIT); + } return false; } userlog(LOG_DEBUG, "inotify fd: %d", get_inotify_fd()); @@ -96,6 +84,24 @@ bool init_inotify() { return true; } +static void read_watch_descriptors_count() { + FILE* f = fopen(WATCH_COUNT_NAME, "r"); + if (f == NULL) { + userlog(LOG_ERR, "can't open %s: %s", WATCH_COUNT_NAME, strerror(errno)); + return; + } + + char* str = read_line(f); + if (str == NULL) { + userlog(LOG_ERR, "can't read from %s", WATCH_COUNT_NAME); + } + else { + watch_count = atoi(str); + } + + fclose(f); +} + inline void set_inotify_callback(void (* _callback)(char*, int)) { callback = _callback; @@ -107,16 +113,6 @@ inline int get_inotify_fd() { } -inline int get_watch_count() { - return watch_count; -} - - -inline bool watch_limit_reached() { - return limit_reached; -} - - #define EVENT_MASK IN_MODIFY | IN_ATTRIB | IN_CREATE | IN_DELETE | IN_MOVE | IN_DELETE_SELF static int add_watch(const char* path, watch_node* parent) { @@ -128,7 +124,7 @@ static int add_watch(const char* path, watch_node* parent) { } else if (errno == ENOSPC) { userlog(LOG_WARNING, "inotify_add_watch(%s): %s", path, strerror(errno)); - limit_reached = true; + watch_limit_reached(); return ERR_CONTINUE; } else { @@ -188,6 +184,12 @@ static int add_watch(const char* path, watch_node* parent) { return wd; } +static void watch_limit_reached() { + if (!limit_reached) { + limit_reached = true; + message(MSG_WATCH_LIMIT); + } +} static void rm_watch(int wd, bool update_parent) { watch_node* node = table_get(watches, wd); diff --git a/native/fsNotifier/linux/main.c b/native/fsNotifier/linux/main.c index 87fcf26139b9..27372e35acc1 100644 --- a/native/fsNotifier/linux/main.c +++ b/native/fsNotifier/linux/main.c @@ -48,8 +48,12 @@ #define HELP_MSG \ "Try 'fsnotifier --help' for more information.\n" -#define INOTIFY_LIMIT_MSG \ - "The current inotify(7) watch limit of %d is too low. " \ +#define INSTANCE_LIMIT_TEXT \ + "The inotify(7) instances limit reached. " \ + "More details.\n" + +#define WATCH_LIMIT_TEXT \ + "The current inotify(7) watch limit is too low. " \ "More details.\n" typedef struct { @@ -59,7 +63,6 @@ typedef struct { static array* roots = NULL; -static bool show_warning = true; static bool self_test = false; static void init_log(); @@ -152,6 +155,19 @@ static void init_log() { } +void message(MSG id) { + if (id == MSG_INSTANCE_LIMIT) { + output("MESSAGE\n" INSTANCE_LIMIT_TEXT); + } + else if (id == MSG_WATCH_LIMIT) { + output("MESSAGE\n" WATCH_LIMIT_TEXT); + } + else { + userlog(LOG_ERR, "unknown message: %d", id); + } +} + + void userlog(int priority, const char* format, ...) { va_list ap; @@ -353,12 +369,6 @@ static bool register_roots(array* new_roots, array* unwatchable, array* mounts) return false; } else if (id != ERR_IGNORE) { - if (show_warning && watch_limit_reached()) { - int limit = get_watch_count(); - userlog(LOG_WARNING, "watch limit (%d) reached", limit); - output("MESSAGE\n" INOTIFY_LIMIT_MSG, limit); - show_warning = false; // warn only once - } CHECK_NULL(array_push(unwatchable, strdup(unflattened)), false); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java index 631b7d0b3d10..20ee724be726 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/FileWatcher.java @@ -173,7 +173,7 @@ public class FileWatcher { private static boolean isUpToDate(File executable) { long length = SystemInfo.isWindows ? 70216 : SystemInfo.isMac ? 13924 : - SystemInfo.isLinux ? SystemInfo.isAMD64 ? 29308 : 22809 : + SystemInfo.isLinux ? SystemInfo.isAMD64 ? 29227 : 22734 : -1; return length < 0 || length == executable.length(); }