From 21b06df305bbb45878407e456b89feafc9a56a3a Mon Sep 17 00:00:00 2001 From: Kris De Volder Date: Wed, 28 Nov 2018 13:55:59 -0800 Subject: [PATCH] Clear property index when json metadata is changed --- .../boot/ls/DelegatingStreamConnectionProvider.java | 4 +++- .../ide/vscode/boot/app/BootLanguageServerParams.java | 7 +++++-- .../metadata/DefaultSpringPropertyIndexProvider.java | 5 +++-- .../ide/vscode/boot/metadata/PropertiesLoader.java | 2 +- .../boot/metadata/SpringPropertiesIndexManager.java | 9 ++++++++- .../boot/editor/harness/AbstractPropsEditorTest.java | 2 -- .../ide/vscode/boot/metadata/PropertiesIndexTest.java | 6 +++--- 7 files changed, 23 insertions(+), 12 deletions(-) diff --git a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java index aea6062eb..954e3d16c 100644 --- a/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java +++ b/eclipse-language-servers/org.springframework.tooling.boot.ls/src/org/springframework/tooling/boot/ls/DelegatingStreamConnectionProvider.java @@ -116,7 +116,9 @@ public class DelegatingStreamConnectionProvider implements StreamConnectionProvi FileSystems.getDefault().getPathMatcher("glob:**/pom.xml"), FileSystems.getDefault().getPathMatcher("glob:**/*.gradle"), FileSystems.getDefault().getPathMatcher("glob:**/*.java"), - FileSystems.getDefault().getPathMatcher("glob:**/*.class") + FileSystems.getDefault().getPathMatcher("glob:**/*.json"), + FileSystems.getDefault().getPathMatcher("glob:**/*.yml"), + FileSystems.getDefault().getPathMatcher("glob:**/*.properties") ))); //Add remote boot apps listener diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java index da07a2063..45ae44db2 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerParams.java @@ -44,6 +44,7 @@ import org.springframework.ide.vscode.commons.maven.MavenCore; import org.springframework.ide.vscode.commons.maven.java.MavenProjectCache; import org.springframework.ide.vscode.commons.maven.java.MavenProjectFinder; import org.springframework.ide.vscode.commons.util.Assert; +import org.springframework.ide.vscode.commons.util.FileObserver; import org.springframework.ide.vscode.commons.util.text.IDocument; /** @@ -91,7 +92,9 @@ public class BootLanguageServerParams { new JdtLsProjectCache(server), () -> createFallbackProjectCache(server) ); - DefaultSpringPropertyIndexProvider indexProvider = new DefaultSpringPropertyIndexProvider(jdtProjectCache, jdtProjectCache, valueProviders); + + FileObserver fileObserver = server.getWorkspaceService().getFileObserver(); + DefaultSpringPropertyIndexProvider indexProvider = new DefaultSpringPropertyIndexProvider(jdtProjectCache, jdtProjectCache, fileObserver, valueProviders); indexProvider.setProgressService(server.getProgressService()); return new BootLanguageServerParams( @@ -154,7 +157,7 @@ public class BootLanguageServerParams { CompositeProjectOvserver projectObserver = new CompositeProjectOvserver(Arrays.asList(mavenProjectCache, gradleProjectCache)); - DefaultSpringPropertyIndexProvider indexProvider = new DefaultSpringPropertyIndexProvider(javaProjectFinder, projectObserver, valueProviders); + DefaultSpringPropertyIndexProvider indexProvider = new DefaultSpringPropertyIndexProvider(javaProjectFinder, projectObserver, null, valueProviders); indexProvider.setProgressService(server.getProgressService()); return new BootLanguageServerParams( diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java index 331ffef94..ab82cbf14 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/DefaultSpringPropertyIndexProvider.java @@ -18,6 +18,7 @@ import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.ProgressService; import org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder; import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver; +import org.springframework.ide.vscode.commons.util.FileObserver; import org.springframework.ide.vscode.commons.util.FuzzyMap; import org.springframework.ide.vscode.commons.util.text.IDocument; @@ -28,9 +29,9 @@ public class DefaultSpringPropertyIndexProvider implements SpringPropertyIndexPr private ProgressService progressService = (id, msg) -> { /*ignore*/ }; - public DefaultSpringPropertyIndexProvider(JavaProjectFinder javaProjectFinder, ProjectObserver projectObserver, ValueProviderRegistry valueProviders) { + public DefaultSpringPropertyIndexProvider(JavaProjectFinder javaProjectFinder, ProjectObserver projectObserver, FileObserver fileObserver, ValueProviderRegistry valueProviders) { this.javaProjectFinder = javaProjectFinder; - this.indexManager = new SpringPropertiesIndexManager(valueProviders, projectObserver); + this.indexManager = new SpringPropertiesIndexManager(valueProviders, projectObserver, fileObserver); } @Override diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/PropertiesLoader.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/PropertiesLoader.java index c8f4c5aaa..eb46aae9b 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/PropertiesLoader.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/PropertiesLoader.java @@ -29,7 +29,7 @@ import org.springframework.ide.vscode.commons.util.Log; public class PropertiesLoader { - private static final String MAIN_SPRING_CONFIGURATION_METADATA_JSON = "META-INF/spring-configuration-metadata.json"; + public static final String MAIN_SPRING_CONFIGURATION_METADATA_JSON = "META-INF/spring-configuration-metadata.json"; public static final String ADDITIONAL_SPRING_CONFIGURATION_METADATA_JSON = "META-INF/additional-spring-configuration-metadata.json"; diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/SpringPropertiesIndexManager.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/SpringPropertiesIndexManager.java index 1ae8eecfc..c8b6e37c5 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/SpringPropertiesIndexManager.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/metadata/SpringPropertiesIndexManager.java @@ -17,10 +17,12 @@ import org.springframework.ide.vscode.boot.metadata.util.ListenerManager; import org.springframework.ide.vscode.commons.java.IJavaProject; import org.springframework.ide.vscode.commons.languageserver.ProgressService; import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver; +import org.springframework.ide.vscode.commons.util.FileObserver; import org.springframework.ide.vscode.commons.util.Log; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import com.google.common.collect.ImmutableList; /** * Support for Reconciling, Content Assist and Hover Text in spring properties @@ -36,13 +38,18 @@ public class SpringPropertiesIndexManager extends ListenerManager indexes.invalidate(project))); } + if (fileObserver!=null) { + fileObserver.onAnyChange(ImmutableList.of("**/*spring-configuration-metadata.json"), changed -> { + clear(); + }); + } } public synchronized SpringPropertyIndex get(IJavaProject project, ProgressService progressService) { diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java index a8fab984d..fc2ff12ba 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/editor/harness/AbstractPropsEditorTest.java @@ -63,8 +63,6 @@ public abstract class AbstractPropsEditorTest { } })); - - abstract public Editor newEditor(String contents) throws Exception; private IJavaProject getTestProject() { diff --git a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/metadata/PropertiesIndexTest.java b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/metadata/PropertiesIndexTest.java index 0eb9c237d..e06c04e2d 100644 --- a/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/metadata/PropertiesIndexTest.java +++ b/headless-services/spring-boot-language-server/src/test/java/org/springframework/ide/vscode/boot/metadata/PropertiesIndexTest.java @@ -36,7 +36,7 @@ public class PropertiesIndexTest { @Test public void springStandardPropertyPresent_Maven() throws Exception { SpringPropertiesIndexManager indexManager = new SpringPropertiesIndexManager( - new ValueProviderRegistry(), null); + new ValueProviderRegistry(), null, null); IJavaProject mavenProject = projects.mavenProject(CUSTOM_PROPERTIES_PROJECT); FuzzyMap index = indexManager.get(mavenProject, progressService); PropertyInfo propertyInfo = index.get("server.port"); @@ -48,7 +48,7 @@ public class PropertiesIndexTest { @Test public void customPropertyPresent_Maven() throws Exception { SpringPropertiesIndexManager indexManager = new SpringPropertiesIndexManager( - new ValueProviderRegistry(), null); + new ValueProviderRegistry(), null, null); IJavaProject mavenProject = projects.mavenProject(CUSTOM_PROPERTIES_PROJECT); FuzzyMap index = indexManager.get(mavenProject, progressService); PropertyInfo propertyInfo = index.get("demo.settings.user"); @@ -60,7 +60,7 @@ public class PropertiesIndexTest { @Test public void propertyNotPresent_Maven() throws Exception { SpringPropertiesIndexManager indexManager = new SpringPropertiesIndexManager( - new ValueProviderRegistry(), null); + new ValueProviderRegistry(), null, null); IJavaProject mavenProject = projects.mavenProject(CUSTOM_PROPERTIES_PROJECT); FuzzyMap index = indexManager.get(mavenProject, progressService); PropertyInfo propertyInfo = index.get("my.server.port");