mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Flex project structure: correctly navigate to module libraries from Project view (IDEA-82292)
This commit is contained in:
+1
-17
@@ -20,7 +20,6 @@ import com.intellij.ide.util.PropertiesComponent;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleConfigurationEditor;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.options.BaseConfigurable;
|
||||
import com.intellij.openapi.options.Configurable;
|
||||
@@ -453,22 +452,7 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se
|
||||
}
|
||||
|
||||
public ActionCallback selectOrderEntry(@NotNull final Module module, @Nullable final OrderEntry orderEntry) {
|
||||
return select(module.getName(), null, true).doWhenDone(new Runnable() {
|
||||
public void run() {
|
||||
final MasterDetailsComponent.MyNode node = ModuleStructureConfigurable.getInstance(myProject).findModuleNode(module);
|
||||
if (node != null) {
|
||||
ModuleConfigurable moduleConfigurable = (ModuleConfigurable)node.getConfigurable();
|
||||
ModuleEditor moduleEditor = moduleConfigurable.getModuleEditor();
|
||||
moduleEditor.selectEditor(ClasspathEditor.NAME);
|
||||
if (orderEntry != null) {
|
||||
ModuleConfigurationEditor editor = moduleEditor.getEditor(ClasspathEditor.NAME);
|
||||
if (editor instanceof ClasspathEditor) {
|
||||
((ClasspathEditor)editor).selectOrderEntry(orderEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return ModuleStructureConfigurable.getInstance(myProject).selectOrderEntry(module, orderEntry);
|
||||
}
|
||||
|
||||
public ActionCallback navigateTo(@Nullable final Place place, final boolean requestFocus) {
|
||||
|
||||
+37
-8
@@ -30,10 +30,7 @@ import com.intellij.ide.util.projectWizard.ProjectWizardUtil;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.module.ModifiableModuleModel;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.module.ModuleType;
|
||||
import com.intellij.openapi.module.*;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -43,16 +40,16 @@ import com.intellij.openapi.roots.impl.ClonableOrderEntry;
|
||||
import com.intellij.openapi.roots.impl.ProjectRootManagerImpl;
|
||||
import com.intellij.openapi.roots.impl.RootModelImpl;
|
||||
import com.intellij.openapi.roots.libraries.Library;
|
||||
import com.intellij.openapi.roots.ui.configuration.ClasspathEditor;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModuleEditor;
|
||||
import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator;
|
||||
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.LibraryProjectStructureElement;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ModuleProjectStructureElement;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureDaemonAnalyzer;
|
||||
import com.intellij.openapi.roots.ui.configuration.projectRoot.daemon.ProjectStructureElement;
|
||||
import com.intellij.openapi.ui.DialogBuilder;
|
||||
import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.ui.NamedConfigurable;
|
||||
import com.intellij.openapi.ui.*;
|
||||
import com.intellij.openapi.util.ActionCallback;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
import com.intellij.openapi.util.NullableComputable;
|
||||
@@ -429,6 +426,38 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple
|
||||
return "reference.settingsdialog.project.structure.module";
|
||||
}
|
||||
|
||||
public ActionCallback selectOrderEntry(@NotNull final Module module, @Nullable final OrderEntry orderEntry) {
|
||||
for (final ModuleStructureExtension extension : ModuleStructureExtension.EP_NAME.getExtensions()) {
|
||||
final ActionCallback callback = extension.selectOrderEntry(module, orderEntry);
|
||||
if (callback != null) {
|
||||
return callback;
|
||||
}
|
||||
}
|
||||
|
||||
Place p = new Place();
|
||||
p.putPath(ProjectStructureConfigurable.CATEGORY, this);
|
||||
Runnable r = null;
|
||||
|
||||
final MasterDetailsComponent.MyNode node = findModuleNode(module);
|
||||
if (node != null) {
|
||||
p.putPath(TREE_OBJECT, module);
|
||||
p.putPath(ModuleEditor.SELECTED_EDITOR_NAME, ClasspathEditor.NAME);
|
||||
r = new Runnable() {
|
||||
public void run() {
|
||||
if (orderEntry != null) {
|
||||
ModuleEditor moduleEditor = ((ModuleConfigurable)node.getConfigurable()).getModuleEditor();
|
||||
ModuleConfigurationEditor editor = moduleEditor.getEditor(ClasspathEditor.NAME);
|
||||
if (editor instanceof ClasspathEditor) {
|
||||
((ClasspathEditor)editor).selectOrderEntry(orderEntry);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
final ActionCallback result = ProjectStructureConfigurable.getInstance(myProject).navigateTo(p, true);
|
||||
return r != null ? result.doWhenDone(r) : result;
|
||||
}
|
||||
|
||||
|
||||
public static ModuleStructureConfigurable getInstance(final Project project) {
|
||||
return ServiceManager.getService(project, ModuleStructureConfigurable.class);
|
||||
|
||||
+11
@@ -5,9 +5,12 @@ import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.OrderEntry;
|
||||
import com.intellij.openapi.ui.MasterDetailsComponent;
|
||||
import com.intellij.openapi.ui.NamedConfigurable;
|
||||
import com.intellij.openapi.util.ActionCallback;
|
||||
import com.intellij.openapi.util.NullableComputable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -71,4 +74,12 @@ public abstract class ModuleStructureExtension {
|
||||
public Comparator<MasterDetailsComponent.MyNode> getNodeComparator() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return callback or <code>null</code> if not handled
|
||||
*/
|
||||
@Nullable
|
||||
public ActionCallback selectOrderEntry(@NotNull final Module module, @Nullable final OrderEntry entry) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user