Skip to content

Commit 915c89c

Browse files
committed
Extended support for in-line chained lambdas
this commit enables users to select lambda in a single-line chained lambda expressions to put a lambda entry breakpoint + updated chained lambda breakpoint names in breakpoints view Fixes : #732
1 parent d8fb6ab commit 915c89c

File tree

11 files changed

+355
-63
lines changed

11 files changed

+355
-63
lines changed

org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/BreakpointMarkerUpdater.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2006, 2021 IBM Corporation and others.
2+
* Copyright (c) 2006, 2025 IBM Corporation and others.
33
*
44
* This program and the accompanying materials
55
* are made available under the terms of the Eclipse Public License 2.0
@@ -32,6 +32,7 @@
3232
import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
3333
import org.eclipse.jdt.internal.debug.core.JavaDebugUtils;
3434
import org.eclipse.jdt.internal.debug.core.breakpoints.JavaLineBreakpoint;
35+
import org.eclipse.jdt.internal.debug.core.breakpoints.LambdaLocationLocator;
3536
import org.eclipse.jdt.internal.debug.core.breakpoints.ValidBreakpointLocationLocator;
3637
import org.eclipse.jface.text.BadLocationException;
3738
import org.eclipse.jface.text.IDocument;
@@ -113,15 +114,27 @@ public boolean updateMarker(IMarker marker, IDocument document, Position positio
113114
}
114115
try {
115116
ValidBreakpointLocationLocator loc;
116-
if (breakpoint instanceof IJavaMethodBreakpoint && ((IJavaMethodBreakpoint) breakpoint).isEntry()) {
117+
if (breakpoint instanceof IJavaMethodBreakpoint methodBreakpoint && methodBreakpoint.isEntry()) {
117118
IMarker m = breakpoint.getMarker();
118119
if (m != null) {
119120
int charStart = m.getAttribute(IMarker.CHAR_START, -1);
120121
int charEnd = m.getAttribute(IMarker.CHAR_END, -1);
121122
int length = charEnd - charStart + 1;
123+
if (methodBreakpoint.isLambdaBreakpoint()) {
124+
LambdaLocationLocator currentLambda = new LambdaLocationLocator(charStart, charEnd, -10);
125+
unit.accept(currentLambda);
126+
if (methodBreakpoint.getLambdaName() != null) {
127+
if (currentLambda.getSelectedLambda() != null
128+
&& !methodBreakpoint.getLambdaName().equals(currentLambda.getSelectedLambda())) {
129+
methodBreakpoint.setLambdaName(currentLambda.getSelectedLambda());
130+
}
131+
}
132+
133+
}
134+
loc = new ValidBreakpointLocationLocator(unit, document.getLineOfOffset(position.getOffset())
135+
+ 1, true, true, position.getOffset(), length);
122136
loc = new ValidBreakpointLocationLocator(unit, document.getLineOfOffset(position.getOffset())
123137
+ 1, true, true, position.getOffset(), length);
124-
125138
} else {
126139
loc = new ValidBreakpointLocationLocator(unit, document.getLineOfOffset(position.getOffset()) + 1, true, true);
127140
}

org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1775,33 +1775,53 @@ protected String getMethodBreakpointText(IJavaMethodBreakpoint methodBreakpoint)
17751775
appendSuspendPolicy(methodBreakpoint,label);
17761776
appendThreadFilter(methodBreakpoint, label);
17771777

1778-
1779-
boolean entry = methodBreakpoint.isEntry();
1780-
boolean exit = methodBreakpoint.isExit();
1781-
if (entry && exit) {
1782-
label.append(DebugUIMessages.JDIModelPresentation_entry_and_exit);
1783-
} else if (entry) {
1784-
label.append(DebugUIMessages.JDIModelPresentation_entry);
1785-
} else if (exit) {
1786-
label.append(DebugUIMessages.JDIModelPresentation_exit);
1787-
}
1788-
appendConditional(methodBreakpoint, label);
1789-
1790-
if (member != null) {
1791-
label.append(" - "); //$NON-NLS-1$
1792-
label.append(getJavaLabelProvider().getText(member));
1778+
if (methodBreakpoint.isLambdaBreakpoint()) {
1779+
appendConditional(methodBreakpoint, label);
1780+
if (methodBreakpoint.getLambdaName() != null) {
1781+
label.append(" - [ " + methodBreakpoint.getLambdaName() + " ]"); //$NON-NLS-1$ //$NON-NLS-2$
1782+
} else {
1783+
if (member != null) {
1784+
label.append(" - "); //$NON-NLS-1$
1785+
label.append(getJavaLabelProvider().getText(member));
1786+
} else {
1787+
String methodSig = methodBreakpoint.getMethodSignature();
1788+
String methodName = methodBreakpoint.getMethodName();
1789+
if (methodSig != null) {
1790+
label.append(" - "); //$NON-NLS-1$
1791+
label.append(Signature.toString(methodSig, methodName, null, false, false));
1792+
} else if (methodName != null) {
1793+
label.append(" - "); //$NON-NLS-1$
1794+
label.append(methodName);
1795+
}
1796+
}
1797+
}
17931798
} else {
1794-
String methodSig= methodBreakpoint.getMethodSignature();
1795-
String methodName= methodBreakpoint.getMethodName();
1796-
if (methodSig != null) {
1797-
label.append(" - "); //$NON-NLS-1$
1798-
label.append(Signature.toString(methodSig, methodName, null, false, false));
1799-
} else if (methodName != null) {
1799+
boolean entry = methodBreakpoint.isEntry();
1800+
boolean exit = methodBreakpoint.isExit();
1801+
if (entry && exit) {
1802+
label.append(DebugUIMessages.JDIModelPresentation_entry_and_exit);
1803+
} else if (entry) {
1804+
label.append(DebugUIMessages.JDIModelPresentation_entry);
1805+
} else if (exit) {
1806+
label.append(DebugUIMessages.JDIModelPresentation_exit);
1807+
}
1808+
appendConditional(methodBreakpoint, label);
1809+
1810+
if (member != null) {
18001811
label.append(" - "); //$NON-NLS-1$
1801-
label.append(methodName);
1812+
label.append(getJavaLabelProvider().getText(member));
1813+
} else {
1814+
String methodSig = methodBreakpoint.getMethodSignature();
1815+
String methodName = methodBreakpoint.getMethodName();
1816+
if (methodSig != null) {
1817+
label.append(" - "); //$NON-NLS-1$
1818+
label.append(Signature.toString(methodSig, methodName, null, false, false));
1819+
} else if (methodName != null) {
1820+
label.append(" - "); //$NON-NLS-1$
1821+
label.append(methodName);
1822+
}
18021823
}
18031824
}
1804-
18051825
return label.toString();
18061826
}
18071827

org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ActionMessages.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,10 @@ public class ActionMessages extends NLS {
176176
public static String Override_Dependencies_label1;
177177
public static String Override_Dependencies_label2;
178178

179+
public static String lambdaSelection;
180+
public static String lambdaSelect;
181+
public static String lambdaClose;
182+
179183
static {
180184
// load message values from bundle file
181185
NLS.initializeMessages(BUNDLE_NAME, ActionMessages.class);

org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ActionMessages.properties

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
###############################################################################
2-
# Copyright (c) 2000, 2022 IBM Corporation and others.
2+
# Copyright (c) 2000, 2025 IBM Corporation and others.
33
#
44
# This program and the accompanying materials
55
# are made available under the terms of the Eclipse Public License 2.0
@@ -154,4 +154,7 @@ Override_Dependencies_title=Override Dependencies
154154
Override_Dependencies_button=&Override
155155
Override_Dependencies_button1=&Override Dependencies...
156156
Override_Dependencies_label1=Dependencies derived from the Java Build Path:
157-
Override_Dependencies_label2=Dependencies for launching:
157+
Override_Dependencies_label2=Dependencies for launching:
158+
lambdaSelection=Select a lambda
159+
lambdaSelect=Select
160+
lambdaClose=Close

0 commit comments

Comments
 (0)