19
19
import java .io .IOException ;
20
20
import java .util .ArrayList ;
21
21
import java .util .Arrays ;
22
+ import java .util .Collections ;
22
23
import java .util .HashSet ;
23
24
import java .util .List ;
24
25
import java .util .Objects ;
65
66
import org .eclipse .jdt .ls .core .internal .managers .ProjectsManager ;
66
67
import org .eclipse .jdt .ls .core .internal .managers .UpdateClasspathJob ;
67
68
import org .eclipse .jdt .ls .core .internal .preferences .Preferences .ReferencedLibraries ;
69
+ import org .eclipse .jdt .ls .core .internal .preferences .Preferences .SearchScope ;
68
70
import org .eclipse .lsp4j .jsonrpc .json .adapters .CollectionTypeAdapter ;
69
71
import org .eclipse .lsp4j .jsonrpc .json .adapters .EnumTypeAdapter ;
70
72
@@ -232,23 +234,32 @@ private static boolean exportJarExecution(String mainClass, Classpath[] classpat
232
234
}
233
235
234
236
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 );
238
244
if (projectList .size () == 0 ) {
239
- return res ;
245
+ return Collections . emptyList () ;
240
246
}
241
- for (PackageNode project : projectList ) {
247
+ final List <MainClassInfo > res = new ArrayList <>();
248
+ List <IJavaProject > javaProjects = new ArrayList <>();
249
+ for (PackageNode project : projectList ) {
242
250
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 );
247
253
}
248
254
}
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 );
252
263
SearchRequestor requestor = new SearchRequestor () {
253
264
@ Override
254
265
public void acceptSearchMatch (SearchMatch match ) {
@@ -275,7 +286,7 @@ public void acceptSearchMatch(SearchMatch match) {
275
286
SearchEngine searchEngine = new SearchEngine ();
276
287
try {
277
288
searchEngine .search (pattern , new SearchParticipant [] {SearchEngine .getDefaultSearchParticipant ()}, scope ,
278
- requestor , new NullProgressMonitor () );
289
+ requestor , monitor );
279
290
} catch (CoreException e ) {
280
291
// ignore
281
292
}
0 commit comments