Bug 573618 - [16] Adding a line/method breakpoint creates a class
breakpoint for record
Change-Id: I850f48970095a74aab36fc4b817a2ff254839256
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.debug/+/181096
Tested-by: JDT Bot <jdt-bot@eclipse.org>
Reviewed-by: Sarika Sinha <sarika.sinha@in.ibm.com>
diff --git a/org.eclipse.jdt.debug.tests/java16_/a/b/c/RecordTests.java b/org.eclipse.jdt.debug.tests/java16_/a/b/c/RecordTests.java
index c9a1186..2253759 100644
--- a/org.eclipse.jdt.debug.tests/java16_/a/b/c/RecordTests.java
+++ b/org.eclipse.jdt.debug.tests/java16_/a/b/c/RecordTests.java
@@ -12,7 +12,11 @@
* IBM Corporation - initial API and implementation
*******************************************************************************/
package a.b.c;
-record R(int i, String s) {}
+record R(int i, String s) {
+ R( int i){
+ this(i, "hello");
+ }
+}
public class RecordTests {
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/RecordBreakpointTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/RecordBreakpointTests.java
index 4e651bd..c94095d 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/RecordBreakpointTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/breakpoints/RecordBreakpointTests.java
@@ -15,6 +15,7 @@
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.debug.core.IJavaClassPrepareBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
import org.eclipse.jdt.debug.tests.AbstractDebugTest;
public class RecordBreakpointTests extends AbstractDebugTest {
@@ -30,6 +31,7 @@
protected IJavaProject getProjectContext() {
return get16_Project();
}
+
public void testRecordClassBreakpoint() throws Exception {
try {
@@ -43,4 +45,17 @@
}
}
+ public void testRecordLineBreakpoint() throws Exception {
+
+ try {
+ // create a classLoad breakpoint to test
+ IJavaLineBreakpoint lineBreakpoint = createLineBreakpoint(17, "a.b.c.RecordTests");
+ assertEquals("wrong type name", "a.b.c.RecordTests", lineBreakpoint.getTypeName());
+ } catch (Exception e) {
+ throw e;
+ } finally {
+ removeAllBreakpoints();
+ }
+ }
+
}
diff --git a/org.eclipse.jdt.debug.ui/.settings/.api_filters b/org.eclipse.jdt.debug.ui/.settings/.api_filters
index 0d462e6..2a6baac 100644
--- a/org.eclipse.jdt.debug.ui/.settings/.api_filters
+++ b/org.eclipse.jdt.debug.ui/.settings/.api_filters
@@ -8,15 +8,6 @@
</message_arguments>
</filter>
</resource>
- <resource path="ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java" type="org.eclipse.jdt.internal.debug.ui.actions.ToggleBreakpointAdapter">
- <filter comment="For Java 15" id="640712815">
- <message_arguments>
- <message_argument value="IType"/>
- <message_argument value="ToggleBreakpointAdapter"/>
- <message_argument value="isRecord()"/>
- </message_arguments>
- </filter>
- </resource>
<resource path="ui/org/eclipse/jdt/internal/debug/ui/classpath/ClasspathEntry.java" type="org.eclipse.jdt.internal.debug.ui.classpath.ClasspathEntry">
<filter comment="Known illegal implementation" id="574619656">
<message_arguments>
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
index afed9b4..8b131a6 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
@@ -1283,8 +1283,14 @@
if (e instanceof IMember) {
m = (IMember) e;
}
+ // Class breakpoint should be created if the offset was at the record component in the record definition
if (m != null && m.getParent() instanceof IType && ((IType) m.getParent()).isRecord()) {
- m = (IMember) m.getParent();
+ if (m instanceof IField) {
+ IField field = (IField)m;
+ if (field.isRecordComponent()) {
+ m = (IMember) field.getParent();
+ }
+ }
}
}
if (m != null) {