From dc935502893de6cf4fe55cabd4d96a024b08cf2f Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Thu, 1 Mar 2018 10:06:36 +0100 Subject: [PATCH 1/2] enabled refresh on access option --- .../org.springframework.boot.ide.branding/about.properties | 4 ++-- .../org.springframework.boot.ide.branding/plugin.properties | 4 ++-- .../plugin_customization.ini | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/eclipse-distribution/org.springframework.boot.ide.branding/about.properties b/eclipse-distribution/org.springframework.boot.ide.branding/about.properties index a315d00f0..e45bed842 100644 --- a/eclipse-distribution/org.springframework.boot.ide.branding/about.properties +++ b/eclipse-distribution/org.springframework.boot.ide.branding/about.properties @@ -9,8 +9,8 @@ title=Spring Tool Suite 4\n\ Version: @QUALIFIER@\n\ Build Id: @BUILD_ID@\n\ \n\ -Copyright (c) 2007 - 2018 Pivotal Software, Inc.\n\ -All rights reserved. Visit http://spring.io/tools/sts\n\ +Copyright (c) 2007 - 2018 Pivotal, Inc.\n\ +All rights reserved. Visit http://spring.io/tools4\n\ \n\ This product includes software developed by the\n\ Apache Software Foundation http://www.apache.org diff --git a/eclipse-distribution/org.springframework.boot.ide.branding/plugin.properties b/eclipse-distribution/org.springframework.boot.ide.branding/plugin.properties index 025ddef0a..6049f507f 100644 --- a/eclipse-distribution/org.springframework.boot.ide.branding/plugin.properties +++ b/eclipse-distribution/org.springframework.boot.ide.branding/plugin.properties @@ -7,8 +7,8 @@ productBlurb=Spring Tool Suite 4 \n\ Version: @QUALIFIER@\n\ Build Id: @BUILD_ID@\n\ \n\ -Copyright (c) 2007 - 2018 Pivotal Software, Inc.\n\ -All rights reserved. Visit http://spring.io/tools/sts\n\ +Copyright (c) 2007 - 2018 Pivotal, Inc.\n\ +All rights reserved. Visit http://spring.io/tools4\n\ \n\ This product includes software developed by the\n\ Apache Software Foundation http://www.apache.org diff --git a/eclipse-distribution/org.springframework.boot.ide.branding/plugin_customization.ini b/eclipse-distribution/org.springframework.boot.ide.branding/plugin_customization.ini index 3997792aa..87bfff6f5 100644 --- a/eclipse-distribution/org.springframework.boot.ide.branding/plugin_customization.ini +++ b/eclipse-distribution/org.springframework.boot.ide.branding/plugin_customization.ini @@ -24,6 +24,9 @@ org.eclipse.ui/DOCK_PERSPECTIVE_BAR=topRight # show progress on startup org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP=true +# lightweight auto-refresh on access by default +org.eclipse.core.resources/refresh.lightweight.enabled=true + # Order help books in table of contents org.eclipse.help/HELP_DATA = helpData.xml From d368d320d7e444940bbe622c022d1ca9c1353e54 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Thu, 1 Mar 2018 11:44:47 +0100 Subject: [PATCH 2/2] added test for webflux code lenses --- .../testharness/LanguageServerHarness.java | 8 ++ .../BootJavaLanguageServerComponents.java | 10 ++- .../WebfluxHandlerCodeLensProvider.java | 2 +- .../test/WebFluxCodeLensProviderTest.java | 78 +++++++++++++++++++ 4 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxCodeLensProviderTest.java diff --git a/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java b/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java index 8dc25b309..3591ce223 100644 --- a/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java +++ b/headless-services/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/LanguageServerHarness.java @@ -46,6 +46,8 @@ import org.eclipse.lsp4j.ApplyWorkspaceEditResponse; import org.eclipse.lsp4j.ClientCapabilities; import org.eclipse.lsp4j.CodeActionContext; import org.eclipse.lsp4j.CodeActionParams; +import org.eclipse.lsp4j.CodeLens; +import org.eclipse.lsp4j.CodeLensParams; import org.eclipse.lsp4j.Command; import org.eclipse.lsp4j.CompletionCapabilities; import org.eclipse.lsp4j.CompletionItem; @@ -471,6 +473,12 @@ public class LanguageServerHarness { return getServer().getTextDocumentService().hover(params ).get(); } + public List getCodeLenses(TextDocumentInfo document) throws Exception { + CodeLensParams params = new CodeLensParams(); + params.setTextDocument(document.getId()); + return getServer().getTextDocumentService().codeLens(params).get(); + } + public CompletionItem resolveCompletionItem(CompletionItem maybeUnresolved) { if (getServer().hasLazyCompletionResolver()) { diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java index 814a35111..fc932d065 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/BootJavaLanguageServerComponents.java @@ -60,6 +60,7 @@ import org.springframework.ide.vscode.commons.languageserver.completion.IComplet import org.springframework.ide.vscode.commons.languageserver.composable.LanguageServerComponents; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver; +import org.springframework.ide.vscode.commons.languageserver.util.CodeLensHandler; import org.springframework.ide.vscode.commons.languageserver.util.HoverHandler; import org.springframework.ide.vscode.commons.languageserver.util.LSFactory; import org.springframework.ide.vscode.commons.languageserver.util.ReferencesHandler; @@ -92,6 +93,7 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent private JavaProjectFinder projectFinder; private BootJavaHoverProvider hoverProvider; + private CodeLensHandler codeLensHandler; public BootJavaLanguageServerComponents(SimpleLanguageServer server, LSFactory _params) { this.server = server; @@ -147,8 +149,8 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent // } }); - BootJavaCodeLensEngine codeLensEngine = createCodeLensEngine(); - documents.onCodeLens(codeLensEngine); + codeLensHandler = createCodeLensEngine(); + documents.onCodeLens(codeLensHandler); workspaceService.onDidChangeConfiguraton(settings -> { config.handleConfigurationChange(settings); @@ -174,6 +176,10 @@ public class BootJavaLanguageServerComponents implements LanguageServerComponent return hoverProvider; } + public CodeLensHandler getCodeLensHandler() { + return codeLensHandler; + } + private void initialize(InitializeParams params) { this.indexer.initialize(server.getWorkspaceRoots()); } diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxHandlerCodeLensProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxHandlerCodeLensProvider.java index 91fdbf44c..857a33470 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxHandlerCodeLensProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/requestmapping/WebfluxHandlerCodeLensProvider.java @@ -64,7 +64,7 @@ public class WebfluxHandlerCodeLensProvider implements CodeLensProvider { WebfluxHandlerInformation handlerInfo = (WebfluxHandlerInformation) object; CodeLens codeLens = new CodeLens(); - codeLens.setRange(document.toRange(node.getStartPosition(), node.getLength())); + codeLens.setRange(document.toRange(node.getName().getStartPosition(), node.getName().getLength())); codeLens.setCommand(new Command(handlerInfo.getSymbol(), null)); resultAccumulator.add(codeLens); diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxCodeLensProviderTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxCodeLensProviderTest.java new file mode 100644 index 000000000..d374973b4 --- /dev/null +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/java/requestmapping/test/WebFluxCodeLensProviderTest.java @@ -0,0 +1,78 @@ +/******************************************************************************* + * Copyright (c) 2018 Pivotal, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Pivotal, Inc. - initial API and implementation + *******************************************************************************/ +package org.springframework.ide.vscode.boot.java.requestmapping.test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.net.URI; +import java.util.List; + +import org.eclipse.lsp4j.CodeLens; +import org.eclipse.lsp4j.Command; +import org.eclipse.lsp4j.Range; +import org.junit.Before; +import org.junit.Test; +import org.springframework.ide.vscode.commons.util.text.LanguageId; +import org.springframework.ide.vscode.languageserver.testharness.TextDocumentInfo; +import org.springframework.ide.vscode.project.harness.BootJavaLanguageServerHarness; +import org.springframework.ide.vscode.project.harness.ProjectsHarness; + +/** + * @author Martin Lippert + */ +@SuppressWarnings("deprecation") +public class WebFluxCodeLensProviderTest { + + private BootJavaLanguageServerHarness harness; + + @Before + public void setup() throws Exception { + harness = BootJavaLanguageServerHarness.builder().build(); + } + + @Test + public void testRoutesCodeLenses() throws Exception { + harness.intialize(new File(ProjectsHarness.class.getResource("/test-projects/test-webflux-project/").toURI())); + File directory = new File(ProjectsHarness.class.getResource("/test-projects/test-webflux-project/").toURI()); + + String docUri = directory.toPath().resolve("src/main/java/org/test/QuoteHandler.java").toUri().toString(); + TextDocumentInfo doc = harness.getOrReadFile(new File(new URI(docUri)), LanguageId.JAVA.toString()); + TextDocumentInfo openedDoc = harness.openDocument(doc); + + List codeLenses = harness.getCodeLenses(openedDoc); + + assertEquals(4, codeLenses.size()); + + assertTrue(containsCodeLens(codeLenses, "@/hello -- GET", 25, 29, 25, 34)); + assertTrue(containsCodeLens(codeLenses, "@/echo -- POST", 30, 29, 30, 33)); + assertTrue(containsCodeLens(codeLenses, "@/quotes -- GET", 35, 29, 35, 41)); + assertTrue(containsCodeLens(codeLenses, "@/quotes -- GET", 41, 29, 41, 40)); + } + + private boolean containsCodeLens(List codeLenses, String commandTitle, int startLine, int startPosition, int endLine, int endPosition) { + for (CodeLens codeLens : codeLenses) { + Command command = codeLens.getCommand(); + Range range = codeLens.getRange(); + if (command.getTitle().equals(commandTitle) + && range.getStart().getLine() == startLine + && range.getStart().getCharacter() == startPosition + && range.getEnd().getLine() == endLine + && range.getEnd().getCharacter() == endPosition) { + return true; + } + } + + return false; + } + +}