diff --git a/org.eclipse.jdt.debug.jdi.tests/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug.jdi.tests/META-INF/MANIFEST.MF
index f322a599c6..96f671ae0c 100644
--- a/org.eclipse.jdt.debug.jdi.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug.jdi.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: JDI Tests
Bundle-SymbolicName: org.eclipse.jdt.debug.jdi.tests; singleton:=true
-Bundle-Version: 1.2.0.qualifier
+Bundle-Version: 1.2.100.qualifier
Bundle-ClassPath: .
Bundle-Vendor: Eclipse
Require-Bundle: org.junit,
diff --git a/org.eclipse.jdt.debug.jdi.tests/forceQualifierUpdate.txt b/org.eclipse.jdt.debug.jdi.tests/forceQualifierUpdate.txt
new file mode 100644
index 0000000000..9bcdb69a5a
--- /dev/null
+++ b/org.eclipse.jdt.debug.jdi.tests/forceQualifierUpdate.txt
@@ -0,0 +1,2 @@
+
+https://github.com/eclipse-platform/eclipse.platform.releng.aggregator/issues/3137
\ No newline at end of file
diff --git a/org.eclipse.jdt.debug.jdi.tests/pom.xml b/org.eclipse.jdt.debug.jdi.tests/pom.xml
index ec0492497e..2724fd0570 100644
--- a/org.eclipse.jdt.debug.jdi.tests/pom.xml
+++ b/org.eclipse.jdt.debug.jdi.tests/pom.xml
@@ -18,7 +18,7 @@
org.eclipse.jdtorg.eclipse.jdt.debug.jdi.tests
- 1.2.0-SNAPSHOT
+ 1.2.100-SNAPSHOTeclipse-test-plugin${project.artifactId}
diff --git a/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF b/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF
index c95cd608dd..3da93ba225 100644
--- a/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.debug.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jdt.debug.tests; singleton:=true
-Bundle-Version: 3.12.650.qualifier
+Bundle-Version: 3.12.750.qualifier
Bundle-ClassPath: javadebugtests.jar
Bundle-Activator: org.eclipse.jdt.debug.testplugin.JavaTestPlugin
Bundle-Vendor: %providerName
diff --git a/org.eclipse.jdt.debug.tests/pom.xml b/org.eclipse.jdt.debug.tests/pom.xml
index 0c8fbfce39..b7f65e5d6e 100644
--- a/org.eclipse.jdt.debug.tests/pom.xml
+++ b/org.eclipse.jdt.debug.tests/pom.xml
@@ -18,7 +18,7 @@
org.eclipse.jdtorg.eclipse.jdt.debug.tests
- 3.12.650-SNAPSHOT
+ 3.12.750-SNAPSHOTeclipse-test-plugin${project.artifactId}
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/TestUtil.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/TestUtil.java
index dc45a32db1..c36239f701 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/TestUtil.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/TestUtil.java
@@ -25,13 +25,16 @@
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.eclipse.core.internal.jobs.JobManager;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.internal.ui.views.console.ProcessConsole;
import org.eclipse.jdt.debug.testplugin.JavaTestPlugin;
+import org.eclipse.jface.text.reconciler.AbstractReconciler;
import org.eclipse.swt.widgets.Display;
import org.junit.Assert;
@@ -110,6 +113,8 @@ public static void runEventLoop() {
/**
* Utility for waiting until the execution of jobs of any family has finished or timeout is reached. If no jobs are running, the method waits
* given minimum wait time. While this method is waiting for jobs, UI events are processed.
+ *
+ * Note: This method does not wait for jobs that belong to the families specified in {@link #getUsualJobFamiliesToIgnore()}.
*
* @param owner
* name of the caller which will be logged as prefix if the wait times out
@@ -120,7 +125,7 @@ public static void runEventLoop() {
* @return true if the method timed out, false if all the jobs terminated before the timeout
*/
public static boolean waitForJobs(String owner, long minTimeMs, long maxTimeMs) {
- return waitForJobs(owner, minTimeMs, maxTimeMs, (Object[]) null);
+ return waitForJobs(owner, minTimeMs, maxTimeMs, getUsualJobFamiliesToIgnore());
}
/**
@@ -146,6 +151,15 @@ public static boolean waitForJobs(String owner, Object jobFamily, long minTimeMs
if (maxTimeMs < minTimeMs) {
throw new IllegalArgumentException("Max time is smaller as min time!");
}
+ // Not so nice workaround for https://github.com/eclipse-jdt/eclipse.jdt.debug/issues/721
+ // After https://github.com/eclipse-platform/eclipse.platform.ui/pull/3025 every opened editor
+ // means there will be a reconciler job running, which is not what we do NOT want to wait for.
+ // AbstractReconciler.class is the family object we can check for.
+ if (excludedFamilies == null) {
+ excludedFamilies = new Object[] { AbstractReconciler.class };
+ } else if (excludedFamilies.length == 1 && excludedFamilies[0] == ProcessConsole.class) {
+ excludedFamilies = getUsualJobFamiliesToIgnore();
+ }
wakeUpSleepingJobs(jobFamily);
final long startNanos = System.nanoTime();
while (System.nanoTime() - startNanos < minTimeMs * 1_000_000L) {
@@ -168,6 +182,7 @@ public static boolean waitForJobs(String owner, Object jobFamily, long minTimeMs
// only uninteresting jobs running
break;
}
+ jobs.forEach(Job::wakeUp);
if (!Collections.disjoint(runningJobs, jobs)) {
// There is a job which runs already quite some time, don't wait for it to avoid test timeouts
@@ -185,11 +200,20 @@ public static boolean waitForJobs(String owner, Object jobFamily, long minTimeMs
return false;
}
- private static void wakeUpSleepingJobs(Object family) {
- List sleepingJobs = getSleepingJobs(family);
- for (Job job : sleepingJobs) {
- job.wakeUp();
- }
+ /**
+ * Returns a list of job families that are usually ignored in tests.
+ *
+ * This is used to avoid waiting for jobs that are not relevant to the test.
+ *
+ *
+ * @return an array of job family classes to ignore
+ */
+ public static Object[] getUsualJobFamiliesToIgnore() {
+ return new Object[] { ProcessConsole.class, AbstractReconciler.class };
+ }
+
+ private static void wakeUpSleepingJobs(Object jobFamily) {
+ Job.getJobManager().wakeUp(jobFamily);
}
static Set runningJobs = new LinkedHashSet<>();
@@ -210,6 +234,7 @@ private static String dumpRunningOrWaitingJobs(List jobs) {
runningJobs.add(job);
sb.append("\n'").append(job.toString()).append("'/");
sb.append(job.getClass().getName());
+ sb.append(":").append(JobManager.printState(job));
Thread thread = job.getThread();
if (thread != null) {
ThreadInfo[] threadInfos = ManagementFactory.getThreadMXBean().getThreadInfo(new long[] { thread.threadId() }, true, true);
@@ -239,17 +264,6 @@ public static List getRunningOrWaitingJobs(Object jobFamily, Object... excl
return running;
}
- private static List getSleepingJobs(Object family) {
- List sleeping = new ArrayList<>();
- Job[] jobs = Job.getJobManager().find(family);
- for (Job job : jobs) {
- if (job.getState() == Job.SLEEPING) {
- sleeping.add(job);
- }
- }
- return sleeping;
- }
-
private static boolean isRunningOrWaitingJob(Job job) {
int state = job.getState();
return (state == Job.RUNNING || state == Job.WAITING);
diff --git a/org.eclipse.jdt.debug.ui/plugin.properties b/org.eclipse.jdt.debug.ui/plugin.properties
index f34ade20a4..617d69a556 100644
--- a/org.eclipse.jdt.debug.ui/plugin.properties
+++ b/org.eclipse.jdt.debug.ui/plugin.properties
@@ -345,4 +345,9 @@ OpenFromClipboardAction.name = Open from Clipboard
VariablesView.name = Variables
CompareObjects.label=Compare
-CompareObjects.tooltip=Compare selected objects
\ No newline at end of file
+CompareObjects.tooltip=Compare selected objects
+
+ToggleTriggerpointAction.label=Toggle Triggerpoint
+ToggleTriggerpointCommand.description=Creates or removes a triggerpoint
+ToggleHitpointAction.label=Toggle Breakpoint with Hit Count
+ToggleHitpointCommand.description=Creates or removes a breakpoint with hit count
\ No newline at end of file
diff --git a/org.eclipse.jdt.debug.ui/plugin.xml b/org.eclipse.jdt.debug.ui/plugin.xml
index 04cd9bfb04..91232108a1 100644
--- a/org.eclipse.jdt.debug.ui/plugin.xml
+++ b/org.eclipse.jdt.debug.ui/plugin.xml
@@ -1056,6 +1056,20 @@
menubarPath="debug"
id="org.eclipse.jdt.debug.ui.actions.EnableDisableBreakpointRulerActionDelegate">
+
+
+
+
+
+
+
+ setExtraction(List selec
@SuppressWarnings("nls")
public List setElementsExtraction(IJavaObject javaObject1) throws DebugException {
List contents = new ArrayList<>();
- IJavaThread thread = (IJavaThread) javaObject1.getDebugTarget().getThreads()[0];
+ IJavaThread thread = getSuspendedThread(javaObject1);
IJavaValue toArray = javaObject1.sendMessage("toArray", "()[Ljava/lang/Object;", null, thread, false);
for (IVariable ob : toArray.getVariables()) {
contents.add(objectValueExtraction((IJavaValue) ob.getValue()));
@@ -661,7 +663,7 @@ public Map iterableExtraction(List
@SuppressWarnings("nls")
public List iterableElementsExtraction(IJavaObject javaObject1) throws DebugException {
List contents = new ArrayList<>();
- IJavaThread thread = (IJavaThread) javaObject1.getDebugTarget().getThreads()[0];
+ IJavaThread thread = getSuspendedThread(javaObject1);
IJavaObject iterator = (IJavaObject) javaObject1.sendMessage("iterator", "()Ljava/util/Iterator;", null, thread, false);
while (true) {
IJavaValue hasNext = iterator.sendMessage("hasNext", "()Z", null, thread, false);
@@ -707,7 +709,7 @@ public Map listExtraction(List sele
@SuppressWarnings("nls")
public List listElementsExtraction(IJavaObject javaObject1) throws DebugException {
List contents = new ArrayList<>();
- IJavaThread thread = (IJavaThread) javaObject1.getDebugTarget().getThreads()[0];
+ IJavaThread thread = getSuspendedThread(javaObject1);
IJavaValue toArray = javaObject1.sendMessage("toArray", "()[Ljava/lang/Object;", null, thread, false);
for (IVariable ob : toArray.getVariables()) {
contents.add(objectValueExtraction((IJavaValue) ob.getValue()));
@@ -766,9 +768,9 @@ public Map stringExtraction(List se
@SuppressWarnings("nls")
public Map mapElementsExtraction(IJavaVariable selectedObject1) throws DebugException {
if (selectedObject1.getValue() instanceof IJavaObject javaObject1) {
+ IJavaThread thread = getSuspendedThread(javaObject1);
Map result = new HashMap<>();
List keySet = new ArrayList<>();
- IJavaThread thread = (IJavaThread) javaObject1.getDebugTarget().getThreads()[0];
IJavaObject keySetObject = (IJavaObject) javaObject1.sendMessage("keySet", "()Ljava/util/Set;", null, thread, false);
IJavaValue keyToArray = keySetObject.sendMessage("toArray", "()[Ljava/lang/Object;", null, thread, false);
for (IVariable ob : keyToArray.getVariables()) {
@@ -854,4 +856,20 @@ public static String checkInterfaces(String className) {
}
}
+ /**
+ * Returns a suspended thread for vm message operation
+ *
+ * @param value
+ * IJavaValue object
+ * @return returns a suspended IJavaThread object
+ */
+ private IJavaThread getSuspendedThread(IJavaValue value) throws DebugException {
+ IJavaThread thread = (IJavaThread) value.getDebugTarget().getThreads()[0];
+ if (!thread.isSuspended()) {
+ JDIStackFrame frame = (JDIStackFrame) DebugUITools.getDebugContext();
+ thread = (IJavaThread) frame.getThread();
+ }
+ return thread;
+ }
+
}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AbstractRulerToggleBreakpointActionDelegate.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AbstractRulerToggleBreakpointActionDelegate.java
new file mode 100644
index 0000000000..7bfea8736a
--- /dev/null
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/AbstractRulerToggleBreakpointActionDelegate.java
@@ -0,0 +1,126 @@
+/*******************************************************************************
+ * Copyright (c) 2022 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.debug.ui.actions;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.internal.ui.DebugUIPlugin;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.TextSelection;
+import org.eclipse.jface.text.source.IVerticalRulerInfo;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.IActionDelegate2;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.texteditor.AbstractRulerActionDelegate;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+public abstract class AbstractRulerToggleBreakpointActionDelegate extends AbstractRulerActionDelegate implements IActionDelegate2 {
+
+ protected ITextEditor currentEditor;
+ private IAction dummyAction;
+
+ @Override
+ protected IAction createAction(ITextEditor editor, IVerticalRulerInfo rulerInfo) {
+ dummyAction = new Action() {
+ // empty implementation to make compiler happy
+ };
+ return dummyAction;
+ }
+
+ @Override
+ public void setActiveEditor(IAction callerAction, IEditorPart targetEditor) {
+ if (targetEditor instanceof ITextEditor textEditor) {
+ currentEditor = textEditor;
+ } else {
+ currentEditor = null;
+ }
+ }
+
+ @Override
+ public void init(IAction action) {
+ }
+
+ @Override
+ public void dispose() {
+ currentEditor = null;
+ dummyAction = null;
+ super.dispose();
+ }
+
+ @Override
+ public void runWithEvent(IAction action, Event event) {
+ if (currentEditor == null) {
+ return;
+ }
+ IVerticalRulerInfo rulerInfo = currentEditor.getAdapter(IVerticalRulerInfo.class);
+ if (rulerInfo == null) {
+ return;
+ }
+ int lineOfLastMouseButtonActivity = rulerInfo.getLineOfLastMouseButtonActivity();
+ if (lineOfLastMouseButtonActivity < 0) {
+ return;
+ }
+ IDocument document = getDocument(currentEditor);
+ if (document == null) {
+ return;
+ }
+ ToggleBreakpointAdapter toggle = new ToggleBreakpointAdapter();
+ try {
+ ITextSelection selection = getTextSelection(currentEditor, document, lineOfLastMouseButtonActivity);
+ if (toggle.canToggleLineBreakpoints(currentEditor, selection)) {
+ boolean success = doWork(currentEditor, selection);
+ if (success) {
+ toggle.toggleBreakpoints(currentEditor, selection);
+ }
+ }
+ } catch (BadLocationException | CoreException e) {
+ DebugUIPlugin.log(e);
+ }
+ }
+
+ protected static IDocument getDocument(ITextEditor editor) {
+ IDocumentProvider provider = editor.getDocumentProvider();
+ if (provider != null) {
+ return provider.getDocument(editor.getEditorInput());
+ }
+ IDocument doc = editor.getAdapter(IDocument.class);
+ if (doc != null) {
+ return doc;
+ }
+ return null;
+ }
+
+ protected ITextSelection getTextSelection(ITextEditor editor, IDocument document, int line) throws BadLocationException {
+ IRegion region = document.getLineInformation(line);
+ ITextSelection textSelection = new TextSelection(document, region.getOffset(), 0);
+ ISelectionProvider provider = editor.getSite().getSelectionProvider();
+ if (provider != null) {
+ ISelection selection = provider.getSelection();
+ if (selection instanceof ITextSelection && ((ITextSelection) selection).getStartLine() <= line
+ && ((ITextSelection) selection).getEndLine() >= line) {
+ textSelection = (ITextSelection) selection;
+ }
+ }
+ return textSelection;
+ }
+
+ abstract protected boolean doWork(ITextEditor editor, ITextSelection selection);
+}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointToggleUtils.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointToggleUtils.java
index 903d26ee9a..a45fdbd66c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointToggleUtils.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/BreakpointToggleUtils.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2016, 2022 IBM Corporation and others.
+ * Copyright (c) 2016, 2025 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -24,18 +24,28 @@
*/
public class BreakpointToggleUtils {
- private static boolean isTracepoint = false;
- private static boolean isLambdaEntryBreakpoint = false;
+ private static boolean isTracepoint;
+ private static boolean isLambdaEntryBreakpoint;
+ private static boolean isTriggerpoint;
+ private static boolean isHitPoint;
+ private static int hitCount;
-
- public static void setUnsetTracepoints(boolean tracePoint) {
+ public static void setUnsetTracepoint(boolean tracePoint) {
isTracepoint = tracePoint;
}
- public static boolean isToggleTracepoints() {
+ public static boolean isToggleTracepoint() {
return isTracepoint;
}
+ public static void setTriggerpoint(boolean triggerPoint) {
+ isTriggerpoint = triggerPoint;
+ }
+
+ public static boolean isTriggerpoint() {
+ return isTriggerpoint;
+ }
+
public static void setUnsetLambdaEntryBreakpoint(boolean lambdaEntryBreakpoint) {
isLambdaEntryBreakpoint = lambdaEntryBreakpoint;
}
@@ -44,6 +54,25 @@ public static boolean isToggleLambdaEntryBreakpoint() {
return isLambdaEntryBreakpoint;
}
+ public static void setHitpoint(boolean hitcount) {
+ isHitPoint = hitcount;
+ if (!hitcount) {
+ setHitCount(0);
+ }
+ }
+
+ public static boolean isHitpoint() {
+ return isHitPoint;
+ }
+
+ public static void setHitCount(int hit) {
+ hitCount = hit;
+ }
+
+ public static int getHitCount() {
+ return hitCount;
+ }
+
/**
* Convenience method for printing messages to the status line
*
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/NavigateToVarDeclAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/NavigateToVarDeclAction.java
index 3a62fb0df1..d39f151b8c 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/NavigateToVarDeclAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/NavigateToVarDeclAction.java
@@ -17,31 +17,30 @@
import java.util.List;
import java.util.stream.Collectors;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.ICompilationUnit;
-import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.IType;
-import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.WorkingCopyOwner;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.LambdaExpression;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.eclipse.jdt.debug.core.IJavaStackFrame;
import org.eclipse.jdt.debug.core.IJavaVariable;
-import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
@@ -58,10 +57,7 @@ public void run(IAction action) {
Object frame = DebugUITools.getDebugContext();
if (frame instanceof IStackFrame jFrame) {
if (jFrame instanceof IJavaStackFrame javaStackFrame) {
- String type = javaStackFrame.getLaunch().getLaunchConfiguration().getAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, (String) null);
- IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(type);
- IJavaProject iJavaProject = JavaCore.create(project);
- IType iType = iJavaProject.findType(javaStackFrame.getReceivingTypeName());
+ int currentLine = javaStackFrame.getLineNumber();
String currentMethod = javaStackFrame.getMethodName();
List frameParams = javaStackFrame.getArgumentTypeNames();
List ref = frameParams.stream().map(e -> {
@@ -71,49 +67,112 @@ public void run(IAction action) {
}
return e;
}).collect(Collectors.toList());
- ICompilationUnit cu = iType.getCompilationUnit();
- ASTParser parse = ASTParser.newParser(AST.getJLSLatest());
- parse.setSource(cu);
- parse.setKind(ASTParser.K_COMPILATION_UNIT);
- parse.setResolveBindings(true);
- CompilationUnit ast = (CompilationUnit) parse.createAST(null);
- ast.accept(new ASTVisitor() {
- boolean meth = false;
- boolean found = false;
- @Override
- public boolean visit(MethodDeclaration node) {
- if (node.getName().getIdentifier().equals(currentMethod)) {
- List