From b3c133ff774d35241f841da0d31c2b876c4e9a10 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Fri, 14 Jan 2022 20:57:03 +0530 Subject: [PATCH] Made some exception messages more clear --- .../language/java/JavaAutoComplete.java | 72 +++++++++---------- .../java/com/itsaky/lsp/java/CompileTask.java | 7 +- .../completion/JavaCompletionProvider.java | 1 + 3 files changed, 39 insertions(+), 41 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/language/java/JavaAutoComplete.java b/app/src/main/java/com/itsaky/androidide/language/java/JavaAutoComplete.java index 72e080997..033c9ef72 100755 --- a/app/src/main/java/com/itsaky/androidide/language/java/JavaAutoComplete.java +++ b/app/src/main/java/com/itsaky/androidide/language/java/JavaAutoComplete.java @@ -17,19 +17,21 @@ **************************************************************************************/ package com.itsaky.androidide.language.java; +import androidx.annotation.NonNull; + import com.itsaky.androidide.app.StudioApp; import com.itsaky.androidide.utils.Logger; import com.itsaky.lsp.models.CompletionResult; import org.eclipse.lsp4j.CompletionItem; import org.eclipse.lsp4j.CompletionItemKind; +import org.jetbrains.annotations.Contract; import java.net.URI; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Comparator; import java.util.List; -import java.util.concurrent.CancellationException; import java.util.concurrent.CompletableFuture; import io.github.rosemoe.editor.interfaces.AutoCompleteProvider; @@ -41,46 +43,40 @@ public class JavaAutoComplete implements AutoCompleteProvider { @Override public List getAutoCompleteItems(CharSequence content, String fileUri, String prefix, boolean isInCodeBlock, TextAnalyzeResult colors, int index, int line, int column) throws Exception { - - try { - - if (this.future != null && !this.future.isDone ()) { - try { - this.future.cancel (true); - } catch (CancellationException e) { - // Do not pollute logs with cancellation exceptions - return new ArrayList<> (); - } + if (this.future != null && !this.future.isDone ()) { + try { + this.future.cancel (true); + } catch (java.util.concurrent.CancellationException e) { + // Do not pollute logs with cancellation exceptions + return new ArrayList<> (); } - - this.future = CompletableFuture.supplyAsync (() -> { - final var server = StudioApp.getInstance ().getJavaLanguageServer (); - final var completer = server.getCompletionProvider (); - final var params = new com.itsaky.lsp.models.CompletionParams (new com.itsaky.lsp.models.Position (line, column), Paths.get (URI.create (fileUri))); - return completer.complete (params); - }); - - final var result = future.get (); - final var list = new ArrayList (); - for (final var item : result.getItems ()) { - final var i = new CompletionItem (); - i.setLabel (item.getLabel ()); - i.setDetail (item.getDetail ()); - i.setKind (CompletionItemKind.Method); - i.setSortText (item.getSortText ()); - i.setInsertText (item.getInsertText ()); - list.add (i); - } - - return finalizeResults (list); - } catch (Throwable th) { - LOG.error ("Java completion error", th); - } - - return new ArrayList<>(); + } + + this.future = CompletableFuture.supplyAsync (() -> { + final var server = StudioApp.getInstance ().getJavaLanguageServer (); + final var completer = server.getCompletionProvider (); + final var params = new com.itsaky.lsp.models.CompletionParams (new com.itsaky.lsp.models.Position (line, column), Paths.get (URI.create (fileUri))); + return completer.complete (params); + }); + + final var result = future.get (); + final var list = new ArrayList (); + for (final var item : result.getItems ()) { + final var i = new CompletionItem (); + i.setLabel (item.getLabel ()); + i.setDetail (item.getDetail ()); + i.setKind (CompletionItemKind.Method); + i.setSortText (item.getSortText ()); + i.setInsertText (item.getInsertText ()); + list.add (i); + } + + return finalizeResults (list); } - private List finalizeResults(List items) { + @NonNull + @Contract("_ -> param1") + private List finalizeResults(@NonNull List items) { items.sort (RESULT_SORTER); return items; } diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/CompileTask.java b/lsp/java/src/main/java/com/itsaky/lsp/java/CompileTask.java index 90d0f5e08..6a11f642c 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/CompileTask.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/CompileTask.java @@ -8,6 +8,7 @@ import javax.tools.Diagnostic; import javax.tools.JavaFileObject; public class CompileTask implements AutoCloseable { + public final JavacTask task; public final List roots; public final List> diagnostics; @@ -15,7 +16,7 @@ public class CompileTask implements AutoCloseable { public CompilationUnitTree root() { if (roots.size() != 1) { - throw new RuntimeException(Integer.toString(roots.size())); + throw new RuntimeException("No compilation units found. Roots: " + roots.size ()); } return roots.get(0); } @@ -26,7 +27,7 @@ public class CompileTask implements AutoCloseable { return root; } } - throw new RuntimeException("not found"); + throw new RuntimeException("Compilation unit not found"); } public CompilationUnitTree root(JavaFileObject file) { @@ -35,7 +36,7 @@ public class CompileTask implements AutoCloseable { return root; } } - throw new RuntimeException("not found"); + throw new RuntimeException("Compilation unit not found"); } public CompileTask( diff --git a/lsp/java/src/main/java/com/itsaky/lsp/java/completion/JavaCompletionProvider.java b/lsp/java/src/main/java/com/itsaky/lsp/java/completion/JavaCompletionProvider.java index c327a46e8..f3403e81a 100644 --- a/lsp/java/src/main/java/com/itsaky/lsp/java/completion/JavaCompletionProvider.java +++ b/lsp/java/src/main/java/com/itsaky/lsp/java/completion/JavaCompletionProvider.java @@ -84,6 +84,7 @@ public class JavaCompletionProvider implements ICompletionProvider { Instant started = Instant.now(); ParseTask task = compiler.parse(file); + long cursor = task.root.getLineMap().getPosition(line, column); StringBuilder contents = new PruneMethodBodies(task.task).scan(task.root, cursor); int endOfLine = endOfLine(contents, (int) cursor);