From 7cf24e2b5ac9635a10f7aafebcfb2ce730f5a650 Mon Sep 17 00:00:00 2001 From: nik Date: Mon, 14 Sep 2015 12:38:52 +0300 Subject: [PATCH 01/11] removed useless warnings about modules which aren't included into distribution --- build/scripts/layouts.gant | 2 -- build/scripts/scripts.gdsl | 1 - build/scripts/utils.gant | 8 -------- 3 files changed, 11 deletions(-) diff --git a/build/scripts/layouts.gant b/build/scripts/layouts.gant index ebfbd508a25e..7cc6f4a3a424 100644 --- a/build/scripts/layouts.gant +++ b/build/scripts/layouts.gant @@ -315,8 +315,6 @@ def layoutFull(String home, String targetDirectory, String patchedDescriptorDir // product specific custom layout customLayout(targetDirectory) - printUnusedModules(info.usedModules) - reorder(home, targetDirectory) return info } diff --git a/build/scripts/scripts.gdsl b/build/scripts/scripts.gdsl index e2e683982548..75712eeb0ef9 100644 --- a/build/scripts/scripts.gdsl +++ b/build/scripts/scripts.gdsl @@ -6,7 +6,6 @@ contributor ([ctx], { method name:"findModule", type:"org.jetbrains.jps.model.module.JpsModule", params:[name:"String"] method name:"requireProperty", type:"String", params:[key:"String"] method name:"requireProperty", type:"String", params:[key:"String", defaultValue:"String"] - method name:"printUnusedModules", type:"void", params:[usedModules:"java.util.Set"] method name:"notifyArtifactBuilt", type:"void", params:[artifactPath:"String"] property name: "productProperties", type: "ProductProperties" }) \ No newline at end of file diff --git a/build/scripts/utils.gant b/build/scripts/utils.gant index ab82ef6409fb..7da6917b57c2 100644 --- a/build/scripts/utils.gant +++ b/build/scripts/utils.gant @@ -246,14 +246,6 @@ binding.setVariable("allModules", { return project.modules }) -binding.setVariable("printUnusedModules", {Set usedModules -> - allModules().each {JpsModule m -> - if (!usedModules.contains(m.name) && hasSourceRoots(m)) { - projectBuilder.warning("Module $m.name is not used in project layout") - } - } -}) - requireProperty("home", guessHome()) String readSnapshotBuild() { From ec1818c2b261847cf403681c828021cb17d901c1 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 14 Sep 2015 11:55:44 +0200 Subject: [PATCH 02/11] in file smart pointers, remember tha language that should be used to find the PsiFile: it can be different from file.getLangage() --- .../impl/smartPointers/FileElementInfo.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java index 5258c83bddf3..13a6e1e0796d 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java +++ b/platform/core-impl/src/com/intellij/psi/impl/smartPointers/FileElementInfo.java @@ -16,6 +16,7 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.lang.Language; +import com.intellij.lang.LanguageUtil; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; @@ -34,18 +35,14 @@ import org.jetbrains.annotations.Nullable; * User: cdr */ class FileElementInfo extends SmartPointerElementInfo { - protected final VirtualFile myVirtualFile; - protected final Project myProject; - protected final Language myLanguage; + private final VirtualFile myVirtualFile; + private final Project myProject; + private final Language myLanguage; - public FileElementInfo(@NotNull PsiFile file) { - this(file.getProject(), file.getVirtualFile(), file.getLanguage()); - } - - protected FileElementInfo(@NotNull Project project, VirtualFile virtualFile, Language lang) { - myVirtualFile = virtualFile; - myProject = project; - myLanguage = lang; + public FileElementInfo(@NotNull final PsiFile file) { + myVirtualFile = file.getVirtualFile(); + myProject = file.getProject(); + myLanguage = LanguageUtil.getRootLanguage(file); } @Override From 6887b23e63ce24553a1eeef3a465132baa2482fa Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Sat, 12 Sep 2015 13:21:18 +0200 Subject: [PATCH 03/11] + indeterminate animation effect resources --- .../ide/ui/laf/icons/graphite/progressShadow.png | Bin 0 -> 425 bytes .../ui/laf/icons/graphite/progressShadow@2x.png | Bin 0 -> 1946 bytes .../intellij/ide/ui/laf/icons/progressShadow.png | Bin 0 -> 425 bytes .../ide/ui/laf/icons/progressShadow@2x.png | Bin 0 -> 1946 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/ide/ui/laf/icons/graphite/progressShadow.png create mode 100644 platform/platform-impl/src/com/intellij/ide/ui/laf/icons/graphite/progressShadow@2x.png create mode 100644 platform/platform-impl/src/com/intellij/ide/ui/laf/icons/progressShadow.png create mode 100644 platform/platform-impl/src/com/intellij/ide/ui/laf/icons/progressShadow@2x.png diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/icons/graphite/progressShadow.png b/platform/platform-impl/src/com/intellij/ide/ui/laf/icons/graphite/progressShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..47fec3ddeb9a50eb98c8708126d22b6719cfc50c GIT binary patch literal 425 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 Date: Sat, 12 Sep 2015 13:22:13 +0200 Subject: [PATCH 04/11] implement indeterminate progress bars for yosemite --- .../laf/intellij/MacIntelliJProgressBarUI.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/MacIntelliJProgressBarUI.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/MacIntelliJProgressBarUI.java index b7b26938150f..73697328e209 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/MacIntelliJProgressBarUI.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/intellij/MacIntelliJProgressBarUI.java @@ -20,6 +20,7 @@ import com.intellij.ide.ui.laf.darcula.ui.DarculaProgressBarUI; import javax.swing.*; import javax.swing.plaf.ComponentUI; import java.awt.*; +import java.awt.geom.RoundRectangle2D; /** * @author Konstantin Bulenkov @@ -83,12 +84,13 @@ public class MacIntelliJProgressBarUI extends DarculaProgressBarUI { } } + protected volatile int position = 0; @Override protected void paintIndeterminate(Graphics g, JComponent c) { Insets insets = progressBar.getInsets(); int w = c.getWidth(); int h = c.getHeight(); - int y = (h - HEIGHT) / 2; + int y = (h - HEIGHT) / 2 + insets.top; int x = insets.left; Icon icon; @@ -106,5 +108,19 @@ public class MacIntelliJProgressBarUI extends DarculaProgressBarUI { gg.dispose(); icon = MacIntelliJIconCache.getIcon("progressRight", true, false); icon.paintIcon(c, g, stop, y); + + Icon shadow = MacIntelliJIconCache.getIcon("progressShadow"); + int boxWidth = w - insets.left - insets.right; + if (boxWidth <= 0) return; + gg = g.create(0, 0, w, h); + gg.setClip(new RoundRectangle2D.Double(insets.left, y, boxWidth, HEIGHT, HEIGHT, HEIGHT)); + shadow.paintIcon(c, gg, position, y); + int xx = boxWidth - (position + shadow.getIconWidth()); + if (xx < 0) { + shadow.paintIcon(c, gg, -xx - shadow.getIconWidth(), y); + } + position++; + position = position % boxWidth; + gg.dispose(); } } From 41b3657a89581d2a64d0d76d2a82b1993445e13a Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 14 Sep 2015 12:04:22 +0200 Subject: [PATCH 05/11] implement PsiManager.findFile for default project (needed for smart pointer restoration) --- .../core-impl/src/com/intellij/psi/impl/EmptyFileManager.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/core-impl/src/com/intellij/psi/impl/EmptyFileManager.java b/platform/core-impl/src/com/intellij/psi/impl/EmptyFileManager.java index 0bc49160f796..36b7692bfa02 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/EmptyFileManager.java +++ b/platform/core-impl/src/com/intellij/psi/impl/EmptyFileManager.java @@ -46,7 +46,8 @@ class EmptyFileManager implements FileManager { @Override public PsiFile findFile(@NotNull VirtualFile vFile) { - return null; + FileViewProvider viewProvider = findViewProvider(vFile); + return viewProvider == null ? null : viewProvider.getPsi(viewProvider.getBaseLanguage()); } @Override From cbdd540b585f97cb8c49d2b694872b24a6cb7cf5 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Fri, 11 Sep 2015 15:36:30 +0300 Subject: [PATCH 06/11] IDEA-132765 Floating progress indicator doesn't disappear after exiting Distraction Free mode or Presentation mode --- .../wm/impl/status/InfoAndProgressPanel.java | 70 +++++++++---------- .../status/PresentationModeProgressPanel.java | 10 ++- 2 files changed, 42 insertions(+), 38 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java index a3ae87811322..5f76c973effe 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java @@ -15,7 +15,6 @@ */ package com.intellij.openapi.wm.impl.status; -import com.intellij.ide.ui.UISettings; import com.intellij.idea.ActionsBundle; import com.intellij.notification.EventLog; import com.intellij.openapi.actionSystem.ActionGroup; @@ -376,45 +375,42 @@ public class InfoAndProgressPanel extends JPanel implements CustomStatusBarWidge myRefreshAndInfoPanel.revalidate(); myRefreshAndInfoPanel.repaint(); - UISettings uiSettings = UISettings.getInstance(); - if (uiSettings.PRESENTATION_MODE || !uiSettings.SHOW_STATUS_BAR && Registry.is("ide.show.progress.without.status.bar")) { - final JRootPane pane = myInfoPanel.getRootPane(); - assert pane != null; - final PresentationModeProgressPanel panel = new PresentationModeProgressPanel(inline); - final MyInlineProgressIndicator delegate = new MyInlineProgressIndicator(true, inline.getInfo(), inline) { - @Override - protected void updateProgress() { - super.updateProgress(); - panel.update(); - } - }; + final JRootPane pane = myInfoPanel.getRootPane(); + assert pane != null; + final PresentationModeProgressPanel panel = new PresentationModeProgressPanel(inline); + MyInlineProgressIndicator delegate = new MyInlineProgressIndicator(true, inline.getInfo(), inline) { + @Override + protected void updateProgress() { + super.updateProgress(); + panel.update(); + } + }; - Disposer.register(inline, delegate); + Disposer.register(inline, delegate); - final Component anchor = getAnchor(pane); + Component anchor = getAnchor(pane); - JBPopupFactory.getInstance().createBalloonBuilder(panel.getProgressPanel()) - .setFadeoutTime(0) - .setFillColor(Gray.TRANSPARENT) - .setShowCallout(false) - .setBorderColor(Gray.TRANSPARENT) - .setBorderInsets(JBUI.emptyInsets()) - .setAnimationCycle(0) - .setCloseButtonEnabled(false) - .setHideOnClickOutside(false) - .setDisposable(inline) - .setHideOnFrameResize(false) - .setHideOnKeyOutside(false) - .setBlockClicksThroughBalloon(true) - .setHideOnAction(false) - .createBalloon().show(new PositionTracker(anchor) { - @Override - public RelativePoint recalculateLocation(Balloon object) { - Component c = getAnchor(pane); - return new RelativePoint(c, new Point(c.getWidth() - 150, c.getHeight() - 45)); - } - }, Balloon.Position.above); - } + JBPopupFactory.getInstance().createBalloonBuilder(panel.getProgressPanel()) + .setFadeoutTime(0) + .setFillColor(Gray.TRANSPARENT) + .setShowCallout(false) + .setBorderColor(Gray.TRANSPARENT) + .setBorderInsets(JBUI.emptyInsets()) + .setAnimationCycle(0) + .setCloseButtonEnabled(false) + .setHideOnClickOutside(false) + .setDisposable(inline) + .setHideOnFrameResize(false) + .setHideOnKeyOutside(false) + .setBlockClicksThroughBalloon(true) + .setHideOnAction(false) + .createBalloon().show(new PositionTracker(anchor) { + @Override + public RelativePoint recalculateLocation(Balloon object) { + Component c = getAnchor(pane); + return new RelativePoint(c, new Point(c.getWidth() - 150, c.getHeight() - 45)); + } + }, Balloon.Position.above); } @NotNull diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java index c219b98bbf74..badefdc4bb23 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java @@ -16,8 +16,10 @@ package com.intellij.openapi.wm.impl.status; import com.intellij.icons.AllIcons; +import com.intellij.ide.ui.UISettings; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.ui.popup.IconButton; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.InplaceButton; import com.intellij.ui.TransparentPanel; @@ -98,7 +100,13 @@ public class PresentationModeProgressPanel { } private void createUIComponents() { - myRootPanel = new TransparentPanel(0.5f); + myRootPanel = new TransparentPanel(0.5f) { + @Override + public boolean isVisible() { + UISettings ui = UISettings.getInstance(); + return ui.PRESENTATION_MODE || !ui.SHOW_STATUS_BAR && Registry.is("ide.show.progress.without.status.bar"); + } + }; final IconButton iconButton = new IconButton(myProgress.getInfo().getCancelTooltipText(), AllIcons.Process.Stop, AllIcons.Process.StopHovered); From 67b58dc6c59f7791407b7987e08a3765ecf0c6b3 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Mon, 14 Sep 2015 13:04:34 +0300 Subject: [PATCH 07/11] PresentationModeProgressPanel: dispose cancel button --- .../wm/impl/status/PresentationModeProgressPanel.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java index badefdc4bb23..3266083f32da 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java @@ -17,14 +17,17 @@ package com.intellij.openapi.wm.impl.status; import com.intellij.icons.AllIcons; import com.intellij.ide.ui.UISettings; +import com.intellij.openapi.Disposable; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.ui.popup.IconButton; +import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.InplaceButton; import com.intellij.ui.TransparentPanel; import com.intellij.util.ui.EmptyIcon; import com.intellij.util.ui.JBUI; +import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.update.MergingUpdateQueue; import com.intellij.util.ui.update.Update; import org.jetbrains.annotations.NotNull; @@ -61,6 +64,12 @@ public class PresentationModeProgressPanel { updateImpl(); } }; + Disposer.register(progress, new Disposable() { + @Override + public void dispose() { + UIUtil.dispose(myCancelButton); + } + }); } public void update() { From ecf79bf051752fee877d9146a6f88e9a5564a2a3 Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Mon, 14 Sep 2015 13:06:15 +0300 Subject: [PATCH 08/11] public -> private --- .../openapi/wm/impl/status/PresentationModeProgressPanel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java index 3266083f32da..a778dd0fd394 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/PresentationModeProgressPanel.java @@ -77,7 +77,7 @@ public class PresentationModeProgressPanel { } @NotNull - public Color getTextForeground() { + private static Color getTextForeground() { return EditorColorsManager.getInstance().getGlobalScheme().getDefaultForeground(); } From 0ba37afe5607b1c142af2da01cc770bec190155a Mon Sep 17 00:00:00 2001 From: Dmitry Batkovich Date: Mon, 14 Sep 2015 13:17:45 +0300 Subject: [PATCH 09/11] ResourceBundleAsVirtualFile#isValid method is rewritten to check validity of resource bundle virtual files. Based on exception from IDEA-145012 --- .../properties/editor/ResourceBundleAsVirtualFile.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java index 8885d4125c18..f3f79d086d65 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java @@ -17,6 +17,7 @@ package com.intellij.lang.properties.editor; import com.intellij.ide.presentation.Presentation; import com.intellij.lang.properties.ResourceBundle; +import com.intellij.lang.properties.ResourceBundleImpl; import com.intellij.lang.properties.psi.PropertiesFile; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; @@ -97,6 +98,15 @@ public class ResourceBundleAsVirtualFile extends VirtualFile { @Override public boolean isValid() { + if (myResourceBundle instanceof ResourceBundleImpl && !((ResourceBundleImpl)myResourceBundle).isValid()) { + return false; + } + for (PropertiesFile propertiesFile : myResourceBundle.getPropertiesFiles()) { + final VirtualFile virtualFile = propertiesFile.getVirtualFile(); + if (virtualFile == null || !virtualFile.isValid()) { + return false; + } + } return true; } From ccb23843f99b81ebd6a26e2de5ee688c9a37c981 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Mon, 14 Sep 2015 13:13:50 +0300 Subject: [PATCH 10/11] new sampling coverage under -Didea.new.sampling.coverage --- .../coverage-common/lib/coverage-agent.jar | Bin 33644 -> 33869 bytes plugins/coverage-common/lib/coverage-src.zip | Bin 58248 -> 61400 bytes plugins/coverage-common/lib/coverage-util.jar | Bin 21476 -> 21476 bytes plugins/coverage-common/lib/instrumenter.jar | Bin 57873 -> 65077 bytes 4 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 plugins/coverage-common/lib/coverage-agent.jar mode change 100644 => 100755 plugins/coverage-common/lib/coverage-src.zip mode change 100644 => 100755 plugins/coverage-common/lib/coverage-util.jar mode change 100644 => 100755 plugins/coverage-common/lib/instrumenter.jar diff --git a/plugins/coverage-common/lib/coverage-agent.jar b/plugins/coverage-common/lib/coverage-agent.jar old mode 100644 new mode 100755 index b14e6bba316a4a49e1dce9590a34d659aa5129fa..d5519b0011e902ecddf5ccc36c824b09528b77fb GIT binary patch delta 12495 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 diff --git a/plugins/coverage-common/lib/coverage-src.zip b/plugins/coverage-common/lib/coverage-src.zip old mode 100644 new mode 100755 index be5952a5000912c3181518f138d751f57c8fb6c0..88672b04182bd80844f01cf1dcdafcd6354f0a7f GIT binary patch delta 15267 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 delta 12228 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 AmH+?% diff --git a/plugins/coverage-common/lib/coverage-util.jar b/plugins/coverage-common/lib/coverage-util.jar old mode 100644 new mode 100755 index 76f8cbd4bfaf0774c191c9483535117481f8a781..a4e0ed2566375bfdce4d22dc76a75cc8480c053a GIT binary patch delta 488 zcmaE|obkzWM!o=VW)?065YW%pbDzkk!~&*G)FE`d7KH9KhR{cBSagBvCbKYhfCVN` zV6=cR&M>-w8Jk6zSXdw|88%H$2+NaSff2&W6)0x~vnF?mdrsyEklpMjW&xG!65j#U z=_ZrGA_#H_*kw?{Zn7ei(d2*roST0s2(v+q6IB1lgrQIus8DgTT@e4~0ImOw7}DmG z9rcYiPtuvk1Tn)zzZL4ty%y2}5V1QR2O+YP7kV2(+I9KsOtv4SuHe4HVS={`P? zV0rEn4iRzk^?)$?d_y3NXTB*AhM!+5gt6T(3&K$KhX&?G{|1PNX#kY5GoT70Vjh?Q gVJr@ehA^0dpmxOuB|=0F1;s-cs=*NuMq_X?05K7SWB>pF delta 488 zcmaE|obkzWM!o=VW)?065Xfym=r)m0i3LoXs6*&@EePFf455$Mu;c*MO=e;201Hf> zz-R$soMChUGd7Dbv9Lf`GHjZh5SAyu0waW#D^Sh~W=-xA_ngcTAiLR5%mOOcCB6fy z(@iFWMG)i=u*;x?-DE{3qsjmLIXC}O5N3lIC#e392}7YSP@&>vyCD9}0b2hVF{I5W zJL(&4o}@F631Wtcek;_Odo82|AYyks4nkxnFZ4Eoxc9oZIfNnPV+COZ_&7rt(|vp( z!SdWE93tZ6>j7c(`G!Ck&wNuL3_rhA2xGfn7KEYd4-L$X{tXZj(*P)AXFwH1#5^zq g!dM&_4Ph_^LG6kSN`#0U3W|p?RD&ZRjK<((03$f8MgRZ+ diff --git a/plugins/coverage-common/lib/instrumenter.jar b/plugins/coverage-common/lib/instrumenter.jar old mode 100644 new mode 100755 index ecb94e36e0808f0dfcff5b3eab5d6d4d45e118fd..4cdf2a54e43090854c188692cfbfff6502e8df2b GIT binary patch delta 17192 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 W*YUq(d=xqeI*7q%jhvIePyatIc7o~v From b65f7aa3e3853a76b3ad849c7ce62cb76091d231 Mon Sep 17 00:00:00 2001 From: Denis Fokin Date: Mon, 14 Sep 2015 13:20:22 +0300 Subject: [PATCH 11/11] IDEA-133942 Focus often stays in editor when dialogs are shown --- .../ApplicationActivationListener.java | 15 +- .../ApplicationActivationStateManager.java | 155 ++++++++++++++++++ .../src/com/intellij/ide/IdeEventQueue.java | 60 +++---- .../application/impl/ApplicationImpl.java | 51 ++---- .../openapi/wm/impl/FocusManagerImpl.java | 64 +------- .../util/resources/misc/registry.properties | 3 +- 6 files changed, 222 insertions(+), 126 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/ide/ApplicationActivationStateManager.java diff --git a/platform/platform-api/src/com/intellij/openapi/application/ApplicationActivationListener.java b/platform/platform-api/src/com/intellij/openapi/application/ApplicationActivationListener.java index b3bd61717912..5ad5f6e569e8 100644 --- a/platform/platform-api/src/com/intellij/openapi/application/ApplicationActivationListener.java +++ b/platform/platform-api/src/com/intellij/openapi/application/ApplicationActivationListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2014 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,11 +34,24 @@ public interface ApplicationActivationListener { */ void applicationDeactivated(IdeFrame ideFrame); + /** + * This is more precise notification than {code applicationDeactivated} callback. + * It is intended for focus subsystem and purposes where we do not want + * to be bothered by false application deactivation events. + * + * The shortcoming of the method is that a notification is delivered + * with a delay. See {code app.deactivation.timeout} key in the registry + */ + void delayedApplicationDeactivated(IdeFrame ideFrame); + abstract class Adapter implements ApplicationActivationListener { @Override public void applicationActivated(IdeFrame ideFrame) { } @Override public void applicationDeactivated(IdeFrame ideFrame) { } + + @Override + public void delayedApplicationDeactivated(IdeFrame ideFrame) { } } } diff --git a/platform/platform-impl/src/com/intellij/ide/ApplicationActivationStateManager.java b/platform/platform-impl/src/com/intellij/ide/ApplicationActivationStateManager.java new file mode 100644 index 000000000000..d7549efbc7e3 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/ide/ApplicationActivationStateManager.java @@ -0,0 +1,155 @@ +/* + * Copyright 2000-2015 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.ide; + +import com.intellij.openapi.application.Application; +import com.intellij.openapi.application.ApplicationActivationListener; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.impl.ApplicationImpl; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.registry.Registry; +import com.intellij.openapi.wm.IdeFrame; +import com.intellij.util.ui.UIUtil; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowEvent; +import java.util.concurrent.atomic.AtomicLong; + +/** + * @author Denis Fokin + */ +public class ApplicationActivationStateManager { + + private static final Logger LOG = Logger.getInstance("#com.intellij.ide.ApplicationActivationStateManager"); + + private static AtomicLong requestToDeactivateTime = new AtomicLong(System.currentTimeMillis()); + + private static ApplicationActivationStateManager instance = new ApplicationActivationStateManager(); + + public static ApplicationActivationStateManager get () { + return instance; + } + + private ApplicationActivationStateManager() {} + + public enum State { + ACTIVE, + DEACTIVATED, + DEACTIVATING; + + public boolean isInactive () { + return !this.equals(ACTIVE); + } + + public boolean isActive() { + return this.equals(ACTIVE); + } + }; + + private static State state = State.DEACTIVATED; + + public static State getState() { + return state; + } + + public static boolean updateState (final WindowEvent windowEvent) { + + final Application application = ApplicationManager.getApplication(); + if (!(application instanceof ApplicationImpl)) return false; + + final Window eventWindow = windowEvent.getWindow(); + + if (windowEvent.getID() == WindowEvent.WINDOW_ACTIVATED || windowEvent.getID() == WindowEvent.WINDOW_GAINED_FOCUS) { + + if (state.isInactive()) { + Window window = windowEvent.getWindow(); + + return setActive(application, window); + } + } + else if (windowEvent.getID() == WindowEvent.WINDOW_DEACTIVATED && windowEvent.getOppositeWindow() != null) { + requestToDeactivateTime.getAndSet(System.currentTimeMillis()); + + // For stuff that cannot wait windowEvent notify about deactivation immediately + if (state.isActive()) { + + IdeFrame ideFrame = getIdeFrameFromWindow(windowEvent.getWindow()); + if (ideFrame != null) { + application.getMessageBus().syncPublisher(ApplicationActivationListener.TOPIC).applicationDeactivated(ideFrame); + } + } + + // We do not know for sure that application is going to be inactive, + // windowEvent could just be showing a popup or another transient window. + // So let's postpone the application deactivation for a while + state = State.DEACTIVATING; + LOG.info("SET APP DEACTIVATING"); + + Timer timer = new Timer(Registry.intValue("application.deactivation.timeout"), new ActionListener() { + public void actionPerformed(ActionEvent evt) { + + if (state.equals(State.DEACTIVATING)) { + + state = State.DEACTIVATED; + LOG.info("SET APP DEACTIVATED"); + + IdeFrame ideFrame = getIdeFrameFromWindow(windowEvent.getWindow()); + if (ideFrame != null) { + application.getMessageBus().syncPublisher(ApplicationActivationListener.TOPIC).delayedApplicationDeactivated(ideFrame); + } + } + + } + }); + + timer.setRepeats(false); + timer.start(); + return true; + } + return false; + } + + private static boolean setActive(Application application, Window window) { + IdeFrame ideFrame = getIdeFrameFromWindow(window); + + state = State.ACTIVE; + LOG.info("SET APP ACTIVE"); + + if (ideFrame != null) { + application.getMessageBus().syncPublisher(ApplicationActivationListener.TOPIC).applicationActivated(ideFrame); + return true; + } + return false; + } + + public static void updateState(Window window) { + final Application application = ApplicationManager.getApplication(); + if (!(application instanceof ApplicationImpl)) return; + + if (state.isInactive() && window != null) { + setActive(application, window); + } + } + + private static IdeFrame getIdeFrameFromWindow (Window window) { + final Component frame = UIUtil.findUltimateParent(window); + return (frame instanceof IdeFrame) ? (IdeFrame)frame : null; + } + +} diff --git a/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java b/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java index 2bcc4c3e5314..9e8ff71ded75 100644 --- a/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java +++ b/platform/platform-impl/src/com/intellij/ide/IdeEventQueue.java @@ -25,7 +25,6 @@ import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.ex.ApplicationEx; -import com.intellij.openapi.application.impl.ApplicationImpl; import com.intellij.openapi.application.impl.LaterInvocator; import com.intellij.openapi.diagnostic.FrequentEventDetector; import com.intellij.openapi.diagnostic.Logger; @@ -39,7 +38,10 @@ import com.intellij.openapi.util.ExpirableRunnable; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.wm.IdeFocusManager; +import com.intellij.openapi.wm.IdeFrame; +import com.intellij.openapi.wm.WindowManager; import com.intellij.openapi.wm.ex.WindowManagerEx; +import com.intellij.openapi.wm.impl.FocusManagerImpl; import com.intellij.util.Alarm; import com.intellij.util.ReflectionUtil; import com.intellij.util.containers.ContainerUtil; @@ -524,9 +526,7 @@ public class IdeEventQueue extends EventQueue { traceClipboardEvents(e); - if (e instanceof WindowEvent) { - processAppActivationEvents((WindowEvent)e); - } + if (processAppActivationEvents(e)) return; if (!typeAheadFlushing) { fixStickyFocusedComponents(e); @@ -816,32 +816,36 @@ public class IdeEventQueue extends EventQueue { return peekEvent(WindowEvent.WINDOW_OPENED) != null; } - private static final int APP_DEACTIVATION_DELAY = 50; - private static final Alarm ourDeactivationAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD); + private static boolean processAppActivationEvents(AWTEvent e) { - /* - * This method processes "external" focus events (i.e. those induced by a window manager) and tracks - * an application activation/deactivation state from them (an application is active if at least one it's windows has the focus). - * - * One special case is closing a child dialog: it generates a focus-lost event immediately followed by a focus-gained one. - * To avoid (or rather reduce a chance of) unneeded app-deactivation event the processing of the focus-lost event - * is slightly delayed. - */ - private static void processAppActivationEvents(final WindowEvent e) { - if ((e.getID() == WindowEvent.WINDOW_GAINED_FOCUS || e.getID() == WindowEvent.WINDOW_LOST_FOCUS) && e.getOppositeWindow() == null) { - final Application app = ApplicationManager.getApplication(); - if (app instanceof ApplicationImpl) { - if (e.getID() == WindowEvent.WINDOW_GAINED_FOCUS) { - ourDeactivationAlarm.cancelAllRequests(); - ((ApplicationImpl)app).tryToApplyActivationState(e.getWindow(), true); - } - else { - ourDeactivationAlarm.addRequest(new Runnable() { - @Override - public void run() { - ((ApplicationImpl)app).tryToApplyActivationState(e.getWindow(), false); + if (e instanceof WindowEvent) { + final WindowEvent we = (WindowEvent)e; + + ApplicationActivationStateManager.get().updateState(we); + + storeLastFocusedComponent(we); + } + + return false; + } + + private static void storeLastFocusedComponent(WindowEvent we) { + final Window eventWindow = we.getWindow(); + + if (we.getID() == WindowEvent.WINDOW_DEACTIVATED || we.getID() == WindowEvent.WINDOW_LOST_FOCUS) { + Component frame = UIUtil.findUltimateParent(eventWindow); + Component focusOwnerInDeactivatedWindow = eventWindow.getMostRecentFocusOwner(); + IdeFrame[] allProjectFrames = WindowManager.getInstance().getAllProjectFrames(); + + if (focusOwnerInDeactivatedWindow != null) { + for (IdeFrame ideFrame : allProjectFrames) { + JFrame aFrame = WindowManager.getInstance().getFrame(ideFrame.getProject()); + if (aFrame.equals(frame)) { + IdeFocusManager focusManager = IdeFocusManager.getGlobalInstance(); + if (focusManager instanceof FocusManagerImpl) { + ((FocusManagerImpl)focusManager).setLastFocusedAtDeactivation(ideFrame, focusOwnerInDeactivatedWindow); } - }, APP_DEACTIVATION_DELAY); + } } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index 2fc6e7e97b73..b8bfe9ff8765 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -57,7 +57,6 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtilRt; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.CharsetToolkit; -import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.WindowManager; import com.intellij.psi.PsiLock; import com.intellij.ui.Splash; @@ -126,8 +125,6 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App private boolean myLoaded; private static final String WAS_EVER_SHOWN = "was.ever.shown"; - private volatile boolean myActive; - private static final int IS_EDT_FLAG = 1<<30; // we don't mess with sign bit since we want to do arithmetic private static final int IS_READ_LOCK_ACQUIRED_FLAG = 1<<29; @@ -1179,46 +1176,18 @@ public class ApplicationImpl extends PlatformComponentManagerImpl implements App return true; } - /** - * !!!!! CAUTION !!!!! - * !!!!! CAUTION !!!!! - * !!!!! CAUTION !!!!! - * - * THIS IS AN "ABSOLUTELY-GURU METHOD". - * NOBODY AND UNDER ANY CIRCUMSTANCES SHOULD ADD OTHER USAGES OF IT :) - * ONLY DENIS IS PERMITTED TO USE THIS METHOD!!! - * - * !!!!! CAUTION !!!!! - * !!!!! CAUTION !!!!! - * !!!!! CAUTION !!!!! - * - * There are no legitimate usages of the method outside of IdeEventQueue.processAppActivationEvents() - */ - public void tryToApplyActivationState(Window window, boolean activation) { - if (activation && !isActive()) { - myActive = true; - IdeFrame ideFrame = getIdeFrameFromWindow(window); - if (ideFrame != null) { - getMessageBus().syncPublisher(ApplicationActivationListener.TOPIC).applicationActivated(ideFrame); - } - } - else if (!activation && isActive()) { - myActive = false; - IdeFrame ideFrame = getIdeFrameFromWindow(window); - if (ideFrame != null) { - getMessageBus().syncPublisher(ApplicationActivationListener.TOPIC).applicationDeactivated(ideFrame); - } - } - } - - private static IdeFrame getIdeFrameFromWindow(Window window) { - Component frame = UIUtil.findUltimateParent(window); - return frame instanceof IdeFrame ? (IdeFrame)frame : null; - } - @Override public boolean isActive() { - return isUnitTestMode() || myActive; + if (isUnitTestMode()) return true; + + Window activeWindow = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow(); + + if (ApplicationActivationStateManager.getState().isInactive() + && activeWindow != null) { + ApplicationActivationStateManager.updateState(activeWindow); + } + + return ApplicationActivationStateManager.getState().isActive(); } @NotNull diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/FocusManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/FocusManagerImpl.java index ecb65b6a575a..3e50443a24cd 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/FocusManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/FocusManagerImpl.java @@ -29,7 +29,6 @@ import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.ex.ApplicationManagerEx; import com.intellij.openapi.components.impl.ServiceManagerImpl; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.util.*; import com.intellij.openapi.util.registry.Registry; @@ -1070,79 +1069,35 @@ public class FocusManagerImpl extends IdeFocusManager implements Disposable { } private class AppListener extends ApplicationActivationListener.Adapter { + @Override public void applicationActivated(final IdeFrame ideFrame) { - - if (Registry.is("trace.focus.on.app.activation")) { - LOG.info("Application is activating"); - } - final FocusCommand cmd = myFocusCommandOnAppActivation; ActionCallback callback = myCallbackOnActivation; myFocusCommandOnAppActivation = null; myCallbackOnActivation = null; if (cmd != null) { - if (Registry.is("trace.focus.on.app.activation")) { - LOG.info("Use focus command that we have saved on deactivation"); - LOG.info(cmd.getAllocation()); - } requestFocus(cmd, true).notify(callback); } else { - Component lastFocusedComponent = focusLastFocusedComponent(ideFrame); - if (Registry.is("trace.focus.on.app.activation")) { - final Project project = ideFrame.getProject(); - if (project != null) { - LOG.info("Use last focused component because we do not have a focus command"); - LOG.info("Component in [" + project.getName() + "]: " + (lastFocusedComponent != null ? lastFocusedComponent.getClass().getName() : null)); - } - } + focusLastFocusedComponent(ideFrame); } } @Override - public void applicationDeactivated(IdeFrame ideFrame) { + public void delayedApplicationDeactivated(IdeFrame ideFrame) { + final Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); + Component parent = UIUtil.findUltimateParent(owner); - if (Registry.is("trace.focus.on.app.activation")) { - LOG.info("Application is deactivating"); - } - - final Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); - Component parent = UIUtil.findUltimateParent(owner); - - if (parent == ideFrame) { - myLastFocusedAtDeactivation.put(ideFrame, owner); - if (Registry.is("trace.focus.on.app.activation")) { - final Project project = ideFrame.getProject(); - String projectName = null; - if (project != null) { - projectName = project.getName(); - } - LOG.info("The next component is set as ths last focused for [" + projectName +"]"); + if (parent == ideFrame) { + myLastFocusedAtDeactivation.put(ideFrame, owner); } - } else { - if (Registry.is("trace.focus.on.app.activation")) { - if (owner != null) { - final Project project = ideFrame.getProject(); - String projectName = null; - if (project != null) { - projectName = project.getName(); - } - LOG.error("The last focused component " + - (owner != null ? owner.getClass().getName() : null) + - " is not in the deactivating frame [" + projectName + "]. Skip it."); - } else { - LOG.info("The last focused component is null"); - } - } - } } - private Component focusLastFocusedComponent(IdeFrame ideFrame) { + private void focusLastFocusedComponent(IdeFrame ideFrame) { final KeyboardFocusManager mgr = KeyboardFocusManager.getCurrentKeyboardFocusManager(); - Component c = null; if (mgr.getFocusOwner() == null) { - c = getComponent(myLastFocusedAtDeactivation, ideFrame); + Component c = getComponent(myLastFocusedAtDeactivation, ideFrame); if (c == null || !c.isShowing()) { c = getComponent(myLastFocusedAtDeactivation, ideFrame); } @@ -1165,7 +1120,6 @@ public class FocusManagerImpl extends IdeFocusManager implements Disposable { } myLastFocusedAtDeactivation.remove(ideFrame); - return c; } } diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index 5766cf528e8c..3a938d359857 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -645,6 +645,7 @@ tests.view.old.statistics.panel=false tfs.set.connection.timeout=false +application.deactivation.timeout=1500 ide.mac.yosemite.laf=false ide.mac.yosemite.laf.restartRequired=true ide.mac.yosemite.laf.description=Replaces Aqua LaF to enhanced IntelliJ LaF @@ -677,4 +678,4 @@ trace.focus.on.app.restartRequired=false rbenv.gemsets.enabled=false editor.hide.gutter.icons=false -editor.hide.gutter.icons.description=Hide gutter icons \ No newline at end of file +editor.hide.gutter.icons.description=Hide gutter icons