diff --git a/vscode-extensions/commons/application-properties-metadata/pom.xml b/vscode-extensions/commons/application-properties-metadata/pom.xml index 904d280ab..b995a23db 100644 --- a/vscode-extensions/commons/application-properties-metadata/pom.xml +++ b/vscode-extensions/commons/application-properties-metadata/pom.xml @@ -1,75 +1,70 @@ - - 4.0.0 - - org.springframework.ide.vscode - commons-parent - 0.0.1-SNAPSHOT - ../pom.xml - - application-properties-metadata - Builds metadata for boot application properties based on project's classpath contents - - - - project-repo - file://${project.basedir}/repo - - - - - - - org.springframework.ide.eclipse - org.json - 1.0 - - - - com.google.guava - guava - 18.0 - - - - javax.inject - javax.inject - 1 - - - - - io.projectreactor - reactor-core - ${reactor-version} - - - - org.springframework.ide.vscode - commons-util - ${project.version} - - - org.springframework.ide.vscode - commons-yaml - ${project.version} - - - org.springframework.ide.vscode - commons-java - ${project.version} - - - org.springframework.ide.vscode - commons-language-server - ${project.version} - - - org.springframework.ide.vscode - project-test-harness - ${project.version} - test - - - + + 4.0.0 + + org.springframework.ide.vscode + commons-parent + 0.0.1-SNAPSHOT + ../pom.xml + + application-properties-metadata + Builds metadata for boot application properties based on project's classpath contents + + + + project-repo + file://${project.basedir}/repo + + + + + + + org.springframework.ide.eclipse + org.json + 1.0 + + + + com.google.guava + guava + 18.0 + + + + javax.inject + javax.inject + 1 + + + + + io.projectreactor + reactor-core + ${reactor-version} + + + + org.springframework.ide.vscode + commons-util + ${project.version} + + + org.springframework.ide.vscode + commons-yaml + ${project.version} + + + org.springframework.ide.vscode + commons-java + ${project.version} + + + org.springframework.ide.vscode + project-test-harness + ${project.version} + test + + + \ No newline at end of file diff --git a/vscode-extensions/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java b/vscode-extensions/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java index 9680d024f..cb7c69b0f 100644 --- a/vscode-extensions/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java +++ b/vscode-extensions/commons/language-server-test-harness/src/main/java/org/springframework/ide/vscode/languageserver/testharness/Editor.java @@ -3,7 +3,7 @@ package org.springframework.ide.vscode.languageserver.testharness; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.springframework.ide.vscode.languageserver.testharness.TestAsserts.*; +import static org.springframework.ide.vscode.languageserver.testharness.TestAsserts.assertContains; import java.util.ArrayList; import java.util.Collections; @@ -24,10 +24,8 @@ import org.eclipse.lsp4j.PublishDiagnosticsParams; import org.eclipse.lsp4j.Range; import org.eclipse.lsp4j.TextEdit; import org.junit.Assert; -import org.springframework.ide.vscode.commons.util.Log; import com.google.common.base.Strings; -import com.google.gson.internal.Streams; public class Editor { @@ -206,7 +204,6 @@ public class Editor { : ""; } - @SuppressWarnings("unchecked") private List reconcile() { // We assume the language server works synchronously for now and it does an immediate reconcile // when the document changes. In the future this is probably not going to be the case though and then this @@ -351,7 +348,9 @@ public class Editor { if (expectDetail!=null) { assertEquals(expectDetail, it.getDetail()); } - assertContains(expectDocSnippet, it.getDocumentation()); + if (expectDocSnippet!=null) { + assertContains(expectDocSnippet, it.getDocumentation()); + } } protected CompletionItem assertCompletionWithLabel(String expectLabel) throws Exception { 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 4edda9aab..ea80a702e 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 @@ -1,5 +1,6 @@ package org.springframework.ide.vscode.properties.editor.test.harness; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; @@ -102,23 +103,20 @@ public abstract class AbstractPropsEditorTest { harness.assertCompletionDisplayString(editorContents, expected); } - private void notImplemented() { - throw new UnsupportedOperationException("Not yet implemented"); - } - - /** - * Checks that completions contains a completion with a given display string and that that completion - * has a info hover that contains a given snippet of text. - *

- * Deprecated: use assertCompletionDetails instead and also check add an expected 'detail' text of - * completion item. - */ @Deprecated public void assertCompletionWithInfoHover(String editorText, String expectLabel, String expectInfoSnippet) throws Exception { Editor editor = newEditor(editorText); editor.assertCompletionDetails(expectLabel, null, expectInfoSnippet); } - + + /** + * Checks that completions contains a completion with a given display string, detail and documentation text + */ + public void assertCompletionDetails(String editorText, String expectLabel, String expectDetail, String expectDocumenation) throws Exception { + Editor editor = newEditor(editorText); + editor.assertCompletionDetails(expectLabel, expectDetail, expectDocumenation); + } + public boolean isEmptyMetadata() { return md.isEmpty(); } @@ -174,6 +172,25 @@ public abstract class AbstractPropsEditorTest { } assertElements(actualLabels, completionsLabels); } + + public void assertCompletionsDisplayStringAndDetail(String editorText, String[]...expectCompletions) throws Exception { + String[] completionsLabels = new String[expectCompletions.length]; + String[] completionDetails = new String[expectCompletions.length]; + for (int i = 0; i < expectCompletions.length; i++) { + completionsLabels[i] = expectCompletions[i][0]; + completionDetails[i] = expectCompletions[i][1]; + } + Editor editor = newEditor(editorText); + List completions = editor.getCompletions(); + String[] actualLabels = new String[completions.size()]; + String[] actualDetails = new String[completions.size()]; + for (int i = 0; i < completions.size(); i++) { + actualLabels[i] = completions.get(i).getLabel(); + actualDetails[i] = completions.get(i).getDetail(); + } + assertElements(actualLabels, completionsLabels); + assertArrayEquals(actualDetails, completionDetails); + } public SpringPropertyIndexProvider getIndexProvider() { return md.getIndexProvider(); diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java index e64b21fa7..c55b30511 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/BootPropertiesLanguageServer.java @@ -15,10 +15,10 @@ 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.common.PropertyCompletionFactory; +import org.springframework.ide.vscode.boot.common.RelaxedNameConfig; 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; diff --git a/vscode-extensions/commons/application-properties-metadata/src/main/java/org/springframework/ide/vscode/application/properties/metadata/completions/AbstractPropertyProposal.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/AbstractPropertyProposal.java similarity index 97% rename from vscode-extensions/commons/application-properties-metadata/src/main/java/org/springframework/ide/vscode/application/properties/metadata/completions/AbstractPropertyProposal.java rename to vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/AbstractPropertyProposal.java index 0b9358ea9..8ce21f18d 100644 --- a/vscode-extensions/commons/application-properties-metadata/src/main/java/org/springframework/ide/vscode/application/properties/metadata/completions/AbstractPropertyProposal.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/AbstractPropertyProposal.java @@ -8,7 +8,7 @@ * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ -package org.springframework.ide.vscode.application.properties.metadata.completions; +package org.springframework.ide.vscode.boot.common; import org.eclipse.lsp4j.CompletionItemKind; import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits; diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/tools/AbstractPropertyRenderableProvider.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/AbstractPropertyRenderableProvider.java similarity index 88% rename from vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/tools/AbstractPropertyRenderableProvider.java rename to vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/AbstractPropertyRenderableProvider.java index 1e76a9af6..0f546b341 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/tools/AbstractPropertyRenderableProvider.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/AbstractPropertyRenderableProvider.java @@ -8,7 +8,7 @@ * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ -package org.springframework.ide.vscode.boot.properties.tools; +package org.springframework.ide.vscode.boot.common; import static org.springframework.ide.vscode.commons.util.Renderables.*; @@ -32,19 +32,25 @@ public abstract class AbstractPropertyRenderableProvider { if (type==null) { type = Object.class.getName(); } + renderableBuilder.add(lineBreak()); actionLink(renderableBuilder, type); String deflt = formatDefaultValue(getDefaultValue()); if (deflt!=null) { + renderableBuilder.add(lineBreak()); + renderableBuilder.add(lineBreak()); defaultValueRenderable(renderableBuilder, deflt); } if (isDeprecated()) { + renderableBuilder.add(lineBreak()); + renderableBuilder.add(lineBreak()); depreactionRenderable(renderableBuilder); } Renderable description = getDescription(); if (description!=null) { + renderableBuilder.add(lineBreak()); descriptionRenderable(renderableBuilder, description); } @@ -97,20 +103,15 @@ public abstract class AbstractPropertyRenderableProvider { * link then the provided runnable is to be executed. */ public void actionLink(Builder renderableBuilder, String displayString) { - renderableBuilder.add(lineBreak()); renderableBuilder.add(link(displayString, "null")); } - private void defaultValueRenderable(Builder renderableBuilder, String defaultValue) { - renderableBuilder.add(lineBreak()); - renderableBuilder.add(lineBreak()); + protected void defaultValueRenderable(Builder renderableBuilder, String defaultValue) { renderableBuilder.add(text("Default: ")); renderableBuilder.add(italic(text(defaultValue))); } - private void depreactionRenderable(Builder renderableBuilder) { - renderableBuilder.add(lineBreak()); - renderableBuilder.add(lineBreak()); + protected void depreactionRenderable(Builder renderableBuilder) { String reason = getDeprecationReason(); if (StringUtil.hasText(reason)) { renderableBuilder.add(bold(text("Deprecated: "))); @@ -120,8 +121,7 @@ public abstract class AbstractPropertyRenderableProvider { } } - private void descriptionRenderable(Builder renderableBuilder, Renderable description) { - renderableBuilder.add(lineBreak()); + protected void descriptionRenderable(Builder renderableBuilder, Renderable description) { renderableBuilder.add(paragraph(description)); } diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/tools/CommonLanguageTools.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/CommonLanguageTools.java similarity index 98% rename from vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/tools/CommonLanguageTools.java rename to vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/CommonLanguageTools.java index d374d5ac8..de3c059a9 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/tools/CommonLanguageTools.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/CommonLanguageTools.java @@ -1,4 +1,4 @@ -package org.springframework.ide.vscode.boot.properties.tools; +package org.springframework.ide.vscode.boot.common; import static org.springframework.ide.vscode.commons.util.StringUtil.camelCaseToHyphens; diff --git a/vscode-extensions/commons/application-properties-metadata/src/main/java/org/springframework/ide/vscode/application/properties/metadata/completions/PropertyCompletionFactory.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/PropertyCompletionFactory.java similarity index 88% rename from vscode-extensions/commons/application-properties-metadata/src/main/java/org/springframework/ide/vscode/application/properties/metadata/completions/PropertyCompletionFactory.java rename to vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/PropertyCompletionFactory.java index 069ae692b..285d67dd2 100644 --- a/vscode-extensions/commons/application-properties-metadata/src/main/java/org/springframework/ide/vscode/application/properties/metadata/completions/PropertyCompletionFactory.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/PropertyCompletionFactory.java @@ -8,11 +8,10 @@ * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ -package org.springframework.ide.vscode.application.properties.metadata.completions; +package org.springframework.ide.vscode.boot.common; import org.eclipse.lsp4j.CompletionItemKind; import org.springframework.ide.vscode.application.properties.metadata.PropertyInfo; -import org.springframework.ide.vscode.application.properties.metadata.hints.ValueHintHoverInfo; import org.springframework.ide.vscode.application.properties.metadata.types.Type; import org.springframework.ide.vscode.application.properties.metadata.types.TypeParser; import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtil; @@ -27,6 +26,9 @@ import org.springframework.ide.vscode.commons.util.Renderable; import org.springframework.ide.vscode.commons.yaml.hover.YPropertyHoverInfo; import org.springframework.ide.vscode.commons.yaml.schema.YType; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; + public class PropertyCompletionFactory { public ICompletionProposal valueProposal(String value, String query, String niceTypeName, double score, DocumentEdits edits, Renderable info) { @@ -103,7 +105,7 @@ public class PropertyCompletionFactory { @Override public String getLabel() { - return getBaseDisplayString() + " : " + typeUtil.niceTypeName(getType()); + return getBaseDisplayString(); } @@ -124,22 +126,19 @@ public class PropertyCompletionFactory { private Match match; private Type type; private TypeUtil typeUtil; + private Supplier propertyRenderable; public PropertyProposal(IDocument doc, DocumentEdits applier, Match match, TypeUtil typeUtil) { super(doc, applier); this.typeUtil = typeUtil; this.match = match; + this.propertyRenderable = Suppliers.memoize(() -> new ShortDocumentationRenderableProvider(documentContextFinder.find(fDoc), match.data)); if (match.data.isDeprecated()) { deprecate(); } } -// @Override -// public HoverInfo getAdditionalProposalInfo(IProgressMonitor monitor) { -// return new SpringPropertyHoverInfo(documentContextFinder.getJavaProject(fDoc), match.data); -// } - @Override protected String getBaseDisplayString() { return match.data.getId(); @@ -175,9 +174,7 @@ public class PropertyCompletionFactory { @Override public Renderable getDocumentation() { - //TODO: See org.springframework.ide.eclipse.boot.properties.editor.completions.SpringPropertyHoverInfo in old code on how - // this used to render docs. - return null; + return propertyRenderable.get().getRenderable(); } } diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/tools/PropertyRenderableProvider.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/PropertyRenderableProvider.java similarity index 99% rename from vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/tools/PropertyRenderableProvider.java rename to vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/PropertyRenderableProvider.java index 8a3f55ee4..06fc6068c 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/tools/PropertyRenderableProvider.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/PropertyRenderableProvider.java @@ -8,7 +8,7 @@ * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ -package org.springframework.ide.vscode.boot.properties.tools; +package org.springframework.ide.vscode.boot.common; import java.util.ArrayList; import java.util.Collections; diff --git a/vscode-extensions/commons/application-properties-metadata/src/main/java/org/springframework/ide/vscode/application/properties/metadata/completions/RelaxedNameConfig.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/RelaxedNameConfig.java similarity index 94% rename from vscode-extensions/commons/application-properties-metadata/src/main/java/org/springframework/ide/vscode/application/properties/metadata/completions/RelaxedNameConfig.java rename to vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/RelaxedNameConfig.java index 1518e8be2..b1cc07a16 100644 --- a/vscode-extensions/commons/application-properties-metadata/src/main/java/org/springframework/ide/vscode/application/properties/metadata/completions/RelaxedNameConfig.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/RelaxedNameConfig.java @@ -1,4 +1,4 @@ -package org.springframework.ide.vscode.application.properties.metadata.completions; +package org.springframework.ide.vscode.boot.common; import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtil.BeanPropertyNameMode; import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtil.EnumCaseMode; diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/ShortDocumentationRenderableProvider.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/ShortDocumentationRenderableProvider.java new file mode 100644 index 000000000..46c848f8b --- /dev/null +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/common/ShortDocumentationRenderableProvider.java @@ -0,0 +1,50 @@ +package org.springframework.ide.vscode.boot.common; + +import static org.springframework.ide.vscode.commons.util.Renderables.concat; +import static org.springframework.ide.vscode.commons.util.Renderables.lineBreak; + +import org.springframework.ide.vscode.application.properties.metadata.PropertyInfo; +import org.springframework.ide.vscode.commons.java.IJavaProject; +import org.springframework.ide.vscode.commons.util.Renderable; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableList.Builder; + +public class ShortDocumentationRenderableProvider extends PropertyRenderableProvider { + + public ShortDocumentationRenderableProvider(IJavaProject project, PropertyInfo data) { + super(project, data); + } + + @Override + public Renderable getRenderable() { + Builder renderableBuilder = ImmutableList.builder(); + + Renderable description = getDescription(); + if (description!=null) { + descriptionRenderable(renderableBuilder, description); + } + + String deflt = formatDefaultValue(getDefaultValue()); + if (deflt!=null) { + if (description != null) { + renderableBuilder.add(lineBreak()); + } + defaultValueRenderable(renderableBuilder, deflt); + } + + if (isDeprecated()) { + if (description != null) { + renderableBuilder.add(lineBreak()); + } + depreactionRenderable(renderableBuilder); + } + + + ImmutableList pieces = renderableBuilder.build(); + return pieces.isEmpty() ? null : concat(pieces); + } + + + +} diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/completions/PropertiesCompletionProposalsCalculator.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/completions/PropertiesCompletionProposalsCalculator.java index c6c18be37..31cff8dcb 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/completions/PropertiesCompletionProposalsCalculator.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/completions/PropertiesCompletionProposalsCalculator.java @@ -1,6 +1,6 @@ package org.springframework.ide.vscode.boot.properties.completions; -import static org.springframework.ide.vscode.boot.properties.tools.CommonLanguageTools.*; +import static org.springframework.ide.vscode.boot.common.CommonLanguageTools.*; import static org.springframework.ide.vscode.commons.util.StringUtil.camelCaseToHyphens; import java.util.ArrayList; @@ -9,7 +9,6 @@ import java.util.Collections; import java.util.List; import org.springframework.ide.vscode.application.properties.metadata.PropertyInfo; -import org.springframework.ide.vscode.application.properties.metadata.completions.PropertyCompletionFactory; import org.springframework.ide.vscode.application.properties.metadata.hints.HintProvider; import org.springframework.ide.vscode.application.properties.metadata.hints.HintProviders; import org.springframework.ide.vscode.application.properties.metadata.hints.StsValueHint; @@ -22,6 +21,7 @@ import org.springframework.ide.vscode.application.properties.metadata.types.Type import org.springframework.ide.vscode.application.properties.metadata.types.TypedProperty; import org.springframework.ide.vscode.application.properties.metadata.util.FuzzyMap; import org.springframework.ide.vscode.application.properties.metadata.util.FuzzyMap.Match; +import org.springframework.ide.vscode.boot.common.PropertyCompletionFactory; import org.springframework.ide.vscode.boot.properties.reconcile.PropertyNavigator; import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits; import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionProposal; diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/completions/SpringPropertiesCompletionEngine.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/completions/SpringPropertiesCompletionEngine.java index a15097f41..d083b33d6 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/completions/SpringPropertiesCompletionEngine.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/completions/SpringPropertiesCompletionEngine.java @@ -3,8 +3,8 @@ package org.springframework.ide.vscode.boot.properties.completions; import java.util.Collection; 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.types.TypeUtilProvider; +import org.springframework.ide.vscode.boot.common.PropertyCompletionFactory; import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionEngine; import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionProposal; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverCalculator.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverCalculator.java index 6dc77cf8b..d66d43253 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverCalculator.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/properties/hover/PropertiesHoverCalculator.java @@ -1,8 +1,8 @@ package org.springframework.ide.vscode.boot.properties.hover; -import static org.springframework.ide.vscode.boot.properties.tools.CommonLanguageTools.SPACES; -import static org.springframework.ide.vscode.boot.properties.tools.CommonLanguageTools.getValueHints; -import static org.springframework.ide.vscode.boot.properties.tools.CommonLanguageTools.getValueType; +import static org.springframework.ide.vscode.boot.common.CommonLanguageTools.SPACES; +import static org.springframework.ide.vscode.boot.common.CommonLanguageTools.getValueHints; +import static org.springframework.ide.vscode.boot.common.CommonLanguageTools.getValueType; import static org.springframework.ide.vscode.commons.util.Renderables.*; import java.util.Collection; @@ -15,7 +15,7 @@ import org.springframework.ide.vscode.application.properties.metadata.types.Type import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtil; import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtil.EnumCaseMode; import org.springframework.ide.vscode.application.properties.metadata.util.FuzzyMap; -import org.springframework.ide.vscode.boot.properties.tools.PropertyRenderableProvider; +import org.springframework.ide.vscode.boot.common.PropertyRenderableProvider; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.util.BadLocationException; import org.springframework.ide.vscode.commons.languageserver.util.DocumentRegion; diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/ApplicationYamlAssistContext.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/ApplicationYamlAssistContext.java index 859abdcb0..7754097bc 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/ApplicationYamlAssistContext.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/ApplicationYamlAssistContext.java @@ -20,8 +20,6 @@ import java.util.Set; import org.springframework.ide.vscode.application.properties.metadata.IndexNavigator; import org.springframework.ide.vscode.application.properties.metadata.PropertyInfo; -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.hints.HintProvider; import org.springframework.ide.vscode.application.properties.metadata.hints.StsValueHint; import org.springframework.ide.vscode.application.properties.metadata.hints.ValueHintHoverInfo; @@ -33,7 +31,9 @@ import org.springframework.ide.vscode.application.properties.metadata.types.Type import org.springframework.ide.vscode.application.properties.metadata.types.TypedProperty; import org.springframework.ide.vscode.application.properties.metadata.util.FuzzyMap; import org.springframework.ide.vscode.application.properties.metadata.util.FuzzyMap.Match; -import org.springframework.ide.vscode.boot.properties.tools.PropertyRenderableProvider; +import org.springframework.ide.vscode.boot.common.PropertyCompletionFactory; +import org.springframework.ide.vscode.boot.common.PropertyRenderableProvider; +import org.springframework.ide.vscode.boot.common.RelaxedNameConfig; import org.springframework.ide.vscode.commons.languageserver.completion.DocumentEdits; import org.springframework.ide.vscode.commons.languageserver.completion.ICompletionProposal; import org.springframework.ide.vscode.commons.languageserver.completion.LazyProposalApplier; diff --git a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/JavaTypeNavigationHoverInfo.java b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/JavaTypeNavigationHoverInfo.java index 8ba3aa4ca..e1b8b81b3 100644 --- a/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/JavaTypeNavigationHoverInfo.java +++ b/vscode-extensions/vscode-boot-properties/src/main/java/org/springframework/ide/vscode/boot/yaml/completions/JavaTypeNavigationHoverInfo.java @@ -22,7 +22,7 @@ import org.springframework.ide.vscode.application.properties.metadata.types.Type import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtil; import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtil.BeanPropertyNameMode; import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtil.EnumCaseMode; -import org.springframework.ide.vscode.boot.properties.tools.AbstractPropertyRenderableProvider; +import org.springframework.ide.vscode.boot.common.AbstractPropertyRenderableProvider; import org.springframework.ide.vscode.application.properties.metadata.types.TypedProperty; import org.springframework.ide.vscode.commons.java.IField; import org.springframework.ide.vscode.commons.java.IJavaElement; 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 ff4afc1ea..bc76e8da9 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 @@ -70,7 +70,7 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { @Test public void testServerPortCompletion() throws Exception { data("server.port", INTEGER, 8080, "Port where server listens for http."); assertCompletion("ser<*>", "server.port=<*>"); - assertCompletionDisplayString("ser<*>", "server.port"); + assertCompletionDetails("ser<*>", "server.port", "int", null); } @Test public void testLoggingLevelCompletion() throws Exception { @@ -318,10 +318,11 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { assertNotNull(p.findType("demo.Foo")); assertCompletionsVariations("volder.foo.l<*>", "volder.foo.list[<*>"); - assertCompletionsDisplayString("volder.foo.list[0].<*>", - "name : String", - "description : String", - "roles : List"); + assertCompletionsDisplayStringAndDetail("volder.foo.list[0].<*>", + new String[] {"description", "String"}, + new String[] {"name", "String"}, + new String[] {"roles", "List"} + ); assertCompletionsVariations("volder.foo.list[0].na<*>", "volder.foo.list[0].name=<*>" @@ -576,8 +577,10 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { "foo.color-names.green=<*>", "foo.color-names.red=<*>" ); - assertCompletionsDisplayString("foo.color-names.<*>", - "red : String", "green : String", "blue : String" + assertCompletionsDisplayStringAndDetail("foo.color-names.<*>", + new String[] {"blue", "String"}, + new String[] {"green", "String"}, + new String[] {"red", "String"} ); assertCompletionsVariations("foo.color-names.B<*>", "foo.color-names.BLUE=<*>" @@ -593,8 +596,10 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { assertCompletionsVariations("foo.color-data.B<*>", "foo.color-data.BLUE.<*>" ); - assertCompletionsDisplayString("foo.color-data.<*>", - "blue : demo.ColorData", "green : demo.ColorData", "red : demo.ColorData" + assertCompletionsDisplayStringAndDetail("foo.color-data.<*>", + new String[] {"blue", "demo.ColorData"}, + new String[] {"green", "demo.ColorData"}, + new String[] {"red", "demo.ColorData"} ); } @@ -627,16 +632,16 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { assertCompletion("foo.dat<*>", "foo.data.<*>"); - assertCompletionsDisplayString("foo.data.", - "wavelen : double", - "name : String", - "next : demo.Color[BLUE, GREEN, RED]", - "nested : demo.ColorData", - "children : List", - "mapped-children : Map", - "color-children : Map", - "tags : List", - "funky : boolean" + assertCompletionsDisplayStringAndDetail("foo.data.", + new String[] {"children", "List"}, + new String[] {"color-children", "Map"}, + new String[] {"funky", "boolean"}, + new String[] {"mapped-children", "Map"}, + new String[] {"name", "String"}, + new String[] {"nested", "demo.ColorData"}, + new String[] {"next", "demo.Color[BLUE, GREEN, RED]"}, + new String[] {"tags", "List"}, + new String[] {"wavelen", "double"} ); assertCompletionsVariations("foo.data.wav<*>", "foo.data.wavelen=<*>"); @@ -1099,26 +1104,29 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { assertCompletionWithLabel( "logging.level.<*>" , //============== - "root : String", + "root", //=> "logging.level.root=<*>" ); + assertCompletionDetails("logging.level.<*>", "root", "String", null); assertCompletionWithLabel( "logging.level.r<*>" , //============== - "root : String", + "root", //=> "logging.level.root=<*>" ); + assertCompletionDetails("logging.level.r<*>", "root", "String", null); assertCompletionWithLabel( "logging.level.ot<*>" , //============== - "root : String", + "root", //=> "logging.level.root=<*>" ); + assertCompletionDetails("logging.level.ot<*>", "root", "String", null); } @Test public void testHandleAsResourceContentAssist() throws Exception { @@ -1508,15 +1516,16 @@ public class ApplicationPropertiesEditorTest extends AbstractPropsEditorTest { ); } - @Ignore @Test public void testEnumJavaDocShownInValueContentAssist() throws Exception { + @Test public void testEnumJavaDocShownInValueContentAssist() throws Exception { useProject(createPredefinedMavenProject("enums-boot-1.3.2-app")); data("my.background", "demo.Color", null, "Color to use as default background."); - assertCompletionWithInfoHover( + assertCompletionDetails( "my.background=<*>" , // ========== "red" , // ==> + "demo.Color[BLUE, GREEN, RED]", "Hot and delicious" ); } 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 0127717d2..124d5d099 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 @@ -24,7 +24,6 @@ import org.springframework.ide.vscode.application.properties.metadata.CachingVal import org.springframework.ide.vscode.application.properties.metadata.PropertyInfo; 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; import org.springframework.ide.vscode.commons.util.StringUtil; import org.springframework.ide.vscode.languageserver.testharness.Editor; @@ -42,8 +41,6 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { //////////////////////////////////////////////////////////////////////////////////////// - private JavaProjectFinder javaProjectFinder; - @Test public void linterRunsOnDocumentOpenAndChange() throws Exception { Editor editor = newEditor( "somemap: val\n"+ @@ -139,7 +136,7 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { editor.assertHoverContains("INDENT_OUTPUT", "allows enabling (or disabling) indentation"); } - @Ignore @Test public void testHoverInfoForEnumValueInMapKeyCompletion() throws Exception { + @Test public void testHoverInfoForEnumValueInMapKeyCompletion() throws Exception { IJavaProject project = createPredefinedMavenProject("empty-boot-1.3.0-app"); useProject(project); @@ -151,30 +148,32 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { // System.out.println(downloadSources(type)); // System.out.println("<<< source for: "+type.getFullyQualifiedName()); - assertCompletionWithInfoHover( + assertCompletionDetails( "spring:\n" + " jackson:\n" + " serialization:\n" + " ind<*>" , // ========== - "indent-output : boolean" + "indent-output" , // ==> + "boolean", "allows enabling (or disabling) indentation" ); } - @Ignore @Test public void testHoverInfoForValueHintCompletion() throws Exception { + @Test public void testHoverInfoForValueHintCompletion() throws Exception { data("my.bonus", "java.lang.String", null, "Bonus type") .valueHint("small", "A small bonus. For a little extra incentive.") .valueHint("large", "An large bonus. For the ones who deserve it.") .valueHint("exorbitant", "Truly outrageous. Who deserves a bonus like that?"); - assertCompletionWithInfoHover( + assertCompletionDetails( "my:\n" + " bonus: l<*>" , // ========== "large" , // ==> + "String", "For the ones who deserve it" ); } @@ -2992,12 +2991,21 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { " level:\n" + " <*>" , // => - "root : String" + "root" , "logging:\n" + " level:\n" + " root: <*>" ); + assertCompletionDetails( + "logging:\n" + + " level:\n" + + " <*>" + , // => + "root", + "String", + null + ); } @Test public void testEscapeStringValueStartingWithStar() throws Exception { @@ -3067,12 +3075,18 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { " level:\n" + " boot.auto<*>" , //----------------- - "org.springframework.boot.autoconfigure : String" + "org.springframework.boot.autoconfigure" , // => "logging:\n" + " level:\n" + " org.springframework.boot.autoconfigure: <*>" ); + assertCompletionDetails( + "logging:\n" + + " level:\n" + + " boot.auto<*>" + , //----------------- + "org.springframework.boot.autoconfigure", "String", null); //Finds a type: assertCompletionWithLabel( @@ -3080,12 +3094,21 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { " level:\n" + " MesgSource<*>" , //----------------- - "org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration : String" + "org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration" , // => "logging:\n" + " level:\n" + " org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration: <*>" ); + assertCompletionDetails( + "logging:\n" + + " level:\n" + + " MesgSource<*>" + , //----------------- + "org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration", + "String", + null + ); } @Test public void testSimpleResourceCompletion() throws Exception { @@ -3432,16 +3455,17 @@ public class ApplicationYamlEditorTest extends AbstractPropsEditorTest { ); } - @Ignore @Test public void testEnumJavaDocShownInValueContentAssist() throws Exception { + @Test public void testEnumJavaDocShownInValueContentAssist() throws Exception { useProject(createPredefinedMavenProject("enums-boot-1.3.2-app")); data("my.background", "demo.Color", null, "Color to use as default background."); - assertCompletionWithInfoHover( + assertCompletionDetails( "my:\n" + " background: <*>" , // ========== "red" , // ==> + "demo.Color[BLUE, GREEN, RED]", "Hot and delicious" ); }