mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
correctly render alternative sources from jdk (show something more than just rt.jar)
This commit is contained in:
+10
-24
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user