From 6c79bfe214f55101643b0e2d20422523e7111800 Mon Sep 17 00:00:00 2001 From: Yaohai Zheng Date: Tue, 21 Nov 2017 16:34:40 +0800 Subject: [PATCH] Add project scope when resolving multiple-root project. --- .../JavaDebugDelegateCommandHandler.java | 2 +- .../internal/ResolveMainClassHandler.java | 22 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebugDelegateCommandHandler.java b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebugDelegateCommandHandler.java index 93229d343..54daddc9b 100644 --- a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebugDelegateCommandHandler.java +++ b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/JavaDebugDelegateCommandHandler.java @@ -43,7 +43,7 @@ public Object executeCommand(String commandId, List arguments, IProgress return handler.resolveClasspaths(arguments); } else if (RESOLVE_MAINCLASS.equals(commandId)) { ResolveMainClassHandler handler = new ResolveMainClassHandler(); - return handler.resolveMainClass(); + return handler.resolveMainClass(arguments); } else if (BUILD_WORKSPACE.equals(commandId)) { // TODO } else if (FETCH_USER_DATA.equals(commandId)) { diff --git a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/ResolveMainClassHandler.java b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/ResolveMainClassHandler.java index 62d795ed6..3cca9da7e 100644 --- a/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/ResolveMainClassHandler.java +++ b/com.microsoft.java.debug.plugin/src/main/java/com/microsoft/java/debug/plugin/internal/ResolveMainClassHandler.java @@ -20,6 +20,7 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IMethod; import org.eclipse.jdt.core.JavaModelException; @@ -30,6 +31,7 @@ import org.eclipse.jdt.core.search.SearchParticipant; import org.eclipse.jdt.core.search.SearchPattern; import org.eclipse.jdt.core.search.SearchRequestor; +import org.eclipse.jdt.ls.core.internal.ResourceUtils; import org.eclipse.jdt.ls.core.internal.managers.ProjectsManager; import com.microsoft.java.debug.core.Configuration; @@ -42,11 +44,19 @@ public class ResolveMainClassHandler { * @return an array of main class and project name * @throws CoreException when there are errors when resolving main class. */ - public Object resolveMainClass() throws CoreException { - return resolveMainClassCore(); + public Object resolveMainClass(List arguments) throws CoreException { + return resolveMainClassCore(arguments); } - private List resolveMainClassCore() throws CoreException { + private List resolveMainClassCore(List arguments) throws CoreException { + IPath rootPath = null; + if (arguments != null && arguments.size() > 0) { + rootPath = ResourceUtils.filePathFromURI((String) arguments.get(0)); + } + final ArrayList targetProjectPath = new ArrayList<>(); + if (rootPath != null) { + targetProjectPath.add(rootPath); + } IJavaSearchScope searchScope = SearchEngine.createWorkspaceScope(); SearchPattern pattern = SearchPattern.createPattern("main(String[]) void", IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_CASE_SENSITIVE | SearchPattern.R_EXACT_MATCH); @@ -72,7 +82,11 @@ public void acceptSearchMatch(SearchMatch match) { } } String projectName = ProjectsManager.DEFAULT_PROJECT_NAME.equals(project.getName()) ? null : project.getName(); - res.add(new ResolutionItem(mainClass, projectName)); + if (projectName == null + || targetProjectPath.isEmpty() + || ResourceUtils.isContainedIn(project.getLocation(), targetProjectPath)) { + res.add(new ResolutionItem(mainClass, projectName)); + } } } }