mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Add extensibility to TraverseUI and related classes
This allows IDEs with backends such as Rider to inject necessary waits and other code to handle non-standard settings indexing
This commit is contained in:
@@ -97,8 +97,14 @@ public class TraverseUIStarter extends ApplicationStarterEx {
|
||||
public static void startup(@NotNull final String outputPath, final boolean splitByResourcePath) throws IOException {
|
||||
Map<SearchableConfigurable, Set<OptionDescription>> options = new LinkedHashMap<>();
|
||||
try {
|
||||
for (TraverseUIHelper extension : TraverseUIHelper.helperExtensionPoint.getExtensions())
|
||||
extension.beforeStart();
|
||||
|
||||
SearchUtil.processProjectConfigurables(ProjectManager.getInstance().getDefaultProject(), options);
|
||||
|
||||
for (TraverseUIHelper extension1 : TraverseUIHelper.helperExtensionPoint.getExtensions())
|
||||
extension1.afterTraversal(options);
|
||||
|
||||
final Map<String, Element> roots = newHashMap();
|
||||
for (SearchableConfigurable option : options.keySet()) {
|
||||
SearchableConfigurable configurable = option;
|
||||
@@ -149,6 +155,9 @@ public class TraverseUIStarter extends ApplicationStarterEx {
|
||||
JDOMUtil.writeDocument(new Document(entry.getValue()), output, "\n");
|
||||
}
|
||||
|
||||
for (TraverseUIHelper extension : TraverseUIHelper.helperExtensionPoint.getExtensions())
|
||||
extension.afterResultsAreSaved();
|
||||
|
||||
System.out.println("Searchable options index builder completed");
|
||||
}
|
||||
finally {
|
||||
|
||||
@@ -47,7 +47,7 @@ public class SearchUtil {
|
||||
}
|
||||
|
||||
private static void processConfigurables(Configurable[] configurables, Map<SearchableConfigurable, Set<OptionDescription>> options) {
|
||||
for (Configurable configurable : configurables) {
|
||||
for (final Configurable configurable : configurables) {
|
||||
if (configurable instanceof SearchableConfigurable) {
|
||||
//ignore invisible root nodes
|
||||
//noinspection deprecation
|
||||
@@ -55,24 +55,29 @@ public class SearchUtil {
|
||||
continue;
|
||||
}
|
||||
|
||||
final SearchableConfigurable searchableConfigurable = (SearchableConfigurable) configurable;
|
||||
|
||||
Set<OptionDescription> configurableOptions = new TreeSet<>();
|
||||
options.put((SearchableConfigurable)configurable, configurableOptions);
|
||||
options.put(searchableConfigurable, configurableOptions);
|
||||
|
||||
for (TraverseUIHelper extension : TraverseUIHelper.helperExtensionPoint.getExtensions())
|
||||
extension.beforeConfigurable(searchableConfigurable, configurableOptions);
|
||||
|
||||
if (configurable instanceof MasterDetails) {
|
||||
final MasterDetails md = (MasterDetails)configurable;
|
||||
md.initUi();
|
||||
processComponent(configurable, configurableOptions, md.getMaster());
|
||||
processComponent(configurable, configurableOptions, md.getDetails().getComponent());
|
||||
processComponent(searchableConfigurable, configurableOptions, md.getMaster());
|
||||
processComponent(searchableConfigurable, configurableOptions, md.getDetails().getComponent());
|
||||
}
|
||||
else {
|
||||
processComponent(configurable, configurableOptions, configurable.createComponent());
|
||||
processComponent(searchableConfigurable, configurableOptions, configurable.createComponent());
|
||||
final Configurable unwrapped = unwrapConfigurable(configurable);
|
||||
if (unwrapped instanceof CompositeConfigurable) {
|
||||
//noinspection unchecked
|
||||
final List<? extends UnnamedConfigurable> children = ((CompositeConfigurable)unwrapped).getConfigurables();
|
||||
for (final UnnamedConfigurable child : children) {
|
||||
final Set<OptionDescription> childConfigurableOptions = new TreeSet<>();
|
||||
options.put(new SearchableConfigurableAdapter((SearchableConfigurable)configurable, child), childConfigurableOptions);
|
||||
options.put(new SearchableConfigurableAdapter(searchableConfigurable, child), childConfigurableOptions);
|
||||
|
||||
if (child instanceof SearchableConfigurable) {
|
||||
processUILabel(((SearchableConfigurable)child).getDisplayName(), childConfigurableOptions, null);
|
||||
@@ -86,6 +91,9 @@ public class SearchUtil {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (TraverseUIHelper extension : TraverseUIHelper.helperExtensionPoint.getExtensions())
|
||||
extension.afterConfigurable(searchableConfigurable, configurableOptions);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -108,10 +116,16 @@ public class SearchUtil {
|
||||
return configurable;
|
||||
}
|
||||
|
||||
private static void processComponent(Configurable configurable, Set<? super OptionDescription> configurableOptions, JComponent component) {
|
||||
private static void processComponent(SearchableConfigurable configurable, Set<? super OptionDescription> configurableOptions, JComponent component) {
|
||||
if (component != null) {
|
||||
for (TraverseUIHelper extension : TraverseUIHelper.helperExtensionPoint.getExtensions())
|
||||
extension.beforeComponent(configurable, component, configurableOptions);
|
||||
|
||||
processUILabel(configurable.getDisplayName(), configurableOptions, null);
|
||||
processComponent(component, configurableOptions, null);
|
||||
|
||||
for (TraverseUIHelper extension : TraverseUIHelper.helperExtensionPoint.getExtensions())
|
||||
extension.afterComponent(configurable, component, configurableOptions);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.intellij.ide.ui.search;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.options.SearchableConfigurable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public interface TraverseUIHelper {
|
||||
String EP_NAME = "com.intellij.search.traverseUiHelper";
|
||||
ExtensionPointName<TraverseUIHelper> helperExtensionPoint = ExtensionPointName.create(EP_NAME);
|
||||
|
||||
/**
|
||||
* Invoked before indexing SearchableConfigurables
|
||||
*/
|
||||
default void beforeStart() {}
|
||||
|
||||
/**
|
||||
* Invoked after all configurables were traversed
|
||||
*/
|
||||
default void afterTraversal(@NotNull Map<SearchableConfigurable, Set<OptionDescription>> options) {}
|
||||
|
||||
/**
|
||||
* Invoked after indexing all SearchableConfigurables and results are saved
|
||||
*/
|
||||
default void afterResultsAreSaved() {}
|
||||
|
||||
/**
|
||||
* Invoked before indexing a SearchableConfigurable
|
||||
*/
|
||||
default void beforeConfigurable(@NotNull SearchableConfigurable configurable, @NotNull Set<OptionDescription> options) {}
|
||||
|
||||
/**
|
||||
* Invoked after indexing a SearchableConfigurable
|
||||
*/
|
||||
default void afterConfigurable(@NotNull SearchableConfigurable configurable, @NotNull Set<OptionDescription> options) {}
|
||||
|
||||
/**
|
||||
* Invoked before indexing the root component of a SearchableConfigurable
|
||||
*/
|
||||
default void beforeComponent(@NotNull SearchableConfigurable configurable, @NotNull JComponent component, @NotNull Set<? super OptionDescription> options) {}
|
||||
|
||||
/**
|
||||
* Invoked after indexing the root component of a SearchableConfigurable
|
||||
*/
|
||||
default void afterComponent(@NotNull SearchableConfigurable configurable, @NotNull JComponent component, @NotNull Set<? super OptionDescription> options) {}
|
||||
}
|
||||
@@ -336,5 +336,7 @@
|
||||
<extensionPoint qualifiedName="com.intellij.registryKey" beanClass="com.intellij.openapi.util.registry.RegistryKeyBean"/>
|
||||
|
||||
<extensionPoint name="fileBreadcrumbsCollector" interface="com.intellij.codeInsight.breadcrumbs.FileBreadcrumbsCollector" area="IDEA_PROJECT"/>
|
||||
|
||||
<extensionPoint qualifiedName="com.intellij.search.traverseUiHelper" interface="com.intellij.ide.ui.search.TraverseUIHelper"/>
|
||||
</extensionPoints>
|
||||
</idea-plugin>
|
||||
|
||||
Reference in New Issue
Block a user