show icons for overhead items

This commit is contained in:
Egor.Ushakov
2017-08-23 19:19:55 +03:00
parent 788ab3c5e2
commit c0811261bc
6 changed files with 53 additions and 22 deletions
@@ -27,6 +27,7 @@ import com.intellij.debugger.jdi.VirtualMachineProxyImpl;
import com.intellij.debugger.requests.Requestor;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.debugger.ui.breakpoints.Breakpoint;
import com.intellij.debugger.ui.breakpoints.RunToCursorBreakpoint;
import com.intellij.debugger.ui.breakpoints.StackCapturingLineBreakpoint;
import com.intellij.debugger.ui.overhead.OverheadProducer;
import com.intellij.debugger.ui.overhead.OverheadTimings;
@@ -499,8 +500,10 @@ public class DebugProcessEvents extends DebugProcessImpl {
resumePreferred = !requestHit;
}
finally {
if (requestor instanceof OverheadProducer) {
OverheadTimings.add(DebugProcessEvents.this, (OverheadProducer)requestor, requestHit ? 1 : 0, System.currentTimeMillis() - start);
if (requestor instanceof OverheadProducer && !(requestor instanceof RunToCursorBreakpoint)) {
OverheadTimings.add(DebugProcessEvents.this, (OverheadProducer)requestor,
requestHit || requestor instanceof StackCapturingLineBreakpoint ? 1 : 0,
System.currentTimeMillis() - start);
}
}
@@ -21,9 +21,11 @@ import com.intellij.debugger.engine.DebuggerManagerThreadImpl;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.debugger.ui.overhead.OverheadProducer;
import com.intellij.debugger.ui.overhead.OverheadTimings;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.ui.ColoredTableCellRenderer;
import com.intellij.util.ArrayUtil;
import com.sun.jdi.*;
import com.sun.jdi.event.Event;
@@ -244,7 +246,8 @@ public class MethodReturnValueWatcher implements OverheadProducer {
}
@Override
public String getDisplayName() {
return DebuggerBundle.message("action.watches.method.return.value.enable");
public void customizeRenderer(ColoredTableCellRenderer renderer) {
renderer.setIcon(AllIcons.Debugger.WatchLastReturnValue);
renderer.append(DebuggerBundle.message("action.watches.method.return.value.enable"));
}
}
@@ -35,6 +35,7 @@ import com.intellij.debugger.requests.Requestor;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.debugger.ui.impl.watch.CompilingEvaluatorImpl;
import com.intellij.debugger.ui.overhead.OverheadProducer;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.project.Project;
@@ -45,6 +46,7 @@ import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiCodeFragment;
import com.intellij.psi.PsiElement;
import com.intellij.ui.AppUIUtil;
import com.intellij.ui.ColoredTableCellRenderer;
import com.intellij.ui.classFilter.ClassFilter;
import com.intellij.util.ObjectUtils;
import com.intellij.util.StringBuilderSpinAllocator;
@@ -135,6 +137,17 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
@Override
public abstract void processClassPrepare(DebugProcess debuggerProcess, final ReferenceType referenceType);
@Override
public void customizeRenderer(ColoredTableCellRenderer renderer) {
if (myXBreakpoint != null) {
renderer.setIcon(myXBreakpoint.getType().getEnabledIcon());
}
else {
renderer.setIcon(AllIcons.Debugger.Db_set_breakpoint);
}
renderer.append(getDisplayName());
}
public abstract String getDisplayName ();
public String getShortName() {
@@ -39,6 +39,7 @@ import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.ui.ColoredTableCellRenderer;
import com.intellij.util.containers.ContainerUtil;
import com.sun.jdi.*;
import com.sun.jdi.event.LocatableEvent;
@@ -181,8 +182,8 @@ public class StackCapturingLineBreakpoint extends WildcardMethodBreakpoint {
}
@Override
public String getDisplayName() {
return "Capture point at " + myCapturePoint.myClassName + "." + myCapturePoint.myMethodName;
public void customizeRenderer(ColoredTableCellRenderer renderer) {
renderer.append("Capture point at " + myCapturePoint.myClassName + "." + myCapturePoint.myMethodName);
}
@Override
@@ -15,11 +15,13 @@
*/
package com.intellij.debugger.ui.overhead;
import com.intellij.ui.ColoredTableCellRenderer;
/**
* @author egor
*/
public interface OverheadProducer {
boolean isEnabled();
void setEnabled(boolean enabled);
String getDisplayName();
void customizeRenderer(ColoredTableCellRenderer renderer);
}
@@ -19,19 +19,19 @@ import com.intellij.debugger.engine.DebugProcessImpl;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CustomShortcutSet;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.ui.ColoredTableCellRenderer;
import com.intellij.ui.ScrollPaneFactory;
import com.intellij.ui.TableUtil;
import com.intellij.ui.table.JBTable;
import com.intellij.ui.table.TableView;
import com.intellij.util.ui.ColumnInfo;
import com.intellij.util.ui.ListTableModel;
import com.intellij.util.ui.components.BorderLayoutPanel;
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
import one.util.streamex.IntStreamEx;
import one.util.streamex.StreamEx;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.table.TableCellRenderer;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Comparator;
@@ -46,7 +46,7 @@ public class OverheadView extends BorderLayoutPanel {
static final EnabledColumnInfo ENABLED_COLUMN = new EnabledColumnInfo();
static final NameColumnInfo NAME_COLUMN = new NameColumnInfo();
final JBTable myTable;
final TableView<OverheadProducer> myTable;
final ListTableModel<OverheadProducer> myModel;
public OverheadView(@NotNull DebugProcessImpl process) {
@@ -60,7 +60,7 @@ public class OverheadView extends BorderLayoutPanel {
new ArrayList<>(OverheadTimings.getProducers(process)),
3, SortOrder.DESCENDING);
myModel.setSortable(true);
myTable = new JBTable(myModel);
myTable = new TableView<>(myModel);
addToCenter(ScrollPaneFactory.createScrollPane(myTable));
TableUtil.setupCheckboxColumn(myTable.getColumnModel().getColumn(0));
OverheadTimings.addListener(o -> DebuggerUIUtil.invokeLater(() -> {
@@ -80,16 +80,12 @@ public class OverheadView extends BorderLayoutPanel {
@Override
public void actionPerformed(@NotNull final AnActionEvent e) {
getSelected().forEach(c -> c.setEnabled(!c.isEnabled()));
myTable.getSelection().forEach(c -> c.setEnabled(!c.isEnabled()));
myTable.repaint();
}
}.registerCustomShortcutSet(new CustomShortcutSet(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0)), myTable);
}
private StreamEx<OverheadProducer> getSelected() {
return IntStreamEx.of(myTable.getSelectedRows()).map(myTable::convertRowIndexToModel).mapToObj(myModel::getItem);
}
private static class EnabledColumnInfo extends ColumnInfo<OverheadProducer, Boolean> {
public EnabledColumnInfo() {
super("");
@@ -117,21 +113,34 @@ public class OverheadView extends BorderLayoutPanel {
}
}
private static class NameColumnInfo extends ColumnInfo<OverheadProducer, String> {
private static class NameColumnInfo extends ColumnInfo<OverheadProducer, OverheadProducer> {
public NameColumnInfo() {
super("name");
}
@Nullable
@Override
public String valueOf(OverheadProducer aspects) {
return aspects.getDisplayName();
public OverheadProducer valueOf(OverheadProducer aspects) {
return aspects;
}
@Override
public Class<?> getColumnClass() {
return OverheadProducer.class;
}
@Nullable
@Override
public Comparator<OverheadProducer> getComparator() {
return Comparator.comparing(i -> valueOf(i));
public TableCellRenderer getRenderer(OverheadProducer producer) {
return new ColoredTableCellRenderer() {
@Override
protected void customizeCellRenderer(JTable table, @Nullable Object value, boolean selected, boolean hasFocus, int row, int column) {
if (value instanceof OverheadProducer) {
((OverheadProducer)value).customizeRenderer(this);
}
setTransparentIconBackground(true);
}
};
}
}