From d63bb4949e396d9710975b92a517d122faa272bf Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Wed, 23 Nov 2016 11:29:20 -0500 Subject: [PATCH] Fix no hover case --- .../languageserver/testharness/Editor.java | 7 ++- .../hover/PropertiesHoverCalculator.java | 47 ++++++++++--------- .../test/ApplicationPropertiesEditorTest.java | 11 +++++ 3 files changed, 42 insertions(+), 23 deletions(-) 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 0b7b45e2a..c0a67a07f 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 @@ -1,6 +1,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.*; @@ -320,8 +321,10 @@ public class Editor { Hover hover = harness.getHover(document, document.toPosition(hoverPosition)); assertContains(snippet, hover.getContents().toString()); } - public void assertNoHover(String string) { - throw new UnsupportedOperationException("Not implemented yet!"); + public void assertNoHover(String hoverOver) throws Exception { + int hoverPosition = getRawText().indexOf(hoverOver) + hoverOver.length() / 2; + Hover hover = harness.getHover(document, document.toPosition(hoverPosition)); + assertTrue(hover.getContents().isEmpty()); } /** diff --git a/vscode-extensions/vscode-application-properties/src/main/java/org/springframework/ide/vscode/application/properties/hover/PropertiesHoverCalculator.java b/vscode-extensions/vscode-application-properties/src/main/java/org/springframework/ide/vscode/application/properties/hover/PropertiesHoverCalculator.java index 13625d48a..6486cf78d 100644 --- a/vscode-extensions/vscode-application-properties/src/main/java/org/springframework/ide/vscode/application/properties/hover/PropertiesHoverCalculator.java +++ b/vscode-extensions/vscode-application-properties/src/main/java/org/springframework/ide/vscode/application/properties/hover/PropertiesHoverCalculator.java @@ -8,6 +8,7 @@ import java.util.Collection; import java.util.Optional; import org.springframework.ide.vscode.application.properties.metadata.PropertyInfo; +import org.springframework.ide.vscode.application.properties.metadata.SpringPropertyIndex; import org.springframework.ide.vscode.application.properties.metadata.hints.StsValueHint; import org.springframework.ide.vscode.application.properties.metadata.types.Type; import org.springframework.ide.vscode.application.properties.metadata.types.TypeUtil; @@ -20,7 +21,6 @@ import org.springframework.ide.vscode.commons.languageserver.util.IDocument; import org.springframework.ide.vscode.commons.languageserver.util.IRegion; import org.springframework.ide.vscode.commons.util.Renderable; import org.springframework.ide.vscode.commons.util.Renderables; -import org.springframework.ide.vscode.commons.util.StringUtil; import org.springframework.ide.vscode.java.properties.antlr.parser.AntlrParser; import org.springframework.ide.vscode.java.properties.parser.ParseResults; import org.springframework.ide.vscode.java.properties.parser.PropertiesAst.Key; @@ -138,27 +138,32 @@ class PropertiesHoverCalculator { * Search known properties for the best 'match' to show as hover data. */ private PropertyInfo findBestHoverMatch(String propName) { - //TODO: optimize, should be able to use index's treemap to find this without iterating all entries. - PropertyInfo best = null; - int bestCommonPrefixLen = 0; //We try to pick property with longest common prefix - int bestExtraLen = Integer.MAX_VALUE; - for (PropertyInfo candidate : index) { - int commonPrefixLen = StringUtil.commonPrefixLength(propName, candidate.getId()); - int extraLen = candidate.getId().length()-commonPrefixLen; - if (commonPrefixLen==propName.length() && extraLen==0) { - //exact match found, can stop searching for better matches - return candidate; - } - //candidate is better if... - if (commonPrefixLen>bestCommonPrefixLen // it has a longer common prefix - || commonPrefixLen==bestCommonPrefixLen && extraLenbestCommonPrefixLen // it has a longer common prefix +// || commonPrefixLen==bestCommonPrefixLen && extraLen