mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-01-08 06:39:38 +07:00
breakpoints -> favorites window
This commit is contained in:
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
Reference in New Issue
Block a user