diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/diagnostics/AddImportAction.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/diagnostics/AddImportAction.kt index 87f16bfcb..819cea646 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/diagnostics/AddImportAction.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/diagnostics/AddImportAction.kt @@ -81,22 +81,9 @@ class AddImportAction : BaseJavaCodeAction() { return } - var found = false - val simpleName = jcDiagnostic.args[1] - for (name in compiler.publicTopLevelTypes()) { - var klass = name - - // This will be true in a test environment - if (klass.contains("/")) { - klass = name.replace('/', '.') - } - - if (klass.endsWith(".$simpleName")) { - found = true - // There is at least one class to import - break - } - } + val found = + jcDiagnostic.args[1]?.toString()?.let { compiler.findQualifiedNames(it, true).isNotEmpty() } + ?: false visible = found enabled = found diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/CompilerProvider.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/CompilerProvider.java index a5251f1b8..983c07b29 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/CompilerProvider.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/CompilerProvider.java @@ -24,6 +24,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.TreeSet; import java.util.stream.Collectors; @@ -45,6 +46,12 @@ public interface CompilerProvider { Path[] findMemberReferences(String className, String memberName); + default List findQualifiedNames(String simpleName) { + return findQualifiedNames(simpleName, false); + } + + List findQualifiedNames(String simpleName, boolean onlyOne); + ParseTask parse(Path file); ParseTask parse(JavaFileObject file); diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/JavaCompilerService.java b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/JavaCompilerService.java index 5c0a07bb9..428abffa7 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/JavaCompilerService.java +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/compiler/JavaCompilerService.java @@ -220,6 +220,25 @@ public class JavaCompilerService implements CompilerProvider { return candidates.toArray(new Path[0]); } + @Override + public List findQualifiedNames(String simpleName, boolean onlyOne) { + final var names = new ArrayList(); + for (var name : publicTopLevelTypes()) { + // This will be true in a test environment + if (name.contains("/")) { + name = name.replace('/', '.'); + } + + if (name.endsWith(".$simpleName")) { + names.add(name); + if (onlyOne) { + break; + } + } + } + return names; + } + @Override public ParseTask parse(Path file) { Parser parser = Parser.parseFile(file);