From d0ac9c47aa2c2ddee2b375d4d5e3c6c7c93faac8 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 13 Jan 2020 12:40:12 +0100 Subject: [PATCH] do not use Experiments if app not yet initialized GitOrigin-RevId: 66a813c45f7ed2e07a84d2c1ed8c8cbf4c91d11a --- .../intellij/openapi/application/Experiments.java | 7 +------ .../openapi/ui/ComponentWithBrowseButton.java | 14 +++++++++----- .../openapi/ui/TextFieldWithBrowseButton.java | 5 ++--- .../src/com/intellij/ui/AbstractFieldPanel.java | 15 +++++---------- .../intellij/openapi/wm/impl/GlobalMenuLinux.java | 5 +++-- 5 files changed, 20 insertions(+), 26 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/application/Experiments.java b/platform/platform-api/src/com/intellij/openapi/application/Experiments.java index a8a3734deffd..be6ab5ab437a 100644 --- a/platform/platform-api/src/com/intellij/openapi/application/Experiments.java +++ b/platform/platform-api/src/com/intellij/openapi/application/Experiments.java @@ -4,7 +4,6 @@ package com.intellij.openapi.application; import com.intellij.diagnostic.LoadingState; import com.intellij.ide.util.PropertiesComponent; import com.intellij.openapi.components.Service; -import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.util.text.StringUtil; @@ -49,11 +48,7 @@ public final class Experiments { @NotNull public static Experiments getInstance() { - if (ApplicationManager.getApplication() == null) { - // usages from UI Designer preview where no application available - return new Experiments(); - } - return ServiceManager.getService(Experiments.class); + return ApplicationManager.getApplication().getService(Experiments.class); } public boolean isFeatureEnabled(@NotNull String featureId) { diff --git a/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java b/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java index 9321f58b8552..24aec53c8d6e 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java @@ -1,6 +1,7 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.openapi.ui; +import com.intellij.diagnostic.LoadingState; import com.intellij.icons.AllIcons; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.AnActionEvent; @@ -8,7 +9,6 @@ import com.intellij.openapi.actionSystem.CustomShortcutSet; import com.intellij.openapi.actionSystem.ShortcutSet; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.Experiments; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.project.DumbAwareAction; @@ -22,6 +22,7 @@ import com.intellij.ui.components.fields.ExtendableTextComponent; import com.intellij.util.ui.StartupUiUtil; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.accessibility.ScreenReader; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -34,19 +35,22 @@ import java.awt.event.InputEvent; import java.awt.event.KeyEvent; public class ComponentWithBrowseButton extends JPanel implements Disposable { - private static final Logger LOG = Logger.getInstance(ComponentWithBrowseButton.class); - private final Comp myComponent; private final FixedSizeButton myBrowseButton; private boolean myButtonEnabled = true; + @ApiStatus.Internal + public static boolean isUseInlineBrowserButton() { + return !LoadingState.COMPONENTS_REGISTERED.isOccurred() || Experiments.getInstance().isFeatureEnabled("inline.browse.button"); + } + public ComponentWithBrowseButton(@NotNull Comp component, @Nullable ActionListener browseActionListener) { super(new BorderLayout(SystemInfo.isMac || StartupUiUtil.isUnderDarcula() ? 0 : 2, 0)); myComponent = component; // required! otherwise JPanel will occasionally gain focus instead of the component setFocusable(false); - boolean inlineBrowseButton = myComponent instanceof ExtendableTextComponent && Experiments.getInstance().isFeatureEnabled("inline.browse.button"); + boolean inlineBrowseButton = myComponent instanceof ExtendableTextComponent && isUseInlineBrowserButton(); if (inlineBrowseButton) { ((ExtendableTextComponent)myComponent).addExtension(ExtendableTextComponent.Extension.create( getDefaultIcon(), getHoveredIcon(), getIconTooltip(), this::notifyActionListeners)); diff --git a/platform/platform-api/src/com/intellij/openapi/ui/TextFieldWithBrowseButton.java b/platform/platform-api/src/com/intellij/openapi/ui/TextFieldWithBrowseButton.java index eba0dbb4b516..8616e572fe95 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/TextFieldWithBrowseButton.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/TextFieldWithBrowseButton.java @@ -1,10 +1,9 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.openapi.ui; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.Application; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.application.Experiments; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.fileChooser.FileChooserFactory; @@ -48,7 +47,7 @@ public class TextFieldWithBrowseButton extends ComponentWithBrowseButton myButtons = new ArrayList<>(1); protected JLabel myLabel; private ActionListener myBrowseButtonActionListener; - private String myViewerDialogTitle; + private final String myViewerDialogTitle; private String myLabelText; private TextFieldWithBrowseButton.MyDoClickAction myDoClickAction; @@ -110,7 +109,7 @@ public abstract class AbstractFieldPanel extends JPanel { this.add(myComponent, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, JBUI.emptyInsets(), 0, 0)); if (myBrowseButtonActionListener != null) { - if (Experiments.getInstance().isFeatureEnabled("inline.browse.button") && myComponent instanceof ExtendableTextComponent) { + if (myComponent instanceof ExtendableTextComponent && ComponentWithBrowseButton.isUseInlineBrowserButton()) { ((ExtendableTextComponent)myComponent).addExtension(ExtendableTextComponent.Extension.create( getDefaultIcon(), getHoveredIcon(), getIconTooltip(), this::notifyActionListener)); new DumbAwareAction() { @@ -136,7 +135,7 @@ public abstract class AbstractFieldPanel extends JPanel { myDoClickAction = new TextFieldWithBrowseButton.MyDoClickAction(showViewerButton); } showViewerButton.setFocusable(false); - showViewerButton.setIcon(PlatformIcons.OPEN_EDIT_DIALOG_ICON); + showViewerButton.setIcon(AllIcons.Actions.ShowViewer); showViewerButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -175,10 +174,6 @@ public abstract class AbstractFieldPanel extends JPanel { myBrowseButtonActionListener = browseButtonActionListener; } - public void setViewerDialogTitle(String viewerDialogTitle) { - myViewerDialogTitle = viewerDialogTitle; - } - public void setLabelText(String labelText) { myLabelText = labelText; } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/GlobalMenuLinux.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/GlobalMenuLinux.java index 36fe254a28ed..3c631906c0b8 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/GlobalMenuLinux.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/GlobalMenuLinux.java @@ -1,6 +1,7 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.openapi.wm.impl; +import com.intellij.diagnostic.LoadingState; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.util.ExecUtil; import com.intellij.ide.IdeEventQueue; @@ -796,7 +797,7 @@ public final class GlobalMenuLinux implements LinuxGlobalMenuEventHandler, Dispo if (!SystemInfo.isLinux || ApplicationManager.getApplication() == null || ApplicationManager.getApplication().isUnitTestMode() || Registry.is("linux.native.menu.force.disable") || - !Experiments.getInstance().isFeatureEnabled("linux.native.menu") || + (LoadingState.COMPONENTS_REGISTERED.isOccurred() && !Experiments.getInstance().isFeatureEnabled("linux.native.menu")) || !JnaLoader.isLoaded() || isUnderVMWithSwiftPluginInstalled()) { return null;