diff --git a/java/src/processing/mode/java/lsp/PdeAdapter.java b/java/src/processing/mode/java/lsp/PdeAdapter.java index 24a3a6109..8fa07cb7a 100644 --- a/java/src/processing/mode/java/lsp/PdeAdapter.java +++ b/java/src/processing/mode/java/lsp/PdeAdapter.java @@ -1,56 +1,46 @@ package processing.mode.java.lsp; -import java.util.concurrent.CompletableFuture; - -import org.eclipse.lsp4j.CompletionItem; -import org.eclipse.lsp4j.jsonrpc.CompletableFutures; -import java.util.List; -import processing.app.Base; -import processing.app.Platform; -import processing.app.Preferences; -import processing.app.contrib.ModeContribution; -import processing.mode.java.JavaMode; import java.io.File; -import processing.app.Sketch; -import processing.mode.java.CompletionGenerator; -import processing.mode.java.PreprocService; -import org.eclipse.lsp4j.services.LanguageClient; -import processing.mode.java.ErrorChecker; -import processing.app.Problem; -import org.eclipse.lsp4j.PublishDiagnosticsParams; -import org.eclipse.lsp4j.Diagnostic; -import org.eclipse.lsp4j.Range; -import org.eclipse.lsp4j.Position; -import org.eclipse.lsp4j.DiagnosticSeverity; -import processing.mode.java.PreprocSketch; -import processing.mode.java.JavaTextArea; -import java.util.Collections; -import processing.mode.java.CompletionCandidate; -import org.eclipse.lsp4j.InsertTextFormat; -import org.eclipse.lsp4j.CompletionItemKind; -import org.jsoup.Jsoup; import java.net.URI; -import processing.app.SketchCode; -import org.eclipse.lsp4j.TextEdit; -import processing.mode.java.AutoFormat; -import java.util.Optional; -import java.util.HashSet; +import java.util.AbstractMap; import java.util.Arrays; +import java.util.Collections; +import java.util.concurrent.CompletableFuture; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import java.util.stream.IntStream; -import java.util.Map; -import java.util.AbstractMap; -import java.util.Set; +import org.eclipse.lsp4j.CompletionItem; +import org.eclipse.lsp4j.CompletionItemKind; +import org.eclipse.lsp4j.Diagnostic; +import org.eclipse.lsp4j.DiagnosticSeverity; +import org.eclipse.lsp4j.InsertTextFormat; +import org.eclipse.lsp4j.jsonrpc.CompletableFutures; +import org.eclipse.lsp4j.Position; +import org.eclipse.lsp4j.PublishDiagnosticsParams; +import org.eclipse.lsp4j.Range; +import org.eclipse.lsp4j.services.LanguageClient; +import org.eclipse.lsp4j.TextEdit; +import org.jsoup.Jsoup; +import processing.app.Base; +import processing.app.contrib.ModeContribution; +import processing.app.Platform; +import processing.app.Preferences; +import processing.app.Problem; +import processing.app.Sketch; +import processing.app.SketchCode; +import processing.mode.java.AutoFormat; +import processing.mode.java.CompletionCandidate; +import processing.mode.java.CompletionGenerator; +import processing.mode.java.ErrorChecker; +import processing.mode.java.JavaMode; +import processing.mode.java.JavaTextArea; +import processing.mode.java.PreprocService; +import processing.mode.java.PreprocSketch; -class Offset { - int line; - int col; - - Offset(int line, int col) { - this.line = line; - this.col = col; - } -} class PdeAdapter { File rootPath; @@ -63,7 +53,7 @@ class PdeAdapter { ErrorChecker errorChecker; CompletableFuture cps; CompletionGenerator suggestionGenerator; - Set prevDiagnosticReportUris = new HashSet(); + Set prevDiagnosticReportUris = new HashSet<>(); PdeAdapter(File rootPath, LanguageClient client) { @@ -100,6 +90,7 @@ class PdeAdapter { } } + static URI pathToUri(File path) { return path.toURI(); } @@ -118,16 +109,14 @@ class PdeAdapter { } void notifySketchChanged() { - CompletableFuture cps = new CompletableFuture(); + CompletableFuture cps = new CompletableFuture<>(); this.cps = cps; preprocService.notifySketchChanged(); errorChecker.notifySketchChanged(); - preprocService.whenDone(ps -> { - cps.complete(ps); - }); + preprocService.whenDone(cps::complete); } - Optional findCodeByUri(URI uri) { + Optional findCodeByUri(URI uri) { return PdeAdapter.uriToPath(uri) .flatMap(path -> Arrays.stream(sketch.getCode()) .filter(code -> code.getFile().equals(path)) @@ -161,7 +150,7 @@ class PdeAdapter { ? DiagnosticSeverity.Error : DiagnosticSeverity.Warning ); - return new AbstractMap.SimpleEntry( + return new AbstractMap.SimpleEntry<>( PdeAdapter.pathToUri(code.getFile()), dia ); @@ -204,42 +193,31 @@ class PdeAdapter { char[] chs = insert.replace("(,", "($1,").toCharArray(); insert = ""; for (char ch : chs) { - switch (ch) { - case ',': { - n += 1; - insert += ",$" + n; - } - default: insert += ch; + if (ch == ',') { + n += 1; + insert += ",$" + n; } + insert += ch; } } item.setInsertText(insert); - CompletionItemKind kind; - switch (c.getType()) { - case 0: // PREDEF_CLASS - kind = CompletionItemKind.Class; - break; - case 1: // PREDEF_FIELD - kind = CompletionItemKind.Constant; - break; - case 2: // PREDEF_METHOD - kind = CompletionItemKind.Function; - break; - case 3: // LOCAL_CLASS - kind = CompletionItemKind.Class; - break; - case 4: // LOCAL_METHOD - kind = CompletionItemKind.Method; - break; - case 5: // LOCAL_FIELD - kind = CompletionItemKind.Field; - break; - case 6: // LOCAL_VARIABLE - kind = CompletionItemKind.Variable; - break; - default: - throw new IllegalArgumentException("Unknown completion type: " + c.getType()); - } + CompletionItemKind kind = switch (c.getType()) { + case 0 -> // PREDEF_CLASS + CompletionItemKind.Class; + case 1 -> // PREDEF_FIELD + CompletionItemKind.Constant; + case 2 -> // PREDEF_METHOD + CompletionItemKind.Function; + case 3 -> // LOCAL_CLASS + CompletionItemKind.Class; + case 4 -> // LOCAL_METHOD + CompletionItemKind.Method; + case 5 -> // LOCAL_FIELD + CompletionItemKind.Field; + case 6 -> // LOCAL_VARIABLE + CompletionItemKind.Variable; + default -> throw new IllegalArgumentException("Unknown completion type: " + c.getType()); + }; item.setKind(kind); item.setDetail(Jsoup.parse(c.getLabel()).text()); return item; @@ -327,4 +305,15 @@ class PdeAdapter { ); }); } + + + static class Offset { + int line; + int col; + + Offset(int line, int col) { + this.line = line; + this.col = col; + } + } } diff --git a/java/src/processing/mode/java/lsp/PdeTextDocumentService.java b/java/src/processing/mode/java/lsp/PdeTextDocumentService.java index 64b711b2e..c4358eec2 100644 --- a/java/src/processing/mode/java/lsp/PdeTextDocumentService.java +++ b/java/src/processing/mode/java/lsp/PdeTextDocumentService.java @@ -57,23 +57,18 @@ class PdeTextDocumentService implements TextDocumentService { public CompletableFuture, CompletionList>> completion(CompletionParams params) { System.out.println("completion"); URI uri = URI.create(params.getTextDocument().getUri()); - return pls.getAdapter(uri).map(adapter -> { - CompletableFuture, CompletionList>> result = adapter.generateCompletion( - uri, - params.getPosition().getLine(), - params.getPosition().getCharacter() - ).thenApply(Either::forLeft); - return result; - }) + return pls.getAdapter(uri).map(adapter -> adapter.generateCompletion( + uri, + params.getPosition().getLine(), + params.getPosition().getCharacter() + )., CompletionList>>thenApply(Either::forLeft)) .orElse(CompletableFutures.computeAsync(_x -> Either.forLeft(Collections.emptyList()))); } @Override public CompletableFuture resolveCompletionItem(CompletionItem params) { System.out.println("resolveCompletionItem"); - return CompletableFutures.computeAsync(_x -> { - return params; - }); + return CompletableFutures.computeAsync(_x -> params); } @Override @@ -81,11 +76,10 @@ class PdeTextDocumentService implements TextDocumentService { System.out.println("formatting"); URI uri = URI.create(params.getTextDocument().getUri()); return pls.getAdapter(uri).map(adapter -> { - CompletableFuture> result = CompletableFutures.computeAsync(_x -> { - return adapter.format(uri).map(Collections::singletonList).orElse(Collections.emptyList()); - }); - return result; - }) - .orElse(CompletableFuture.completedFuture(Collections.emptyList())); + return CompletableFutures.>computeAsync(_x -> { + return adapter.format(uri).map(Collections::singletonList).orElse(Collections.emptyList()); + }); + }) + .orElse(CompletableFuture.completedFuture(Collections.emptyList())); } } diff --git a/java/src/processing/mode/java/lsp/PdeWorkspaceService.java b/java/src/processing/mode/java/lsp/PdeWorkspaceService.java index 95ddf379f..2af1fba8f 100644 --- a/java/src/processing/mode/java/lsp/PdeWorkspaceService.java +++ b/java/src/processing/mode/java/lsp/PdeWorkspaceService.java @@ -24,28 +24,22 @@ class PdeWorkspaceService implements WorkspaceService { URI uri = URI.create(change.getUri()); pls.getAdapter(uri).ifPresent(adapter -> { switch (change.getType()) { - case Created: - PdeAdapter.uriToPath(uri).ifPresent(path -> { - adapter.sketch.loadNewTab(path.getName().toString(), "pde", true); - adapter.notifySketchChanged(); - }); - break; - case Changed: - adapter.findCodeByUri(uri).ifPresent(code -> { - try { - code.load(); - } catch (IOException e) { - throw new RuntimeException(e); - } - adapter.notifySketchChanged(); - }); - break; - case Deleted: - adapter.findCodeByUri(uri).ifPresent(code -> { - adapter.sketch.removeCode(code); - adapter.notifySketchChanged(); - }); - break; + case Created -> PdeAdapter.uriToPath(uri).ifPresent(path -> { + adapter.sketch.loadNewTab(path.getName(), "pde", true); + adapter.notifySketchChanged(); + }); + case Changed -> adapter.findCodeByUri(uri).ifPresent(code -> { + try { + code.load(); + } catch (IOException e) { + throw new RuntimeException(e); + } + adapter.notifySketchChanged(); + }); + case Deleted -> adapter.findCodeByUri(uri).ifPresent(code -> { + adapter.sketch.removeCode(code); + adapter.notifySketchChanged(); + }); } }); }