IDEA-142098 Multiple breakpoints in a single line: don't display the whole method body in toggle breakpoint drop-down

This commit is contained in:
Egor.Ushakov
2016-09-29 19:16:25 +03:00
parent eb9e44f435
commit 80fbbead68
8 changed files with 41 additions and 5 deletions
@@ -19,6 +19,7 @@ import com.intellij.debugger.DebuggerBundle;
import com.intellij.debugger.HelpID;
import com.intellij.debugger.SourcePosition;
import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
@@ -121,10 +122,9 @@ public class JavaLineBreakpointType extends JavaLineBreakpointTypeBase<JavaLineB
}
List<JavaBreakpointVariant> res = new SmartList<>();
res.add(new JavaBreakpointVariant(position)); //all
if (!(startMethod instanceof PsiLambdaExpression)) {
res.add(new ExactJavaBreakpointVariant(position, startMethod, -1)); // base method
res.add(new LineJavaBreakpointVariant(position, startMethod, -1)); // base method
}
int ordinal = 0;
@@ -132,10 +132,17 @@ public class JavaLineBreakpointType extends JavaLineBreakpointTypeBase<JavaLineB
PsiElement firstElem = DebuggerUtilsEx.getFirstElementOnTheLine(lambda, document, position.getLine());
XSourcePositionImpl elementPosition = XSourcePositionImpl.createByElement(firstElem);
if (elementPosition != null) {
res.add(new ExactJavaBreakpointVariant(elementPosition, lambda, ordinal++));
if (lambda == startMethod) {
res.add(0, new LineJavaBreakpointVariant(elementPosition, lambda, ordinal++));
}
else {
res.add(new LambdaJavaBreakpointVariant(elementPosition, lambda, ordinal++));
}
}
}
res.add(new JavaBreakpointVariant(position)); //all
return res;
}
@@ -209,6 +216,33 @@ public class JavaLineBreakpointType extends JavaLineBreakpointTypeBase<JavaLineB
}
}
public class LineJavaBreakpointVariant extends ExactJavaBreakpointVariant {
public LineJavaBreakpointVariant(@NotNull XSourcePosition position, @NotNull PsiElement element, Integer lambdaOrdinal) {
super(position, element, lambdaOrdinal);
}
@Override
public String getText() {
return "Line";
}
@Override
public Icon getIcon() {
return AllIcons.Debugger.Db_set_breakpoint;
}
}
public class LambdaJavaBreakpointVariant extends ExactJavaBreakpointVariant {
public LambdaJavaBreakpointVariant(@NotNull XSourcePosition position, @NotNull PsiElement element, Integer lambdaOrdinal) {
super(position, element, lambdaOrdinal);
}
@Override
public Icon getIcon() {
return AllIcons.Debugger.LambdaBreakpoint;
}
}
@Nullable
@Override
public TextRange getHighlightRange(XLineBreakpoint<JavaLineBreakpointProperties> breakpoint) {
Binary file not shown.

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 732 B

@@ -275,6 +275,8 @@ public class AllIcons {
public static final Icon EvaluateExpression = IconLoader.getIcon("/debugger/evaluateExpression.png"); // 16x16
public static final Icon Frame = IconLoader.getIcon("/debugger/frame.png"); // 16x16
public static final Icon KillProcess = IconLoader.getIcon("/debugger/killProcess.png"); // 16x16
public static final Icon LambdaBreakpoint = IconLoader.getIcon("/debugger/LambdaBreakpoint.png"); // 12x12
public static final Icon MultipleBreakpoints = IconLoader.getIcon("/debugger/MultipleBreakpoints.png"); // 12x12
public static final Icon MuteBreakpoints = IconLoader.getIcon("/debugger/muteBreakpoints.png"); // 16x16
public static final Icon NewWatch = IconLoader.getIcon("/debugger/newWatch.png"); // 16x16
public static final Icon Question_badge = IconLoader.getIcon("/debugger/question_badge.png"); // 6x9
@@ -164,7 +164,7 @@ public abstract class XLineBreakpointType<P extends XBreakpointProperties> exten
@Nullable
@Override
public Icon getIcon() {
return null;
return AllIcons.Debugger.MultipleBreakpoints;
}
@Nullable
@@ -226,7 +226,7 @@ public class XDebuggerUtilImpl extends XDebuggerUtil {
final MySelectionListener selectionListener = new MySelectionListener();
ListPopupImpl popup = new ListPopupImpl(
new BaseListPopupStep<XLineBreakpointType.XLineBreakpointVariant>("Create breakpoint for", variants) {
new BaseListPopupStep<XLineBreakpointType.XLineBreakpointVariant>("Set Breakpoint", variants) {
@NotNull
@Override
public String getTextFor(XLineBreakpointType.XLineBreakpointVariant value) {