diff --git a/vscode-extensions/commons/properties-editor-test-harness/src/main/java/org/springframework/ide/vscode/properties/editor/test/harness/AbstractPropsEditorTest.java b/vscode-extensions/commons/properties-editor-test-harness/src/main/java/org/springframework/ide/vscode/properties/editor/test/harness/AbstractPropsEditorTest.java index 0c99ebd97..2941497f2 100644 --- a/vscode-extensions/commons/properties-editor-test-harness/src/main/java/org/springframework/ide/vscode/properties/editor/test/harness/AbstractPropsEditorTest.java +++ b/vscode-extensions/commons/properties-editor-test-harness/src/main/java/org/springframework/ide/vscode/properties/editor/test/harness/AbstractPropsEditorTest.java @@ -56,10 +56,21 @@ public abstract class AbstractPropsEditorTest { @Before public void setup() throws Exception { md = new PropertyIndexHarness(); - harness = new LanguageServerHarness(this::newLanguageServer); + harness = new LanguageServerHarness(this::newLanguageServer) { + protected String getFileExtension() { + return AbstractPropsEditorTest.this.getFileExtension(); + } + }; harness.intialize(null); } + /** + * Determines the extension used to create temporary uris for editor contents documents. + * Tests need to control this if the language server behavior they are testing varies depending on the + * extension (e.g. different validation, completions etc. for .yml versus .properties + */ + protected abstract String getFileExtension(); + protected abstract SimpleLanguageServer newLanguageServer(); public ItemConfigurer data(String id, String type, Object deflt, String description, String... sources) { diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/ApplicationPropertiesLanguageServer.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/ApplicationPropertiesLanguageServer.java deleted file mode 100644 index 53547eaf1..000000000 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/ApplicationPropertiesLanguageServer.java +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2016 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.properties; - -import org.eclipse.lsp4j.CompletionOptions; -import org.eclipse.lsp4j.ServerCapabilities; -import org.eclipse.lsp4j.TextDocumentSyncKind; -import org.springframework.ide.vscode.application.properties.metadata.SpringPropertyIndexProvider; -import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtilProvider; -import org.springframework.ide.vscode.boot.BootPropertiesLanguageServer; -import org.springframework.ide.vscode.boot.properties.completions.SpringPropertiesCompletionEngine; -import org.springframework.ide.vscode.boot.properties.hover.PropertiesHoverInfoProvider; -import org.springframework.ide.vscode.boot.properties.reconcile.SpringPropertiesReconcileEngine; -import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter; -import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter; -import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter.HoverType; -import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; -import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; -import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService; -import org.springframework.ide.vscode.commons.languageserver.util.TextDocument; - -/** - * Deprecated: This should not be used. In fact it isn't used anymore, except for in the tests. - * But these tests should be changed to test the 'merged' {@link BootPropertiesLanguageServer} - * instead. - */ -@Deprecated -public class ApplicationPropertiesLanguageServer extends SimpleLanguageServer { - - private SpringPropertyIndexProvider indexProvider; - private TypeUtilProvider typeUtilProvider; - private VscodeCompletionEngineAdapter completionEngine; - private SpringPropertiesReconcileEngine reconcileEngine; - private VscodeHoverEngineAdapter hoverEngine; - - public ApplicationPropertiesLanguageServer(SpringPropertyIndexProvider indexProvider, TypeUtilProvider typeUtilProvider, JavaProjectFinder javaProjectFinder) { - this.indexProvider = indexProvider; - this.typeUtilProvider = typeUtilProvider; - SimpleTextDocumentService documents = getTextDocumentService(); - - reconcileEngine = getReconcileEngine(); - documents.onDidChangeContent(params -> { - TextDocument doc = params.getDocument(); - validateWith(doc, reconcileEngine); - }); - - SpringPropertiesCompletionEngine propertiesCompletionEngine = new SpringPropertiesCompletionEngine( - indexProvider, - typeUtilProvider, - javaProjectFinder - ); - completionEngine = new VscodeCompletionEngineAdapter(this, propertiesCompletionEngine); - completionEngine.setMaxCompletionsNumber(100); - documents.onCompletion(completionEngine::getCompletions); - documents.onCompletionResolve(completionEngine::resolveCompletion); - - PropertiesHoverInfoProvider hoverInfoProvider = new PropertiesHoverInfoProvider(indexProvider, typeUtilProvider, javaProjectFinder); - hoverEngine = new VscodeHoverEngineAdapter(this, hoverInfoProvider); - documents.onHover(hoverEngine::getHover); - } - - public void setMaxCompletionsNumber(int number) { - completionEngine.setMaxCompletionsNumber(number); - } - - public void setHoverType(HoverType type) { - hoverEngine.setHoverType(type); - } - - @Override - protected ServerCapabilities getServerCapabilities() { - ServerCapabilities c = new ServerCapabilities(); - - c.setTextDocumentSync(TextDocumentSyncKind.Full); - - CompletionOptions completionProvider = new CompletionOptions(); - completionProvider.setResolveProvider(false); - c.setCompletionProvider(completionProvider); - - c.setHoverProvider(true); - - return c; - } - - protected SpringPropertiesReconcileEngine getReconcileEngine() { - return new SpringPropertiesReconcileEngine(indexProvider, typeUtilProvider); - } - - -} diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/ApplicationYamlLanguageServer.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/ApplicationYamlLanguageServer.java deleted file mode 100644 index 4add55852..000000000 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/ApplicationYamlLanguageServer.java +++ /dev/null @@ -1,117 +0,0 @@ -package org.springframework.ide.vscode.boot.yaml; - -import org.eclipse.lsp4j.CompletionOptions; -import org.eclipse.lsp4j.ServerCapabilities; -import org.eclipse.lsp4j.TextDocumentSyncKind; -import org.springframework.ide.vscode.application.properties.metadata.PropertyInfo; -import org.springframework.ide.vscode.application.properties.metadata.SpringPropertyIndexProvider; -import org.springframework.ide.vscode.application.properties.metadata.completions.PropertyCompletionFactory; -import org.springframework.ide.vscode.application.properties.metadata.completions.RelaxedNameConfig; -import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtilProvider; -import org.springframework.ide.vscode.application.properties.metadata.util.FuzzyMap; -import org.springframework.ide.vscode.boot.BootPropertiesLanguageServer; -import org.springframework.ide.vscode.boot.yaml.completions.ApplicationYamlAssistContext; -import org.springframework.ide.vscode.boot.yaml.completions.ApplicationYamlStructureProvider; -import org.springframework.ide.vscode.boot.yaml.reconcile.ApplicationYamlReconcileEngine; -import org.springframework.ide.vscode.commons.languageserver.completion.VscodeCompletionEngineAdapter; -import org.springframework.ide.vscode.commons.languageserver.hover.HoverInfoProvider; -import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter; -import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; -import org.springframework.ide.vscode.commons.languageserver.reconcile.IReconcileEngine; -import org.springframework.ide.vscode.commons.languageserver.util.IDocument; -import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; -import org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService; -import org.springframework.ide.vscode.commons.languageserver.util.TextDocument; -import org.springframework.ide.vscode.commons.yaml.ast.YamlASTProvider; -import org.springframework.ide.vscode.commons.yaml.ast.YamlParser; -import org.springframework.ide.vscode.commons.yaml.completion.YamlAssistContext; -import org.springframework.ide.vscode.commons.yaml.completion.YamlAssistContextProvider; -import org.springframework.ide.vscode.commons.yaml.completion.YamlCompletionEngine; -import org.springframework.ide.vscode.commons.yaml.hover.YamlHoverInfoProvider; -import org.springframework.ide.vscode.commons.yaml.structure.YamlDocument; -import org.springframework.ide.vscode.commons.yaml.structure.YamlStructureProvider; -import org.yaml.snakeyaml.Yaml; - -/** - * Deprecated: This should not be used. In fact it isn't used anymore, except for in the tests. - * But these tests should be changed to test the 'merged' {@link BootPropertiesLanguageServer} - * instead. - */ -@Deprecated -public class ApplicationYamlLanguageServer extends SimpleLanguageServer { - - private Yaml yaml = new Yaml(); - private YamlASTProvider parser = new YamlParser(yaml); - private SpringPropertyIndexProvider indexProvider; - private TypeUtilProvider typeUtilProvider; - private VscodeCompletionEngineAdapter completionEngine; - private VscodeHoverEngineAdapter hoverEngine; - - - public ApplicationYamlLanguageServer(SpringPropertyIndexProvider indexProvider, TypeUtilProvider typeUtilProvider, JavaProjectFinder javaProjectFinder) { - this.indexProvider = indexProvider; - this.typeUtilProvider = typeUtilProvider; - SimpleTextDocumentService documents = getTextDocumentService(); -// SimpleWorkspaceService workspace = getWorkspaceService(); - IReconcileEngine reconcileEngine = getReconcileEngine(); - documents.onDidChangeContent(params -> { - TextDocument doc = params.getDocument(); - validateWith(doc, reconcileEngine); - }); - -// workspace.onDidChangeConfiguraton(settings -> { -// System.out.println("Config changed: "+params); -// Integer val = settings.getInt("languageServerExample", "maxNumberOfProblems"); -// if (val!=null) { -// maxProblems = ((Number) val).intValue(); -// for (TextDocument doc : documents.getAll()) { -// validateDocument(documents, doc); -// } -// } -// }); - - YamlStructureProvider structureProvider = ApplicationYamlStructureProvider.INSTANCE; - RelaxedNameConfig relaxedNameConfig = RelaxedNameConfig.COMPLETION_DEFAULTS; - - final PropertyCompletionFactory completionFactory = new PropertyCompletionFactory(javaProjectFinder); - YamlAssistContextProvider contextProvider = new YamlAssistContextProvider() { - @Override - public YamlAssistContext getGlobalAssistContext(YamlDocument ydoc) { - IDocument doc = ydoc.getDocument(); - FuzzyMap index = indexProvider.getIndex(doc); - return ApplicationYamlAssistContext.global(index, completionFactory, typeUtilProvider.getTypeUtil(doc), relaxedNameConfig); - } - }; - YamlCompletionEngine yamlCompletionEngine = new YamlCompletionEngine(structureProvider, contextProvider); - - completionEngine = new VscodeCompletionEngineAdapter(this, yamlCompletionEngine); - documents.onCompletion(completionEngine::getCompletions); - documents.onCompletionResolve(completionEngine::resolveCompletion); - - HoverInfoProvider infoProvider = new YamlHoverInfoProvider(parser, structureProvider, contextProvider); - hoverEngine = new VscodeHoverEngineAdapter(this, infoProvider); - documents.onHover(hoverEngine::getHover); - } - - public void setMaxCompletionsNumber(int number) { - completionEngine.setMaxCompletionsNumber(number); - } - - protected IReconcileEngine getReconcileEngine() { - return new ApplicationYamlReconcileEngine(parser, indexProvider, typeUtilProvider); - } - - @Override - protected ServerCapabilities getServerCapabilities() { - ServerCapabilities c = new ServerCapabilities(); - - c.setTextDocumentSync(TextDocumentSyncKind.Full); - - CompletionOptions completionProvider = new CompletionOptions(); - completionProvider.setResolveProvider(false); - c.setCompletionProvider(completionProvider); - c.setHoverProvider(true); - - return c; - } -} diff --git a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java index db30e5409..31160c7cf 100644 --- a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java +++ b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesEditorTest.java @@ -26,7 +26,7 @@ import org.junit.Ignore; import org.junit.Test; import org.springframework.ide.vscode.application.properties.metadata.CachingValueProvider; import org.springframework.ide.vscode.application.properties.metadata.PropertiesLoader; -import org.springframework.ide.vscode.boot.properties.ApplicationPropertiesLanguageServer; +import org.springframework.ide.vscode.boot.BootPropertiesLanguageServer; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.java.IType; import org.springframework.ide.vscode.commons.languageserver.hover.VscodeHoverEngineAdapter.HoverType; @@ -47,6 +47,8 @@ import com.google.common.io.Files; */ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { + + @Test public void testReconcileCatchesParseError() throws Exception { Editor editor = newEditor("key\n"); editor.assertProblems("key|extraneous input"); @@ -1569,7 +1571,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { @Override protected SimpleLanguageServer newLanguageServer() { - ApplicationPropertiesLanguageServer server = new ApplicationPropertiesLanguageServer(md.getIndexProvider(), typeUtilProvider, javaProjectFinder); + BootPropertiesLanguageServer server = new BootPropertiesLanguageServer(md.getIndexProvider(), typeUtilProvider, javaProjectFinder); server.setMaxCompletionsNumber(-1); server.setHoverType(HoverType.HTML); return server; @@ -1601,5 +1603,10 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { } return result; } + + @Override + protected String getFileExtension() { + return ".properties"; + } } diff --git a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java index 0f31f0542..0127717d2 100644 --- a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java +++ b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlEditorTest.java @@ -16,11 +16,13 @@ import static org.junit.Assert.assertTrue; import java.time.Duration; +import org.eclipse.lsp4j.CompletionItem; +import org.eclipse.lsp4j.Diagnostic; import org.junit.Ignore; import org.junit.Test; import org.springframework.ide.vscode.application.properties.metadata.CachingValueProvider; import org.springframework.ide.vscode.application.properties.metadata.PropertyInfo; -import org.springframework.ide.vscode.boot.yaml.ApplicationYamlLanguageServer; +import org.springframework.ide.vscode.boot.BootPropertiesLanguageServer; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer; @@ -29,9 +31,6 @@ import org.springframework.ide.vscode.languageserver.testharness.Editor; import org.springframework.ide.vscode.properties.editor.test.harness.AbstractPropsEditorTest; import org.springframework.ide.vscode.properties.editor.test.harness.StyledStringMatcher; -import org.eclipse.lsp4j.CompletionItem; -import org.eclipse.lsp4j.Diagnostic; - /** * This class is a placeholder where we will attempt to copy and port * as many tests a possible from @@ -3541,9 +3540,14 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { @Override protected SimpleLanguageServer newLanguageServer() { - ApplicationYamlLanguageServer server = new ApplicationYamlLanguageServer(md.getIndexProvider(), typeUtilProvider, javaProjectFinder); + BootPropertiesLanguageServer server = new BootPropertiesLanguageServer(md.getIndexProvider(), typeUtilProvider, javaProjectFinder); server.setMaxCompletionsNumber(-1); return server; } + + @Override + protected String getFileExtension() { + return ".yml"; + } } diff --git a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlLanguageServerTests.java b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlLanguageServerTests.java deleted file mode 100644 index 385110c87..000000000 --- a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationYamlLanguageServerTests.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.springframework.ide.vscode.boot.test; - -import static org.assertj.core.api.Assertions.assertThat; - -import java.io.File; -import java.net.URISyntaxException; -import java.nio.file.Paths; -import java.util.concurrent.Callable; - -import org.eclipse.lsp4j.InitializeResult; -import org.eclipse.lsp4j.TextDocumentSyncKind; -import org.eclipse.lsp4j.services.LanguageServer; -import org.junit.Test; -import org.springframework.ide.vscode.boot.yaml.ApplicationYamlLanguageServer; -import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness; - -public class ApplicationYamlLanguageServerTests { - - public static File getTestResource(String name) throws URISyntaxException { - return Paths.get(ApplicationYamlLanguageServerTests.class.getResource(name).toURI()).toFile(); - } - - private LanguageServerHarness newHarness() throws Exception { - Callable f = () -> new ApplicationYamlLanguageServer((d) -> null, (d) -> null, (d) -> null); - return new LanguageServerHarness(f); - } - - @Test - public void createAndInitializeServerWithWorkspace() throws Exception { - LanguageServerHarness harness = newHarness(); - File workspaceRoot = getTestResource("/workspace/"); - assertExpectedInitResult(harness.intialize(workspaceRoot)); - } - - - @Test - public void createAndInitializeServerWithoutWorkspace() throws Exception { - File workspaceRoot = null; - LanguageServerHarness harness = newHarness(); - assertExpectedInitResult(harness.intialize(workspaceRoot)); - } - - - private void assertExpectedInitResult(InitializeResult initResult) { - assertThat(initResult.getCapabilities().getCompletionProvider().getResolveProvider()).isTrue(); - assertThat(initResult.getCapabilities().getTextDocumentSync()).isEqualTo(TextDocumentSyncKind.Full); - } - -} diff --git a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesLanguageServerTest.java b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/BootPropertiesLanguageServerTest.java similarity index 83% rename from vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesLanguageServerTest.java rename to vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/BootPropertiesLanguageServerTest.java index 0278fbbd3..f939fdcb6 100644 --- a/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/ApplicationPropertiesLanguageServerTest.java +++ b/vscode-extensions/vscode-boot-properties/src/test/java/org/springframework/ide/vscode/boot/test/BootPropertiesLanguageServerTest.java @@ -21,7 +21,7 @@ import org.eclipse.lsp4j.InitializeResult; import org.eclipse.lsp4j.TextDocumentSyncKind; import org.eclipse.lsp4j.services.LanguageServer; import org.junit.Test; -import org.springframework.ide.vscode.boot.properties.ApplicationPropertiesLanguageServer; +import org.springframework.ide.vscode.boot.BootPropertiesLanguageServer; import org.springframework.ide.vscode.languageserver.testharness.LanguageServerHarness; /** @@ -30,14 +30,14 @@ import org.springframework.ide.vscode.languageserver.testharness.LanguageServerH * @author Alex Boyko * */ -public class ApplicationPropertiesLanguageServerTest { +public class BootPropertiesLanguageServerTest { public static File getTestResource(String name) throws URISyntaxException { - return Paths.get(ApplicationPropertiesLanguageServer.class.getResource(name).toURI()).toFile(); + return Paths.get(BootPropertiesLanguageServer.class.getResource(name).toURI()).toFile(); } private LanguageServerHarness newHarness() throws Exception { - Callable f = () -> new ApplicationPropertiesLanguageServer((d) -> null, (d) -> null, (d) -> null); + Callable f = () -> new BootPropertiesLanguageServer((d) -> null, (d) -> null, (d) -> null); return new LanguageServerHarness(f); }