breakpoints -> favorites window

This commit is contained in:
Vassiliy Kudryashov
2013-03-13 20:55:13 +04:00
parent 1d1a10c99e
commit 37d1ed7d30
18 changed files with 354 additions and 64 deletions

View File

@@ -23,7 +23,6 @@ import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ex.EditorGutterComponentEx;
import com.intellij.openapi.editor.markup.GutterIconRenderer;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.popup.Balloon;
@@ -52,7 +51,7 @@ import java.awt.*;
*/
public class JavaEditBreakpointActionHandler extends EditBreakpointActionHandler {
@Override
protected void doShowPopup(final Project project, final EditorGutterComponentEx gutterComponent, final Point whereToShow, final Object breakpoint) {
protected void doShowPopup(final Project project, final JComponent component, final Point whereToShow, final Object breakpoint) {
if (!(breakpoint instanceof BreakpointWithHighlighter)) return;
final BreakpointWithHighlighter javaBreakpoint = (BreakpointWithHighlighter)breakpoint;
@@ -103,7 +102,7 @@ public class JavaEditBreakpointActionHandler extends EditBreakpointActionHandler
});
}
};
final Balloon balloon = DebuggerUIUtil.showBreakpointEditor(project, mainPanel, displayName, whereToShow, gutterComponent, showMoreOptions,
final Balloon balloon = DebuggerUIUtil.showBreakpointEditor(project, mainPanel, displayName, whereToShow, component, showMoreOptions,
breakpoint);
balloon.addListener(saveOnClose);
@@ -113,7 +112,7 @@ public class JavaEditBreakpointActionHandler extends EditBreakpointActionHandler
propertiesPanel.setActionsPanelVisible(true);
balloon.hide();
final Balloon newBalloon =
DebuggerUIUtil.showBreakpointEditor(project, mainPanel, displayName, whereToShow, gutterComponent, showMoreOptions, breakpoint);
DebuggerUIUtil.showBreakpointEditor(project, mainPanel, displayName, whereToShow, component, showMoreOptions, breakpoint);
newBalloon.addListener(saveOnClose);
}
});

View File

@@ -0,0 +1,243 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.debugger.ui.breakpoints;
import com.intellij.icons.AllIcons;
import com.intellij.ide.favoritesTreeView.AbstractFavoritesListProvider;
import com.intellij.ide.favoritesTreeView.FavoritesManager;
import com.intellij.ide.projectView.PresentationData;
import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.openapi.project.Project;
import com.intellij.pom.Navigatable;
import com.intellij.ui.CheckedTreeNode;
import com.intellij.ui.ColoredTreeCellRenderer;
import com.intellij.ui.CommonActionsPanel;
import com.intellij.xdebugger.XDebuggerManager;
import com.intellij.xdebugger.breakpoints.ui.XBreakpointGroup;
import com.intellij.xdebugger.breakpoints.ui.XBreakpointGroupingRule;
import com.intellij.xdebugger.impl.DebuggerSupport;
import com.intellij.xdebugger.impl.breakpoints.XBreakpointManagerImpl;
import com.intellij.xdebugger.impl.breakpoints.XBreakpointUtil;
import com.intellij.xdebugger.impl.breakpoints.XBreakpointsDialogState;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointItem;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointPanelProvider;
import com.intellij.xdebugger.impl.breakpoints.ui.tree.BreakpointItemsTreeController;
import com.intellij.xdebugger.impl.breakpoints.ui.tree.BreakpointsSimpleTree;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import java.awt.*;
import java.util.*;
import java.util.List;
/**
* User: Vassiliy.Kudryashov
*/
public class BreakpointsFavoriteListProvider extends AbstractFavoritesListProvider<Object>
implements BreakpointPanelProvider.BreakpointsListener {
private final List<BreakpointPanelProvider> myBreakpointPanelProviders;
private final BreakpointItemsTreeController myTreeController;
private final List<XBreakpointGroupingRule> myRulesAvailable = new ArrayList<XBreakpointGroupingRule>();
private final BreakpointsSimpleTree myTree;
private Set<XBreakpointGroupingRule> myRulesEnabled = new TreeSet<XBreakpointGroupingRule>(new Comparator<XBreakpointGroupingRule>() {
@Override
public int compare(XBreakpointGroupingRule o1, XBreakpointGroupingRule o2) {
final int res = o2.getPriority() - o1.getPriority();
return res != 0 ? res : (o1.getId().compareTo(o2.getId()));
}
});
public BreakpointsFavoriteListProvider(Project project) {
super(project, "Breakpoints");
myBreakpointPanelProviders = XBreakpointUtil.collectPanelProviders();
for (BreakpointPanelProvider provider : myBreakpointPanelProviders) {
provider.addListener(this, myProject);
provider.createBreakpointsGroupingRules(myRulesAvailable);
}
myTreeController = new BreakpointItemsTreeController(myRulesAvailable);
myTree = new BreakpointsSimpleTree(myProject, myTreeController);
myTreeController.setTreeView(myTree);
}
@Override
public void breakpointsChanged() {
List<BreakpointItem> items = new ArrayList<BreakpointItem>();
for (final BreakpointPanelProvider provider : myBreakpointPanelProviders) {
provider.provideBreakpointItems(myProject, items);
}
getEnabledGroupingRules(myRulesEnabled);
myTreeController.setGroupingRules(myRulesEnabled);
myTreeController.rebuildTree(items);
updateChildren();
FavoritesManager.getInstance(myProject).fireListeners(getListName(myProject));
}
private void getEnabledGroupingRules(Collection<XBreakpointGroupingRule> rules) {
rules.clear();
XBreakpointsDialogState settings = ((XBreakpointManagerImpl)XDebuggerManager.getInstance(myProject).getBreakpointManager()).getBreakpointsDialogSettings();
for (XBreakpointGroupingRule rule : myRulesAvailable) {
if (rule.isAlwaysEnabled() || (settings != null && settings.getSelectedGroupingRules().contains(rule.getId()) ) ) {
rules.add(rule);
}
}
}
private void updateChildren() {
myChildren.clear();
CheckedTreeNode root = myTreeController.getRoot();
for (int i = 0; i < root.getChildCount(); i++) {
TreeNode child = root.getChildAt(i);
if (child instanceof DefaultMutableTreeNode) {
replicate((DefaultMutableTreeNode)child, myNode, myChildren);
}
}
}
private void replicate(DefaultMutableTreeNode source, AbstractTreeNode destination, final List<AbstractTreeNode<Object>> destinationChildren) {
final ArrayList<AbstractTreeNode<Object>> copyChildren = new ArrayList<AbstractTreeNode<Object>>();
AbstractTreeNode<Object> copy = new AbstractTreeNode<Object>(myProject, source.getUserObject()) {
@NotNull
@Override
public Collection<? extends AbstractTreeNode> getChildren() {
return copyChildren;
}
@Override
protected void update(PresentationData presentation) {
}
};
for (int i = 0; i < source.getChildCount(); i++) {
final TreeNode treeNode = source.getChildAt(i);
if (treeNode instanceof DefaultMutableTreeNode) {
final DefaultMutableTreeNode sourceChild = (DefaultMutableTreeNode)treeNode;
replicate(sourceChild, copy, copyChildren);
}
}
if (checkNavigatable(copy)) {
destinationChildren.add(copy);
copy.setParent(destination);
}
}
private static boolean checkNavigatable(AbstractTreeNode<?> node) {
if (node.getValue() instanceof Navigatable && ((Navigatable)node.getValue()).canNavigate()) {
return true;
}
Collection<? extends AbstractTreeNode> children = node.getChildren();
for (AbstractTreeNode child : children) {
if (checkNavigatable(child)) {
return true;
}
}
return false;
}
@Nullable
@Override
public String getCustomName(@NotNull CommonActionsPanel.Buttons type) {
switch (type) {
case EDIT:
return "Edit breakpoint";
case REMOVE:
return "Remove breakpoint";
default:
return null;
}
}
@Override
public boolean willHandle(@NotNull CommonActionsPanel.Buttons type, Project project, @NotNull Set<Object> selectedObjects) {
return (selectedObjects.size() == 1 && (type == CommonActionsPanel.Buttons.EDIT || type == CommonActionsPanel.Buttons.REMOVE)) &&
((AbstractTreeNode)selectedObjects.iterator().next()).getValue() instanceof BreakpointItem;
}
@Override
public void handle(@NotNull CommonActionsPanel.Buttons type, Project project, @NotNull Set<Object> selectedObjects, JComponent component) {
Rectangle bounds = component.getBounds();
if (component instanceof JTree) {
JTree tree = (JTree)component;
bounds = tree.getRowBounds(tree.getLeadSelectionRow());
bounds.y += bounds.height/2;
bounds = tree.getVisibleRect().intersection(bounds);
}
Point whereToShow = new Point((int)bounds.getCenterX(), (int)bounds.getCenterY());
BreakpointItem breakpointItem = (BreakpointItem)((AbstractTreeNode)selectedObjects.iterator().next()).getValue();
switch (type) {
case EDIT:
DebuggerSupport debuggerSupport = getDebuggerSupport(breakpointItem);
if (debuggerSupport == null) return;
debuggerSupport.getEditBreakpointAction().editBreakpoint(myProject, component, whereToShow, breakpointItem.getBreakpoint());
break;
case REMOVE:
breakpointItem.removed(myProject);
break;
default: break;
}
}
@Override
public int getWeight() {
return 200;
}
@Nullable
private DebuggerSupport getDebuggerSupport(BreakpointItem breakpointItem) {
DebuggerSupport[] debuggerSupports = DebuggerSupport.getDebuggerSupports();
List<BreakpointItem> items = new ArrayList<BreakpointItem>();
for (DebuggerSupport support : debuggerSupports) {
support.getBreakpointPanelProvider().provideBreakpointItems(myProject, items);
if (items.contains(breakpointItem))
return support;
items.clear();
}
return null;
}
@Override
public void customizeRenderer(ColoredTreeCellRenderer renderer,
JTree tree,
@NotNull Object value,
boolean selected,
boolean expanded,
boolean leaf,
int row,
boolean hasFocus) {
renderer.clear();
renderer.setIcon(AllIcons.Debugger.Db_set_breakpoint);
if (value instanceof BreakpointItem) {
BreakpointItem breakpointItem = (BreakpointItem)value;
breakpointItem.setupGenericRenderer(renderer, true);
}
else if (value instanceof XBreakpointGroup) {
renderer.append(((XBreakpointGroup)value).getName());
renderer.setIcon(((XBreakpointGroup)value).getIcon(expanded));
}
else if (value instanceof XBreakpointGroupingRule) {
renderer.append(((XBreakpointGroupingRule)value).getPresentableName());
}
else {
renderer.append(String.valueOf(value));
}
}
}

View File

@@ -38,7 +38,7 @@ class JavaBreakpointItem extends BreakpointItem {
}
@Override
protected void setupGenericRenderer(SimpleColoredComponent renderer, boolean plainView) {
public void setupGenericRenderer(SimpleColoredComponent renderer, boolean plainView) {
if (plainView) {
renderer.setIcon(myBreakpoint.getIcon());
}
@@ -99,12 +99,21 @@ class JavaBreakpointItem extends BreakpointItem {
}
@Override
public boolean navigate() {
public void navigate(boolean requestFocus) {
if (myBreakpoint instanceof BreakpointWithHighlighter) {
((BreakpointWithHighlighter)myBreakpoint).getSourcePosition().navigate(true);
return true;
((BreakpointWithHighlighter)myBreakpoint).getSourcePosition().navigate(requestFocus);
}
return false;
}
@Override
public boolean canNavigate() {
return myBreakpoint instanceof BreakpointWithHighlighter && ((BreakpointWithHighlighter)myBreakpoint).getSourcePosition().canNavigate();
}
@Override
public boolean canNavigateToSource() {
return myBreakpoint instanceof BreakpointWithHighlighter &&
((BreakpointWithHighlighter)myBreakpoint).getSourcePosition().canNavigateToSource();
}
@Override

View File

@@ -137,7 +137,7 @@ public class BookmarksFavoriteListProvider extends AbstractFavoritesListProvider
}
@Override
public void handle(@NotNull CommonActionsPanel.Buttons type, Project project, @NotNull Set<Object> selectedObjects) {
public void handle(@NotNull CommonActionsPanel.Buttons type, Project project, @NotNull Set<Object> selectedObjects, JComponent component) {
switch (type) {
case EDIT:
@@ -164,6 +164,11 @@ public class BookmarksFavoriteListProvider extends AbstractFavoritesListProvider
}
}
@Override
public int getWeight() {
return 100;
}
@Override
public void customizeRenderer(ColoredTreeCellRenderer renderer,
JTree tree,

View File

@@ -86,7 +86,14 @@ public abstract class AbstractFavoritesListProvider<T> implements FavoritesListP
}
@Override
public void handle(@NotNull CommonActionsPanel.Buttons type, Project project, @NotNull Set<Object> selectedObjects) {
public void handle(@NotNull CommonActionsPanel.Buttons type, Project project, @NotNull Set<Object> selectedObjects, JComponent component) {
}
@Override
public int compareTo(FavoritesListProvider o) {
if (getWeight() > o.getWeight()) return 1;
if (getWeight() < o.getWeight()) return -1;
return 0;
}
@Override

View File

@@ -32,7 +32,7 @@ import java.util.Set;
* Date: 6/7/12
* Time: 4:17 PM
*/
public interface FavoritesListProvider extends Comparator<FavoritesTreeNodeDescriptor> {
public interface FavoritesListProvider extends Comparator<FavoritesTreeNodeDescriptor>, Comparable<FavoritesListProvider> {
ExtensionPointName<FavoritesListProvider> EP_NAME = new ExtensionPointName<FavoritesListProvider>("com.intellij.favoritesListProvider");
String getListName(final Project project);
@@ -42,8 +42,9 @@ public interface FavoritesListProvider extends Comparator<FavoritesTreeNodeDescr
boolean willHandle(@NotNull CommonActionsPanel.Buttons type, Project project, @NotNull Set<Object> selectedObjects);
void handle(@NotNull CommonActionsPanel.Buttons type, Project project, @NotNull Set<Object> selectedObjects);
void handle(@NotNull CommonActionsPanel.Buttons type, Project project, @NotNull Set<Object> selectedObjects, JComponent component);
int getWeight();
@Nullable
FavoritesListNode createFavoriteListNode(Project project);

View File

@@ -48,7 +48,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import static com.intellij.ide.favoritesTreeView.FavoritesListProvider.EP_NAME;
@@ -124,7 +123,9 @@ public class FavoritesManager implements ProjectComponent, JDOMExternalizable {
for (String listName : myName2FavoritesRoots.keySet()) {
result.add(new FavoritesListNode(myProject, listName, myDescriptions.get(listName)));
}
for (FavoritesListProvider provider : myProviders.values()) {
ArrayList<FavoritesListProvider> providers = new ArrayList<FavoritesListProvider>(myProviders.values());
Collections.sort(providers);
for (FavoritesListProvider provider : providers) {
result.add(provider.createFavoriteListNode(myProject));
}
return result;

View File

@@ -70,7 +70,11 @@ public class TaskDefaultFavoriteListProvider extends AbstractFavoritesListProvid
return null;
}
//@Override
@Override
public int getWeight() {
return 300;
}
//@Override
//public Comparator<FavoritesTreeNodeDescriptor> getNodeDescriptorComparator() {
// return new Comparator<FavoritesTreeNodeDescriptor>() {
// @Override

View File

@@ -61,7 +61,7 @@ public class DeleteFromFavoritesAction extends AnActionButton implements DumbAwa
String listName = FavoritesTreeViewPanel.FAVORITES_LIST_NAME_DATA_KEY.getData(dataContext);
FavoritesListProvider provider = favoritesManager.getListProvider(listName);
if (provider != null && provider.willHandle(CommonActionsPanel.Buttons.REMOVE, project, selection)) {
provider.handle(CommonActionsPanel.Buttons.REMOVE, project, selection);
provider.handle(CommonActionsPanel.Buttons.REMOVE, project, selection, builder.getTree());
return;
}
FavoritesTreeNodeDescriptor[] roots = FavoritesTreeViewPanel.CONTEXT_FAVORITES_ROOTS_DATA_KEY.getData(dataContext);

View File

@@ -42,7 +42,7 @@ public class EditFavoritesAction extends AnAction {
FavoritesListProvider provider = favoritesManager.getListProvider(listName);
Set<Object> selection = treeBuilder.getSelectedElements();
if (provider != null && provider.willHandle(CommonActionsPanel.Buttons.EDIT, project, selection)) {
provider.handle(CommonActionsPanel.Buttons.EDIT, project, selection);
provider.handle(CommonActionsPanel.Buttons.EDIT, project, selection, treeBuilder.getTree());
return;
}
favoritesManager.renameList(project, listName);

View File

@@ -40,7 +40,7 @@ import java.awt.*;
*/
public abstract class EditBreakpointActionHandler extends DebuggerActionHandler {
protected abstract void doShowPopup(Project project, EditorGutterComponentEx gutterComponent, Point whereToShow, Object breakpoint);
protected abstract void doShowPopup(Project project, JComponent component, Point whereToShow, Object breakpoint);
@Override
public void perform(@NotNull Project project, AnActionEvent event) {
@@ -66,4 +66,8 @@ public abstract class EditBreakpointActionHandler extends DebuggerActionHandler
Point whereToShow = new Point(point.x + icon.getIconWidth() / 2 + gutterComponent.getIconsAreaWidth(), point.y + icon.getIconHeight() / 2);
doShowPopup(project, gutterComponent, whereToShow, breakpoint);
}
public void editBreakpoint(@NotNull Project project, @NotNull JComponent parent, @NotNull Point whereToShow, @NotNull Object breakpoint) {
doShowPopup(project, parent, whereToShow, breakpoint);
}
}

View File

@@ -19,7 +19,6 @@ import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ex.EditorGutterComponentEx;
import com.intellij.openapi.editor.markup.GutterIconRenderer;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Pair;
@@ -29,6 +28,7 @@ import com.intellij.xdebugger.impl.breakpoints.XLineBreakpointImpl;
import com.intellij.xdebugger.impl.ui.DebuggerUIUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.*;
/**
@@ -40,8 +40,8 @@ import java.awt.*;
*/
public class XDebuggerEditBreakpointActionHandler extends EditBreakpointActionHandler {
@Override
protected void doShowPopup(Project project, EditorGutterComponentEx gutterComponent, Point whereToShow, Object breakpoint) {
DebuggerUIUtil.showXBreakpointEditorBalloon(project, whereToShow, gutterComponent, false, (XBreakpoint)breakpoint);
protected void doShowPopup(Project project, JComponent component, Point whereToShow, Object breakpoint) {
DebuggerUIUtil.showXBreakpointEditorBalloon(project, whereToShow, component, false, (XBreakpoint)breakpoint);
}
@Override

View File

@@ -48,7 +48,7 @@ class XBreakpointItem extends BreakpointItem {
setupGenericRenderer(renderer, false);
}
protected void setupGenericRenderer(SimpleColoredComponent renderer, boolean plainView) {
public void setupGenericRenderer(SimpleColoredComponent renderer, boolean plainView) {
if (plainView) {
renderer.setIcon(getIcon());
}
@@ -102,13 +102,23 @@ class XBreakpointItem extends BreakpointItem {
}
@Override
public boolean navigate() {
public void navigate(boolean requestFocus) {
Navigatable navigatable = myBreakpoint.getNavigatable();
if (navigatable != null) {
navigatable.navigate(true);
return true;
navigatable.navigate(requestFocus);
}
return false;
}
@Override
public boolean canNavigate() {
Navigatable navigatable = myBreakpoint.getNavigatable();
return navigatable != null && navigatable.canNavigate();
}
@Override
public boolean canNavigateToSource() {
Navigatable navigatable = myBreakpoint.getNavigatable();
return navigatable != null && navigatable.canNavigateToSource();
}
private XBreakpointManagerImpl getManager() {

View File

@@ -29,6 +29,11 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.NonNls;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
* @author nik
*/
@@ -86,4 +91,18 @@ public class XBreakpointUtil {
}
return Pair.create(null, null);
}
public static List<BreakpointPanelProvider> collectPanelProviders() {
List<BreakpointPanelProvider> panelProviders = new ArrayList<BreakpointPanelProvider>();
for (DebuggerSupport debuggerSupport : DebuggerSupport.getDebuggerSupports()) {
panelProviders.add(debuggerSupport.getBreakpointPanelProvider());
}
Collections.sort(panelProviders, new Comparator<BreakpointPanelProvider>() {
@Override
public int compare(BreakpointPanelProvider o1, BreakpointPanelProvider o2) {
return o2.getPriority() - o1.getPriority();
}
});
return panelProviders;
}
}

View File

@@ -24,6 +24,7 @@ import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.Navigatable;
import com.intellij.ui.ColorUtil;
import com.intellij.ui.ColoredListCellRenderer;
import com.intellij.ui.ColoredTreeCellRenderer;
@@ -34,7 +35,7 @@ import com.intellij.xdebugger.ui.DebuggerColors;
import javax.swing.*;
public abstract class BreakpointItem extends ItemWrapper implements Comparable<BreakpointItem> {
public abstract class BreakpointItem extends ItemWrapper implements Comparable<BreakpointItem>, Navigatable {
public static final Key<Object> EDITOR_ONLY = Key.create("EditorOnly");
public abstract Object getBreakpoint();
@@ -94,7 +95,7 @@ public abstract class BreakpointItem extends ItemWrapper implements Comparable<B
}
protected abstract void setupGenericRenderer(SimpleColoredComponent renderer, boolean plainView);
public abstract void setupGenericRenderer(SimpleColoredComponent renderer, boolean plainView);
public abstract Icon getIcon();
@@ -117,6 +118,4 @@ public abstract class BreakpointItem extends ItemWrapper implements Comparable<B
public int hashCode() {
return getBreakpoint() != null ? getBreakpoint().hashCode() : 0;
}
public abstract boolean navigate();
}

View File

@@ -31,12 +31,11 @@ public class BreakpointNoneItem extends BreakpointItem {
@Override
public boolean isEnabled() {
return false; //To change body of implemented methods use File | Settings | File Templates.
return false;
}
@Override
public void setEnabled(boolean state) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
@@ -45,14 +44,14 @@ public class BreakpointNoneItem extends BreakpointItem {
}
@Override
protected void setupGenericRenderer(SimpleColoredComponent renderer, boolean plainView) {
public void setupGenericRenderer(SimpleColoredComponent renderer, boolean plainView) {
renderer.clear();
renderer.append(getDisplayText());
}
@Override
public Icon getIcon() {
return null; //To change body of implemented methods use File | Settings | File Templates.
return null;
}
@Override
@@ -61,13 +60,22 @@ public class BreakpointNoneItem extends BreakpointItem {
}
@Override
public boolean navigate() {
return false; //To change body of implemented methods use File | Settings | File Templates.
public void navigate(boolean requestFocus) {
}
@Override
public boolean canNavigate() {
return false;
}
@Override
public boolean canNavigateToSource() {
return false;
}
@Override
public String speedSearchText() {
return null; //To change body of implemented methods use File | Settings | File Templates.
return null;
}
@Override
@@ -77,17 +85,15 @@ public class BreakpointNoneItem extends BreakpointItem {
@Override
protected void doUpdateDetailView(DetailView panel, boolean editorOnly) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override
public boolean allowedToRemove() {
return false; //To change body of implemented methods use File | Settings | File Templates.
return false;
}
@Override
public void removed(Project project) {
//To change body of implemented methods use File | Settings | File Templates.
}
@Override

View File

@@ -21,15 +21,10 @@ import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.ui.popup.JBPopup;
import com.intellij.openapi.ui.popup.JBPopupListener;
import com.intellij.openapi.ui.popup.LightweightWindowEvent;
import com.intellij.xdebugger.impl.DebuggerSupport;
import com.intellij.xdebugger.impl.breakpoints.XBreakpointUtil;
import com.intellij.xdebugger.impl.breakpoints.ui.tree.BreakpointMasterDetailPopupBuilder;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class BreakpointsMasterDetailPopupFactory {
private Project myProject;
@@ -42,20 +37,6 @@ public class BreakpointsMasterDetailPopupFactory {
myProject = project;
}
public static List<BreakpointPanelProvider> collectPanelProviders() {
List<BreakpointPanelProvider> panelProviders = new ArrayList<BreakpointPanelProvider>();
for (DebuggerSupport debuggerSupport : DebuggerSupport.getDebuggerSupports()) {
panelProviders.add(debuggerSupport.getBreakpointPanelProvider());
}
Collections.sort(panelProviders, new Comparator<BreakpointPanelProvider>() {
@Override
public int compare(BreakpointPanelProvider o1, BreakpointPanelProvider o2) {
return o2.getPriority() - o1.getPriority();
}
});
return panelProviders;
}
public void setBalloonToHide(Balloon balloonToHide, Object breakpoint) {
myBalloonToHide = balloonToHide;
myBreakpoint = breakpoint;
@@ -76,11 +57,12 @@ public class BreakpointsMasterDetailPopupFactory {
}
BreakpointMasterDetailPopupBuilder builder = new BreakpointMasterDetailPopupBuilder(myProject);
builder.setInitialBreakpoint(initialBreakpoint != null ? initialBreakpoint : myBreakpoint);
builder.setBreakpointsPanelProviders(collectPanelProviders());
builder.setBreakpointsPanelProviders(XBreakpointUtil.collectPanelProviders());
builder.setCallback(new BreakpointMasterDetailPopupBuilder.BreakpointChosenCallback() {
@Override
public void breakpointChosen(Project project, BreakpointItem breakpointItem, JBPopup popup, boolean withEnterOrDoubleClick) {
if (withEnterOrDoubleClick && breakpointItem.navigate()) {
if (withEnterOrDoubleClick && breakpointItem.canNavigate()) {
breakpointItem.navigate(true);
popup.cancel();
}
}
@@ -101,7 +83,7 @@ public class BreakpointsMasterDetailPopupFactory {
@Override
public void onClosed(LightweightWindowEvent event) {
for (BreakpointPanelProvider provider : collectPanelProviders()) {
for (BreakpointPanelProvider provider : XBreakpointUtil.collectPanelProviders()) {
provider.onDialogClosed(myProject);
}
myPopupShowing = null;

View File

@@ -1128,6 +1128,7 @@
<!-- <favoritesListProvider implementation="com.intellij.ide.favoritesTreeView.ProjectDefaultFavoriteListProvider"/> -->
<!-- <favoritesListProvider implementation="com.intellij.ide.favoritesTreeView.TaskDefaultFavoriteListProvider"/> -->
<favoritesListProvider implementation="com.intellij.ide.bookmarks.BookmarksFavoriteListProvider"/>
<favoritesListProvider implementation="com.intellij.debugger.ui.breakpoints.BreakpointsFavoriteListProvider"/>
<configurationType implementation="com.intellij.execution.applet.AppletConfigurationType"/>
<configurationProducer implementation="com.intellij.execution.applet.AppletConfigurationProducer"/>