[454028] fix sourcelookup for Java-only clients
generalized approach found in JavaHotCodeReplaceManager
Change-Id: I8df6d27aef615d98b9b25eaf6bfdcf2389b9a1a7
Signed-off-by: Stefan Oehme <st.oehme@gmail.com>
diff --git a/org.eclipse.jdt.debug.tests/testresources/xtend-source/HelloWorld.java b/org.eclipse.jdt.debug.tests/testresources/xtend-source/HelloWorld.java
new file mode 100644
index 0000000..90b9e03
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/testresources/xtend-source/HelloWorld.java
@@ -0,0 +1,6 @@
+@SuppressWarnings("all")
+public class HelloWorld {
+ public static void main(final String[] args) {
+ System.out.println("Hello World!");
+ }
+}
diff --git a/org.eclipse.jdt.debug.tests/testresources/xtend-source/HelloWorld.xtend b/org.eclipse.jdt.debug.tests/testresources/xtend-source/HelloWorld.xtend
new file mode 100644
index 0000000..f642417
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/testresources/xtend-source/HelloWorld.xtend
@@ -0,0 +1,5 @@
+class HelloWorld {
+ def static void main(String[] args) {
+ System.out.println('Hello World!')
+ }
+}
\ No newline at end of file
diff --git a/org.eclipse.jdt.debug.tests/testresources/xtend/HelloWorld.class b/org.eclipse.jdt.debug.tests/testresources/xtend/HelloWorld.class
new file mode 100644
index 0000000..5b19852
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/testresources/xtend/HelloWorld.class
Binary files differ
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java
index 4cb0bc0..c804c7b 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AutomatedSuite.java
@@ -46,6 +46,7 @@
import org.eclipse.jdt.debug.tests.console.ConsoleTerminateAllActionTests;
import org.eclipse.jdt.debug.tests.console.IOConsoleTests;
import org.eclipse.jdt.debug.tests.console.JavaStackTraceConsoleTest;
+import org.eclipse.jdt.debug.tests.core.AlternateStratumTests;
import org.eclipse.jdt.debug.tests.core.ArgumentTests;
import org.eclipse.jdt.debug.tests.core.ArrayTests;
import org.eclipse.jdt.debug.tests.core.BootpathTests;
@@ -198,6 +199,7 @@
addTest(new TestSuite(ConditionalBreakpointsWithGenerics.class));
addTest(new TestSuite(GenericsEvalTests.class));
addTest(new TestSuite(DetailFormatterTests.class));
+ addTest(new TestSuite(AlternateStratumTests.class));
}
//Sourcelookup tests
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/AlternateStratumTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/AlternateStratumTests.java
new file mode 100644
index 0000000..af118f9
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/AlternateStratumTests.java
@@ -0,0 +1,182 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2005 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.debug.tests.core;
+
+import java.io.File;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.debug.core.IJavaReferenceType;
+import org.eclipse.jdt.debug.core.IJavaStackFrame;
+import org.eclipse.jdt.debug.core.IJavaThread;
+import org.eclipse.jdt.debug.core.JDIDebugModel;
+import org.eclipse.jdt.debug.testplugin.JavaProjectHelper;
+import org.eclipse.jdt.debug.testplugin.JavaTestPlugin;
+import org.eclipse.jdt.debug.tests.AbstractDebugTest;
+import org.eclipse.jdt.internal.debug.core.JavaDebugUtils;
+
+/**
+ * Tests strata.
+ */
+public class AlternateStratumTests extends AbstractDebugTest {
+
+ public AlternateStratumTests(String name) {
+ super(name);
+ }
+
+ /**
+ * Test available strata on a type with alternate strata
+ *
+ * @throws Exception
+ */
+ public void testAvailableStrata() throws Exception {
+ String typeName = "HelloWorld";
+ prepareXtendBreakpoint(typeName, 3);
+
+ IJavaThread thread = null;
+ try {
+ thread = launchToBreakpoint(typeName);
+ assertNotNull("Breakpoint not hit within timeout period", thread);
+ IJavaReferenceType type = ((IJavaStackFrame) thread.getTopStackFrame()).getReferenceType();
+ String[] strata = type.getAvailableStrata();
+ assertEquals("Wrong number of available strata", 2, strata.length);
+ assertEquals("Wrong strata", "Xtend", strata[0]);
+ assertEquals("Wrong strata", "Java", strata[1]);
+ }
+ finally {
+ terminateAndRemove(thread);
+ removeAllBreakpoints();
+ }
+ }
+
+ /**
+ * Test default stratum on a type with alternate strata.
+ *
+ * @throws Exception
+ */
+ public void testDefaultStratum() throws Exception {
+ String typeName = "HelloWorld";
+ prepareXtendBreakpoint(typeName, 3);
+
+ IJavaThread thread = null;
+ try {
+ thread = launchToBreakpoint(typeName);
+ assertNotNull("Breakpoint not hit within timeout period", thread);
+ IJavaReferenceType type = ((IJavaStackFrame) thread.getTopStackFrame()).getReferenceType();
+ String stratum = type.getDefaultStratum();
+ assertEquals("Wrong strata", "Xtend", stratum);
+ }
+ finally {
+ terminateAndRemove(thread);
+ removeAllBreakpoints();
+ }
+ }
+
+ public void testGetSourceNameInStratum2() throws Exception {
+ String typeName = "HelloWorld";
+ prepareXtendBreakpoint(typeName, 3);
+
+ IJavaThread thread = null;
+ try {
+ thread = launchToBreakpoint(typeName);
+ assertNotNull("Breakpoint not hit within timeout period", thread);
+ IJavaStackFrame stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
+ String sourceName = stackFrame.getSourceName("Xtend");
+ assertEquals("Wrong source name", "HelloWorld.xtend", sourceName);
+ }
+ finally {
+ terminateAndRemove(thread);
+ removeAllBreakpoints();
+ }
+ }
+
+ public void testResolveJavaElement() throws Exception {
+ String typeName = "HelloWorld";
+ prepareXtendBreakpoint(typeName, 3);
+
+ IJavaThread thread = null;
+ try {
+ thread = launchToBreakpoint(typeName);
+ assertNotNull("Breakpoint not hit within timeout period", thread);
+ IJavaStackFrame stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
+ IJavaElement javaElement = JavaDebugUtils.resolveJavaElement(stackFrame, stackFrame.getLaunch());
+ assertEquals("Wrong java element", "HelloWorld.java", javaElement.getElementName());
+ }
+ finally {
+ terminateAndRemove(thread);
+ removeAllBreakpoints();
+ }
+ }
+
+ public void testResolveJavaProject() throws Exception {
+ String typeName = "HelloWorld";
+ prepareXtendBreakpoint(typeName, 3);
+
+ IJavaThread thread = null;
+ try {
+ thread = launchToBreakpoint(typeName);
+ assertNotNull("Breakpoint not hit within timeout period", thread);
+ IJavaStackFrame stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
+ IJavaProject project = JavaDebugUtils.resolveJavaProject(stackFrame);
+ assertEquals("Wrong java project", getProjectContext(), project);
+ }
+ finally {
+ terminateAndRemove(thread);
+ removeAllBreakpoints();
+ }
+ }
+
+ public void testResolveType() throws Exception {
+ String typeName = "HelloWorld";
+ prepareXtendBreakpoint(typeName, 3);
+
+ IJavaThread thread = null;
+ try {
+ thread = launchToBreakpoint(typeName);
+ assertNotNull("Breakpoint not hit within timeout period", thread);
+ IJavaStackFrame stackFrame = (IJavaStackFrame) thread.getTopStackFrame();
+ IJavaReferenceType refType = stackFrame.getReferenceType();
+ IType type = JavaDebugUtils.resolveType(refType);
+ assertEquals("Wrong type", "HelloWorld", type.getElementName());
+ }
+ finally {
+ terminateAndRemove(thread);
+ removeAllBreakpoints();
+ }
+ }
+
+ @Override
+ protected IJavaProject getProjectContext() {
+ return get15Project();
+ }
+
+ private void prepareXtendBreakpoint(String typeName, int lineNumber) throws JavaModelException, Exception, CoreException {
+ addXtendClass(typeName);
+ JDIDebugModel.createStratumBreakpoint(getProjectContext().getProject(), "Xtend", null, null, typeName, lineNumber, -1, -1, 0, true, null);
+ }
+
+ private void addXtendClass(String typeName) throws Exception {
+ IPath src = getProjectContext().getPath().append(JavaProjectHelper.SRC_DIR).makeAbsolute();
+ File xtendSources = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/xtend-source"));
+ JavaProjectHelper.importFile(new File(xtendSources, typeName + ".java"), src, null);
+ JavaProjectHelper.importFile(new File(xtendSources, typeName + ".xtend"), src, null);
+ createLaunchConfiguration(typeName);
+ waitForBuild();
+ IPath bin = getProjectContext().getPath().append(JavaProjectHelper.BIN_DIR).makeAbsolute();
+ File xtendClasses = JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/xtend"));
+ JavaProjectHelper.importFile(new File(xtendClasses, typeName + ".class"), bin, null);
+ }
+}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java
index 34908a7..b9aa040 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/EvaluateAction.java
@@ -15,7 +15,6 @@
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;
-import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -24,7 +23,6 @@
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.model.ISourceLocator;
import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.ui.DebugUITools;
@@ -33,7 +31,6 @@
import org.eclipse.debug.ui.IDebugView;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.debug.core.IJavaDebugTarget;
import org.eclipse.jdt.debug.core.IJavaObject;
import org.eclipse.jdt.debug.core.IJavaStackFrame;
@@ -46,6 +43,7 @@
import org.eclipse.jdt.debug.eval.IEvaluationResult;
import org.eclipse.jdt.debug.ui.IJavaDebugUIConstants;
import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
+import org.eclipse.jdt.internal.debug.core.JavaDebugUtils;
import org.eclipse.jdt.internal.debug.ui.EvaluationContextManager;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jdt.internal.debug.ui.JavaWordFinder;
@@ -299,21 +297,12 @@
if (launch == null) {
return null;
}
- ISourceLocator locator= launch.getSourceLocator();
- if (locator == null) {
+ try {
+ return JavaDebugUtils.resolveJavaElement(stackFrame, launch);
+ }
+ catch (CoreException e) {
return null;
}
-
- Object sourceElement = locator.getSourceElement(stackFrame);
- if (sourceElement instanceof IJavaElement) {
- return (IJavaElement) sourceElement;
- } else if (sourceElement instanceof IResource) {
- IJavaProject project = JavaCore.create(((IResource)sourceElement).getProject());
- if (project.exists()) {
- return project;
- }
- }
- return null;
}
/**
@@ -413,11 +402,13 @@
if (launch == null) {
return false;
}
- ISourceLocator locator= launch.getSourceLocator();
- if (locator == null) {
+ Object sourceElement;
+ try {
+ sourceElement = JavaDebugUtils.resolveSourceElement(stackFrame, launch);
+ }
+ catch (CoreException e) {
return false;
}
- Object sourceElement = locator.getSourceElement(stackFrame);
if (sourceElement == null) {
return false;
}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/JavaObjectValueEditor.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/JavaObjectValueEditor.java
index 67ecdee..8794cf5 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/JavaObjectValueEditor.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/JavaObjectValueEditor.java
@@ -17,14 +17,11 @@
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
-import org.eclipse.debug.core.ILaunch;
-import org.eclipse.debug.core.model.ISourceLocator;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.core.model.IVariable;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.debug.ui.actions.IVariableValueEditor;
-import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.debug.core.IJavaDebugTarget;
import org.eclipse.jdt.debug.core.IJavaStackFrame;
@@ -34,6 +31,7 @@
import org.eclipse.jdt.debug.eval.IEvaluationListener;
import org.eclipse.jdt.debug.eval.IEvaluationResult;
import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
+import org.eclipse.jdt.internal.debug.core.JavaDebugUtils;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
@@ -234,22 +232,6 @@
* (copied from JavaWatchExpressionDelegate)
*/
private IJavaProject getProject(IJavaStackFrame javaStackFrame) {
- ILaunch launch = javaStackFrame.getLaunch();
- if (launch == null) {
- return null;
- }
- ISourceLocator locator= launch.getSourceLocator();
- if (locator == null) {
- return null;
- }
-
- Object sourceElement = locator.getSourceElement(javaStackFrame);
- if (!(sourceElement instanceof IJavaElement) && sourceElement instanceof IAdaptable) {
- sourceElement = ((IAdaptable)sourceElement).getAdapter(IJavaElement.class);
- }
- if (sourceElement instanceof IJavaElement) {
- return ((IJavaElement) sourceElement).getJavaProject();
- }
- return null;
+ return JavaDebugUtils.resolveJavaProject(javaStackFrame);
}
}
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JavaDebugUtils.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JavaDebugUtils.java
index 2ce03ba..9a6154f 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JavaDebugUtils.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/JavaDebugUtils.java
@@ -21,6 +21,8 @@
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.model.IDebugElement;
+import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.ISourceLocator;
import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector;
import org.eclipse.jdt.core.IClassFile;
@@ -36,6 +38,7 @@
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.debug.core.IJavaDebugTarget;
import org.eclipse.jdt.debug.core.IJavaReferenceType;
import org.eclipse.jdt.debug.core.IJavaStackFrame;
import org.eclipse.jdt.debug.core.IJavaThread;
@@ -152,7 +155,8 @@
}
if (object instanceof IJavaReferenceType) {
IJavaReferenceType refType = (IJavaReferenceType) object;
- String[] sourcePaths = refType.getSourcePaths(null);
+ IJavaDebugTarget target = ((IJavaDebugTarget) refType.getDebugTarget());
+ String[] sourcePaths = refType.getSourcePaths(target.getDefaultStratum());
if (sourcePaths != null && sourcePaths.length > 0) {
return sourcePaths[0];
}
@@ -299,7 +303,7 @@
* @throws CoreException if an exception occurs
*/
public static IJavaElement resolveJavaElement(Object object, ILaunch launch) throws CoreException {
- Object sourceElement = resolveSourceElement(object, launch);
+ Object sourceElement = resolveSourceElement(object, JAVA_STRATUM, launch);
return getJavaElement(sourceElement);
}
@@ -333,18 +337,54 @@
}
/**
- * Returns the source element corresponding to the given object or
- * <code>null</code> if none, in the context of the given launch.
+ * Returns the source element corresponding to the given object or <code>null</code> if none, in the context of the given launch.
*
* @param launch
* provides source locator
* @param object
* object to resolve source element for
* @return corresponding source element or <code>null</code>
- * @throws CoreException if an exception occurs
+ * @throws CoreException
+ * if an exception occurs
*/
public static Object resolveSourceElement(Object object, ILaunch launch) throws CoreException {
+ return resolveSourceElement(object, null, launch);
+ }
+
+ /**
+ * Returns the source element corresponding to the given object in the given stratum or <code>null</code> if none, in the context of the given
+ * launch.
+ *
+ * @param launch
+ * provides source locator
+ * @param object
+ * object to resolve source element for
+ * @param stratum
+ * the stratum to use
+ * @return corresponding source element or <code>null</code>
+ * @throws CoreException
+ * if an exception occurs
+ */
+ public static Object resolveSourceElement(Object object, String stratum, ILaunch launch) throws CoreException {
ISourceLocator sourceLocator = launch.getSourceLocator();
+ if (stratum != null && object instanceof IDebugElement) {
+ IDebugTarget debugTarget = ((IDebugElement) object).getDebugTarget();
+ if (debugTarget instanceof IJavaDebugTarget) {
+ IJavaDebugTarget javaDebugTarget = (IJavaDebugTarget) debugTarget;
+ String def = javaDebugTarget.getDefaultStratum();
+ try {
+ javaDebugTarget.setDefaultStratum(stratum);
+ return doSourceLookup(object, sourceLocator);
+ }
+ finally {
+ javaDebugTarget.setDefaultStratum(def);
+ }
+ }
+ }
+ return doSourceLookup(object, sourceLocator);
+ }
+
+ private static Object doSourceLookup(Object object, ISourceLocator sourceLocator) {
if (sourceLocator instanceof ISourceLookupDirector) {
ISourceLookupDirector director = (ISourceLookupDirector) sourceLocator;
return director.getSourceElement(object);
@@ -363,7 +403,7 @@
ILaunch launch = frame.getLaunch();
if(launch != null) {
try {
- Object sourceElement = resolveSourceElement(frame, launch);
+ Object sourceElement = resolveSourceElement(frame, JAVA_STRATUM, launch);
IJavaElement element = getJavaElement(sourceElement);
if(element != null) {
return element.getJavaProject();
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java
index e9a1dd1..ea86242 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/hcr/JavaHotCodeReplaceManager.java
@@ -48,7 +48,6 @@
import org.eclipse.debug.core.ILaunchListener;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.model.IDebugTarget;
-import org.eclipse.debug.core.model.ISourceLocator;
import org.eclipse.debug.core.model.IThread;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
@@ -1037,27 +1036,19 @@
if (launch == null) {
return null;
}
- ISourceLocator locator = launch.getSourceLocator();
- if (locator == null) {
+ try {
+ IJavaElement sourceElement = JavaDebugUtils.resolveJavaElement(frame, launch);
+ if (sourceElement instanceof IType) {
+ return ((IType) sourceElement).getCompilationUnit();
+ }
+ if (sourceElement instanceof ICompilationUnit) {
+ return (ICompilationUnit) sourceElement;
+ }
return null;
}
- IJavaDebugTarget target = (IJavaDebugTarget) frame.getDebugTarget();
- String def = target.getDefaultStratum();
- target.setDefaultStratum("Java"); //$NON-NLS-1$
- Object sourceElement = locator.getSourceElement(frame);
- target.setDefaultStratum(def);
- if (!(sourceElement instanceof IJavaElement)
- && sourceElement instanceof IAdaptable) {
- sourceElement = ((IAdaptable) sourceElement)
- .getAdapter(IJavaElement.class);
+ catch (CoreException e) {
+ return null;
}
- if (sourceElement instanceof IType) {
- return ((IType) sourceElement).getCompilationUnit();
- }
- if (sourceElement instanceof ICompilationUnit) {
- return (ICompilationUnit) sourceElement;
- }
- return null;
}
/**
@@ -1175,8 +1166,9 @@
if (resource != null) {
switch (resource.getType()) {
case IResource.FILE:
- if (0 == (delta.getFlags() & IResourceDelta.CONTENT))
+ if (0 == (delta.getFlags() & IResourceDelta.CONTENT)) {
return false;
+ }
if (CLASS_FILE_EXTENSION.equals(resource.getFullPath()
.getFileExtension())) {
IPath localLocation = resource.getLocation();
diff --git a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java
index 36f7613..e70de3b 100644
--- a/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java
+++ b/org.eclipse.jdt.debug/model/org/eclipse/jdt/internal/debug/core/logicalstructures/JavaLogicalStructure.java
@@ -11,9 +11,7 @@
*******************************************************************************/
package org.eclipse.jdt.internal.debug.core.logicalstructures;
-import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
@@ -23,13 +21,9 @@
import org.eclipse.debug.core.ILogicalStructureType;
import org.eclipse.debug.core.IStatusHandler;
import org.eclipse.debug.core.model.IDebugTarget;
-import org.eclipse.debug.core.model.ISourceLocator;
import org.eclipse.debug.core.model.IThread;
import org.eclipse.debug.core.model.IValue;
-import org.eclipse.debug.core.sourcelookup.ISourceLookupDirector;
-import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
-import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.debug.core.IJavaClassType;
import org.eclipse.jdt.debug.core.IJavaDebugTarget;
import org.eclipse.jdt.debug.core.IJavaInterfaceType;
@@ -45,6 +39,7 @@
import org.eclipse.jdt.debug.eval.IEvaluationListener;
import org.eclipse.jdt.debug.eval.IEvaluationResult;
import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
+import org.eclipse.jdt.internal.debug.core.JavaDebugUtils;
import org.eclipse.jdt.internal.debug.core.model.JDIValue;
import com.ibm.icu.text.MessageFormat;
@@ -288,34 +283,7 @@
if (stackFrame == null) {
return value;
}
-
- // find the project the snippets will be compiled in.
- ISourceLocator locator = javaValue.getLaunch().getSourceLocator();
- Object sourceElement = locator.getSourceElement(stackFrame);
- if (sourceElement == null && locator instanceof ISourceLookupDirector) {
- String[] sourcePaths = type.getSourcePaths(null);
- if (sourcePaths != null && sourcePaths.length > 0) {
- sourceElement = ((ISourceLookupDirector) locator)
- .getSourceElement(sourcePaths[0]);
- }
- }
- if (sourceElement != null) {
- if (!(sourceElement instanceof IJavaElement)
- && sourceElement instanceof IAdaptable) {
- sourceElement = ((IAdaptable) sourceElement)
- .getAdapter(IJavaElement.class);
- }
- }
- IJavaProject project = null;
- if (sourceElement instanceof IJavaElement) {
- project = ((IJavaElement) sourceElement).getJavaProject();
- } else if (sourceElement instanceof IResource) {
- IJavaProject resourceProject = JavaCore
- .create(((IResource) sourceElement).getProject());
- if (resourceProject.exists()) {
- project = resourceProject;
- }
- }
+ IJavaProject project = JavaDebugUtils.resolveJavaProject(stackFrame);
if (project == null) {
return value;
}