correctly render alternative sources from jdk (show something more than just rt.jar)

This commit is contained in:
Egor.Ushakov
2015-11-06 15:55:42 +03:00
parent 4515f3496e
commit fb32abd2fe
@@ -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<PsiClass, ComboBoxClassElement>() {
@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();