From fb32abd2fead8af17cd1cf612dc27f9172562b8e Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Fri, 6 Nov 2015 15:55:03 +0300 Subject: [PATCH] correctly render alternative sources from jdk (show something more than just rt.jar) --- ...AlternativeSourceNotificationProvider.java | 34 ++++++------------- 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/AlternativeSourceNotificationProvider.java b/java/debugger/impl/src/com/intellij/debugger/ui/AlternativeSourceNotificationProvider.java index 34e42469cd82..1cd8ef71af4a 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/AlternativeSourceNotificationProvider.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/AlternativeSourceNotificationProvider.java @@ -18,14 +18,11 @@ package com.intellij.debugger.ui; import com.intellij.debugger.DebuggerBundle; import com.intellij.debugger.impl.DebuggerUtilsEx; import com.intellij.ide.highlighter.JavaClassFileType; +import com.intellij.ide.util.ModuleRendererFactory; import com.intellij.openapi.fileEditor.FileEditor; import com.intellij.openapi.fileEditor.FileEditorManager; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.ui.ComboBox; import com.intellij.openapi.util.Key; import com.intellij.openapi.vfs.VirtualFile; @@ -33,6 +30,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.ui.EditorNotificationPanel; import com.intellij.ui.EditorNotifications; +import com.intellij.ui.components.JBList; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.xdebugger.XDebugSession; @@ -41,6 +39,7 @@ import com.intellij.xdebugger.XSourcePosition; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; @@ -115,7 +114,7 @@ public class AlternativeSourceNotificationProvider extends EditorNotifications.P new Function() { @Override public ComboBoxClassElement fun(PsiClass psiClass) { - return new ComboBoxClassElement(psiClass); + return new ComboBoxClassElement((PsiClass)psiClass.getNavigationElement()); } }); @@ -132,27 +131,15 @@ public class AlternativeSourceNotificationProvider extends EditorNotifications.P myClass = aClass; } + private static JList ourDummyList = new JBList(); // to use ModuleRendererFactory + @Override public String toString() { if (myText == null) { - Module module = ModuleUtilCore.findModuleForPsiElement(myClass); - if (module != null) { - myText = module.getName(); - } - else { - VirtualFile virtualFile = myClass.getContainingFile().getVirtualFile(); - final ProjectFileIndex index = ProjectRootManager.getInstance(myClass.getProject()).getFileIndex(); - VirtualFile root = index.getSourceRootForFile(virtualFile); - if (root == null) { - root = index.getClassRootForFile(virtualFile); - } - if (root != null) { - myText = root.getName(); - } - else { - myText = virtualFile.getPath(); - } - } + ModuleRendererFactory factory = ModuleRendererFactory.findInstance(myClass); + DefaultListCellRenderer moduleRenderer = factory.getModuleRenderer(); + moduleRenderer.getListCellRendererComponent(ourDummyList, myClass, 1, false, false); + myText = moduleRenderer.getText(); } return myText; } @@ -174,7 +161,6 @@ public class AlternativeSourceNotificationProvider extends EditorNotifications.P public void actionPerformed(ActionEvent e) { FileEditorManager.getInstance(project).closeFile(file); PsiClass item = ((ComboBoxClassElement)switcher.getSelectedItem()).myClass; - item = (PsiClass)item.getNavigationElement(); // go through compiled DebuggerUtilsEx.setAlternativeSource(file, item.getContainingFile().getVirtualFile()); item.navigate(true); XDebugSession session = XDebuggerManager.getInstance(project).getCurrentSession();