Skip to content

Commit 377aa6a

Browse files
committed
GH-1626: stereotype catalog cache now automatically invalidated when project changes, e.g. classpath changes
1 parent 065d1c5 commit 377aa6a

File tree

3 files changed

+32
-5
lines changed

3 files changed

+32
-5
lines changed

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootLanguageServerBootApp.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -442,8 +442,8 @@ DataRepositoryAotMetadataService dataAotMetadataService() {
442442
}
443443

444444
@Bean
445-
StereotypeCatalogRegistry stereotypeCatalogRegistry() {
446-
return new StereotypeCatalogRegistry();
445+
StereotypeCatalogRegistry stereotypeCatalogRegistry(ProjectObserver projectObserver) {
446+
return new StereotypeCatalogRegistry(projectObserver);
447447
}
448448

449449
@Bean ResponseModifier responseModifier() {

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/stereotypes/ProjectBasedCatalogSource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public Stream<URL> getSources() {
105105
log.error("error looking up stereotype metadata for project: " + this.project.getElementName(), e);
106106
}
107107

108-
108+
log.info("project based stereotype catalogs lookup for project '" + project.getElementName() + "' found: " + result.toString());
109109
return result.stream();
110110
}
111111

headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/stereotypes/StereotypeCatalogRegistry.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,20 @@
1515

1616
import org.jmolecules.stereotype.catalog.support.AbstractStereotypeCatalog;
1717
import org.jmolecules.stereotype.catalog.support.JsonPathStereotypeCatalog;
18+
import org.slf4j.Logger;
19+
import org.slf4j.LoggerFactory;
1820
import org.springframework.ide.vscode.commons.java.IJavaProject;
21+
import org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver;
1922

2023
public class StereotypeCatalogRegistry {
21-
24+
25+
private static final Logger log = LoggerFactory.getLogger(StereotypeCatalogRegistry.class);
26+
2227
private final Map<String, AbstractStereotypeCatalog> catalogs;
2328

24-
public StereotypeCatalogRegistry() {
29+
public StereotypeCatalogRegistry(ProjectObserver projectObserver) {
2530
this.catalogs = new ConcurrentHashMap<>();
31+
registerProjectListener(projectObserver);
2632
}
2733

2834
public AbstractStereotypeCatalog getCatalogOf(IJavaProject project) {
@@ -36,6 +42,27 @@ private AbstractStereotypeCatalog createCatalog(IJavaProject project) {
3642

3743
public void reset(IJavaProject project) {
3844
this.catalogs.remove(project.getElementName());
45+
log.info("stereotype catalog registry reset for project '" + project.getElementName() + "'");
46+
}
47+
48+
// reset cache when projects change or disappear
49+
private void registerProjectListener(ProjectObserver projectObserver) {
50+
projectObserver.addListener(new ProjectObserver.Listener() {
51+
52+
@Override
53+
public void deleted(IJavaProject project) {
54+
reset(project);
55+
}
56+
57+
@Override
58+
public void created(IJavaProject project) {
59+
}
60+
61+
@Override
62+
public void changed(IJavaProject project) {
63+
reset(project);
64+
}
65+
});
3966
}
4067

4168
}

0 commit comments

Comments
 (0)