From a9cdaae205eea7691463ab6b0312324f22bad465 Mon Sep 17 00:00:00 2001 From: Aydar Mukhametzyanov Date: Mon, 31 Mar 2025 16:11:12 +0200 Subject: [PATCH] IJPL-158622 Search Everywhere for RD: add an extension for redirect old SE to the new one GitOrigin-RevId: df553c10cf7a2017ddbf036a871d898816e7016e --- .../ide/actions/SearchEverywhereAction.java | 26 ++++++++++++++++--- .../ide/actions/SearchEverywhereEntryPoint.kt | 18 +++++++++++++ .../src/META-INF/LangExtensionPoints.xml | 1 + ...lij.platform.searchEverywhere.frontend.xml | 1 + .../frontend/src/SeEntryPoint.kt | 19 ++++++++++++++ 5 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereEntryPoint.kt create mode 100644 platform/searchEverywhere/frontend/src/SeEntryPoint.kt diff --git a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java index b8225910e8fa..57c6ef5d09e2 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereAction.java @@ -14,6 +14,7 @@ import com.intellij.openapi.actionSystem.ex.CustomComponentAction; import com.intellij.openapi.actionSystem.impl.ActionButton; import com.intellij.openapi.actionSystem.impl.ActionConfigurationCustomizer; import com.intellij.openapi.application.ReadAction; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.keymap.MacKeymapUtil; import com.intellij.openapi.keymap.impl.ModifierKeyDoubleClickHandler; @@ -31,8 +32,8 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; -import java.awt.*; +import javax.swing.JComponent; +import java.awt.Dimension; import java.awt.event.KeyEvent; import java.util.concurrent.ConcurrentHashMap; @@ -41,6 +42,7 @@ import java.util.concurrent.ConcurrentHashMap; */ public class SearchEverywhereAction extends SearchEverywhereBaseAction implements CustomComponentAction, RightAlignedToolbarAction, DumbAware, DataProvider { + private static final Logger LOG = Logger.getInstance(SearchEverywhereAction.class); public static final Key> SEARCH_EVERYWHERE_POPUP = new Key<>("SearchEverywherePopup"); @@ -115,7 +117,25 @@ public class SearchEverywhereAction extends SearchEverywhereBaseAction } } - ReadAction.run(() -> showInSearchEverywherePopup(SearchEverywhereManagerImpl.ALL_CONTRIBUTORS_GROUP_ID, newEvent, true, true)); + if (!tryToOpenExternalEntryPoint(e)) { + ReadAction.run(() -> showInSearchEverywherePopup(SearchEverywhereManagerImpl.ALL_CONTRIBUTORS_GROUP_ID, newEvent, true, true)); + } + } + + private static boolean tryToOpenExternalEntryPoint(@NotNull AnActionEvent e) { + try { + for (SearchEverywhereEntryPoint entryPoint: SearchEverywhereEntryPoint.EP_NAME.getExtensionList()) { + if (entryPoint.isAvailable(e)) { + entryPoint.initiateSearchPopup(e); + return true; + } + } + } + catch (Throwable t) { + LOG.warn(t); + } + + return false; } } diff --git a/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereEntryPoint.kt b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereEntryPoint.kt new file mode 100644 index 000000000000..0dc2de664a4f --- /dev/null +++ b/platform/lang-impl/src/com/intellij/ide/actions/SearchEverywhereEntryPoint.kt @@ -0,0 +1,18 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.ide.actions + +import com.intellij.openapi.actionSystem.AnActionEvent +import com.intellij.openapi.extensions.ExtensionPointName +import org.jetbrains.annotations.ApiStatus + +@ApiStatus.Internal +interface SearchEverywhereEntryPoint { + fun isAvailable(e: AnActionEvent): Boolean + fun initiateSearchPopup(e: AnActionEvent): Boolean + + companion object { + @ApiStatus.Internal + @JvmField + val EP_NAME: ExtensionPointName = ExtensionPointName("com.intellij.searchEverywhere.entryPoint") + } +} \ No newline at end of file diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index ace2d43b39a2..5572299df74c 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -176,6 +176,7 @@ + diff --git a/platform/searchEverywhere/frontend/resources/intellij.platform.searchEverywhere.frontend.xml b/platform/searchEverywhere/frontend/resources/intellij.platform.searchEverywhere.frontend.xml index 43d58b38b5c3..98503ff7ecee 100644 --- a/platform/searchEverywhere/frontend/resources/intellij.platform.searchEverywhere.frontend.xml +++ b/platform/searchEverywhere/frontend/resources/intellij.platform.searchEverywhere.frontend.xml @@ -17,6 +17,7 @@ + diff --git a/platform/searchEverywhere/frontend/src/SeEntryPoint.kt b/platform/searchEverywhere/frontend/src/SeEntryPoint.kt new file mode 100644 index 000000000000..0dbf01219d2d --- /dev/null +++ b/platform/searchEverywhere/frontend/src/SeEntryPoint.kt @@ -0,0 +1,19 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.platform.searchEverywhere.frontend + +import com.intellij.ide.actions.SearchEverywhereEntryPoint +import com.intellij.openapi.actionSystem.AnActionEvent +import org.jetbrains.annotations.ApiStatus + +@ApiStatus.Internal +class SeEntryPoint : SearchEverywhereEntryPoint { + override fun isAvailable(e: AnActionEvent): Boolean { + return SeFrontendService.isEnabled + } + + override fun initiateSearchPopup(e: AnActionEvent): Boolean { + val project = e.project ?: return false + SeFrontendService.getInstance(project).showPopup(null, e) + return true + } +} \ No newline at end of file