Skip to content

Commit afdf59d

Browse files
snjezawenytang-ms
andauthored
Improve ProjectCommand.getMainClasses (#883)
Co-authored-by: wenyt <[email protected]>
1 parent 0565240 commit afdf59d

File tree

1 file changed

+24
-13
lines changed

1 file changed

+24
-13
lines changed

jdtls.ext/com.microsoft.jdtls.ext.core/src/com/microsoft/jdtls/ext/core/ProjectCommand.java

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.io.IOException;
2020
import java.util.ArrayList;
2121
import java.util.Arrays;
22+
import java.util.Collections;
2223
import java.util.HashSet;
2324
import java.util.List;
2425
import java.util.Objects;
@@ -65,6 +66,7 @@
6566
import org.eclipse.jdt.ls.core.internal.managers.ProjectsManager;
6667
import org.eclipse.jdt.ls.core.internal.managers.UpdateClasspathJob;
6768
import org.eclipse.jdt.ls.core.internal.preferences.Preferences.ReferencedLibraries;
69+
import org.eclipse.jdt.ls.core.internal.preferences.Preferences.SearchScope;
6870
import org.eclipse.lsp4j.jsonrpc.json.adapters.CollectionTypeAdapter;
6971
import org.eclipse.lsp4j.jsonrpc.json.adapters.EnumTypeAdapter;
7072

@@ -232,23 +234,32 @@ private static boolean exportJarExecution(String mainClass, Classpath[] classpat
232234
}
233235

234236
public static List<MainClassInfo> getMainClasses(List<Object> arguments, IProgressMonitor monitor) throws Exception {
235-
List<PackageNode> projectList = listProjects(arguments, monitor);
236-
final List<MainClassInfo> res = new ArrayList<>();
237-
List<IJavaElement> searchRoots = new ArrayList<>();
237+
List<Object> args = new ArrayList<>(arguments);
238+
if (args.size() <= 1) {
239+
args.add(Boolean.TRUE);
240+
} else {
241+
args.set(1, Boolean.TRUE);
242+
}
243+
List<PackageNode> projectList = listProjects(args, monitor);
238244
if (projectList.size() == 0) {
239-
return res;
245+
return Collections.emptyList();
240246
}
241-
for (PackageNode project : projectList) {
247+
final List<MainClassInfo> res = new ArrayList<>();
248+
List<IJavaProject> javaProjects = new ArrayList<>();
249+
for (PackageNode project: projectList) {
242250
IJavaProject javaProject = PackageCommand.getJavaProject(project.getUri());
243-
for (IPackageFragmentRoot packageFragmentRoot : javaProject.getAllPackageFragmentRoots()) {
244-
if (!packageFragmentRoot.isArchive()) {
245-
searchRoots.add(packageFragmentRoot);
246-
}
251+
if (javaProject != null && javaProject.exists()) {
252+
javaProjects.add(javaProject);
247253
}
248254
}
249-
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(searchRoots.toArray(new IJavaElement[0]));
250-
SearchPattern pattern = SearchPattern.createPattern("main(String[]) void", IJavaSearchConstants.METHOD,
251-
IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE);
255+
int includeMask = IJavaSearchScope.SOURCES;
256+
IJavaSearchScope scope = SearchEngine.createJavaSearchScope(javaProjects.toArray(new IJavaProject[0]),
257+
includeMask);
258+
SearchPattern pattern1 = SearchPattern.createPattern("main(String[]) void", IJavaSearchConstants.METHOD,
259+
IJavaSearchConstants.DECLARATIONS, SearchPattern.R_CASE_SENSITIVE | SearchPattern.R_EXACT_MATCH);
260+
SearchPattern pattern2 = SearchPattern.createPattern("main() void", IJavaSearchConstants.METHOD,
261+
IJavaSearchConstants.DECLARATIONS, SearchPattern.R_CASE_SENSITIVE | SearchPattern.R_EXACT_MATCH);
262+
SearchPattern pattern = SearchPattern.createOrPattern(pattern1, pattern2);
252263
SearchRequestor requestor = new SearchRequestor() {
253264
@Override
254265
public void acceptSearchMatch(SearchMatch match) {
@@ -275,7 +286,7 @@ public void acceptSearchMatch(SearchMatch match) {
275286
SearchEngine searchEngine = new SearchEngine();
276287
try {
277288
searchEngine.search(pattern, new SearchParticipant[] {SearchEngine.getDefaultSearchParticipant()}, scope,
278-
requestor, new NullProgressMonitor());
289+
requestor, monitor);
279290
} catch (CoreException e) {
280291
// ignore
281292
}

0 commit comments

Comments
 (0)