2222import org .eclipse .lsp4j .TextDocumentIdentifier ;
2323import org .eclipse .lsp4j .jsonrpc .messages .Either ;
2424
25+ import java .io .File ;
2526import java .util .ArrayList ;
27+ import java .util .Collection ;
2628import java .util .Collections ;
29+ import java .util .LinkedHashSet ;
2730import java .util .List ;
2831import java .util .Optional ;
32+ import java .util .Set ;
2933import java .util .stream .Collectors ;
3034
3135import static de .peeeq .wurstio .languageserver .WurstCommands .WURST_PERFORM_CODE_ACTION ;
@@ -113,7 +117,7 @@ public List<Either<Command, CodeAction>> execute(ModelManager modelManager) {
113117 private List <Either <Command , CodeAction >> handleMissingName (ModelManager modelManager , NameRef nr ) {
114118 String funcName = nr .getVarName ();
115119 WurstModel model = modelManager .getModel ();
116- List <String > possibleImports = new ArrayList <>();
120+ Set <String > possibleImports = new LinkedHashSet <>();
117121 WurstType receiverType = null ;
118122 if (nr instanceof ExprMember ) {
119123 ExprMember m = (ExprMember ) nr ;
@@ -136,6 +140,7 @@ private List<Either<Command, CodeAction>> handleMissingName(ModelManager modelMa
136140 }
137141 }
138142 }
143+ addDependencyPackageFallback (modelManager , possibleImports , funcName );
139144
140145 return makeImportCommands (possibleImports );
141146
@@ -157,7 +162,7 @@ private List<Either<Command, CodeAction>> handleMissingFunction(ModelManager mod
157162 receiverType = m .getLeft ().attrTyp ();
158163 }
159164 WurstModel model = modelManager .getModel ();
160- List <String > possibleImports = new ArrayList <>();
165+ Set <String > possibleImports = new LinkedHashSet <>();
161166 for (CompilationUnit cu : model ) {
162167 withNextPackage :
163168 for (WPackage wPackage : cu .getPackages ()) {
@@ -171,6 +176,7 @@ private List<Either<Command, CodeAction>> handleMissingFunction(ModelManager mod
171176 }
172177 }
173178 }
179+ addDependencyPackageFallback (modelManager , possibleImports , funcName );
174180
175181 return Utils .concatLists (makeImportCommands (possibleImports ), makeCreateFunctionQuickfix (fr ));
176182 }
@@ -342,14 +348,15 @@ public void indent(StringBuilder sb) {
342348
343349 private List <Either <Command , CodeAction >> handleMissingType (ModelManager modelManager , String typeName ) {
344350 WurstModel model = modelManager .getModel ();
345- List <String > possibleImports = new ArrayList <>();
351+ Set <String > possibleImports = new LinkedHashSet <>();
346352 for (CompilationUnit cu : model ) {
347353 for (WPackage wPackage : cu .getPackages ()) {
348354 if (!wPackage .attrExportedTypeNameLinks ().get (typeName ).isEmpty ()) {
349355 possibleImports .add (wPackage .getName ());
350356 }
351357 }
352358 }
359+ addDependencyPackageFallback (modelManager , possibleImports , typeName );
353360
354361 return makeImportCommands (possibleImports );
355362 }
@@ -361,7 +368,7 @@ private List<Either<Command, CodeAction>> handleMissingClass(ModelManager modelM
361368 // that are not yet imported into the project.
362369
363370 WurstModel model = modelManager .getModel ();
364- List <String > possibleImports = new ArrayList <>();
371+ Set <String > possibleImports = new LinkedHashSet <>();
365372 for (CompilationUnit cu : model ) {
366373 withNextPackage :
367374 for (WPackage wPackage : cu .getPackages ()) {
@@ -373,14 +380,15 @@ private List<Either<Command, CodeAction>> handleMissingClass(ModelManager modelM
373380 }
374381 }
375382 }
383+ addDependencyPackageFallback (modelManager , possibleImports , typeName );
376384
377385 return makeImportCommands (possibleImports );
378386 }
379387
380388 private List <Either <Command , CodeAction >> handleMissingModule (ModelManager modelManager , String moduleName ) {
381389
382390 WurstModel model = modelManager .getModel ();
383- List <String > possibleImports = new ArrayList <>();
391+ Set <String > possibleImports = new LinkedHashSet <>();
384392 for (CompilationUnit cu : model ) {
385393 withNextPackage :
386394 for (WPackage wPackage : cu .getPackages ()) {
@@ -392,13 +400,23 @@ private List<Either<Command, CodeAction>> handleMissingModule(ModelManager model
392400 }
393401 }
394402 }
403+ addDependencyPackageFallback (modelManager , possibleImports , moduleName );
395404
396405 return makeImportCommands (possibleImports );
397406 }
398407
399408
400409
401- private List <Either <Command , CodeAction >> makeImportCommands (List <String > possibleImports ) {
410+ private void addDependencyPackageFallback (ModelManager modelManager , Set <String > possibleImports , String unresolvedName ) {
411+ for (File dep : modelManager .getDependencyWurstFiles ()) {
412+ String libName = Utils .getLibName (dep );
413+ if (libName .equals (unresolvedName )) {
414+ possibleImports .add (libName );
415+ }
416+ }
417+ }
418+
419+ private List <Either <Command , CodeAction >> makeImportCommands (Collection <String > possibleImports ) {
402420 return possibleImports .stream ()
403421 .map (this ::makeImportCommand )
404422 .collect (Collectors .toList ());
0 commit comments