1919import java .io .IOException ;
2020import java .util .ArrayList ;
2121import java .util .Arrays ;
22+ import java .util .Collections ;
2223import java .util .HashSet ;
2324import java .util .List ;
2425import java .util .Objects ;
6566import org .eclipse .jdt .ls .core .internal .managers .ProjectsManager ;
6667import org .eclipse .jdt .ls .core .internal .managers .UpdateClasspathJob ;
6768import org .eclipse .jdt .ls .core .internal .preferences .Preferences .ReferencedLibraries ;
69+ import org .eclipse .jdt .ls .core .internal .preferences .Preferences .SearchScope ;
6870import org .eclipse .lsp4j .jsonrpc .json .adapters .CollectionTypeAdapter ;
6971import 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