Skip to content

Commit 4bcbd32

Browse files
committed
refactor temporary text document creation, removed lazy mechanism for simplicity
1 parent 76b4b2c commit 4bcbd32

File tree

17 files changed

+125
-138
lines changed

17 files changed

+125
-138
lines changed

headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import java.util.concurrent.ConcurrentHashMap;
3131
import java.util.concurrent.Executors;
3232
import java.util.concurrent.TimeUnit;
33-
import java.util.concurrent.atomic.AtomicReference;
3433
import java.util.function.BiConsumer;
3534
import java.util.function.Consumer;
3635
import java.util.stream.Collectors;
@@ -55,7 +54,6 @@
5554
import org.eclipse.lsp4j.InitializeResult;
5655
import org.eclipse.lsp4j.MessageParams;
5756
import org.eclipse.lsp4j.MessageType;
58-
import org.eclipse.lsp4j.ProgressParams;
5957
import org.eclipse.lsp4j.Range;
6058
import org.eclipse.lsp4j.Registration;
6159
import org.eclipse.lsp4j.RegistrationParams;
@@ -65,15 +63,10 @@
6563
import org.eclipse.lsp4j.SetTraceParams;
6664
import org.eclipse.lsp4j.TextDocumentIdentifier;
6765
import org.eclipse.lsp4j.TextDocumentSyncKind;
68-
import org.eclipse.lsp4j.WorkDoneProgressBegin;
6966
import org.eclipse.lsp4j.WorkDoneProgressCancelParams;
70-
import org.eclipse.lsp4j.WorkDoneProgressCreateParams;
71-
import org.eclipse.lsp4j.WorkDoneProgressEnd;
72-
import org.eclipse.lsp4j.WorkDoneProgressReport;
7367
import org.eclipse.lsp4j.WorkspaceFolder;
7468
import org.eclipse.lsp4j.WorkspaceFoldersOptions;
7569
import org.eclipse.lsp4j.WorkspaceServerCapabilities;
76-
import org.eclipse.lsp4j.jsonrpc.messages.Either;
7770
import org.eclipse.lsp4j.services.LanguageClient;
7871
import org.eclipse.lsp4j.services.LanguageClientAware;
7972
import org.eclipse.lsp4j.services.NotebookDocumentService;
@@ -743,7 +736,7 @@ public void validateWith(TextDocumentIdentifier docId, IReconcileEngine engine)
743736
testListener.reconcileStarted(docId.getUri(), doc.getVersion());
744737
}
745738

746-
IProblemCollector problems = createProblemCollector(new AtomicReference<TextDocument>(doc), null);
739+
IProblemCollector problems = createProblemCollector(doc, null);
747740

748741
engine.reconcile(doc, problems);
749742
})
@@ -786,7 +779,7 @@ public void validateWith(TextDocumentIdentifier docId, IReconcileEngine engine)
786779
}
787780
}
788781

789-
public IProblemCollector createProblemCollector(AtomicReference<TextDocument> docRef, BiConsumer<String, Diagnostic> diagnosticsCollector) {
782+
public IProblemCollector createProblemCollector(TextDocument doc, BiConsumer<String, Diagnostic> diagnosticsCollector) {
790783

791784
SimpleTextDocumentService documentsService = getTextDocumentService();
792785

@@ -797,8 +790,8 @@ public IProblemCollector createProblemCollector(AtomicReference<TextDocument> do
797790

798791
@Override
799792
public void endCollecting() {
800-
documentsService.setQuickfixes(docRef.get().getId(), quickfixes);
801-
documentsService.publishDiagnostics(docRef.get().getId(), diagnostics);
793+
documentsService.setQuickfixes(doc.getId(), quickfixes);
794+
documentsService.publishDiagnostics(doc.getId(), diagnostics);
802795
log.debug("Reconcile done sent {} diagnostics", diagnostics.size());
803796
}
804797

@@ -810,8 +803,8 @@ public void beginCollecting() {
810803
@Override
811804
public void checkPointCollecting() {
812805
// publish what has been collected so far
813-
documentsService.setQuickfixes(docRef.get().getId(), quickfixes);
814-
documentsService.publishDiagnostics(docRef.get().getId(), diagnostics);
806+
documentsService.setQuickfixes(doc.getId(), quickfixes);
807+
documentsService.publishDiagnostics(doc.getId(), diagnostics);
815808
log.debug("Reconcile checkpoint sent {} diagnostics", diagnostics.size());
816809
}
817810

@@ -826,7 +819,7 @@ public void accept(ReconcileProblem problem) {
826819
d.setCode(problem.getCode());
827820
d.setMessage(problem.getMessage());
828821

829-
Range rng = docRef.get().toRange(problem.getOffset(), problem.getLength());
822+
Range rng = doc.toRange(problem.getOffset(), problem.getLength());
830823
d.setRange(rng);
831824

832825
d.setSeverity(severity);
@@ -855,12 +848,12 @@ public void accept(ReconcileProblem problem) {
855848
diagnostics.add(d);
856849

857850
if (diagnosticsCollector != null) {
858-
diagnosticsCollector.accept(docRef.get().getId().getUri(), d);
851+
diagnosticsCollector.accept(doc.getId().getUri(), d);
859852
}
860853

861854
}
862855
} catch (BadLocationException e) {
863-
log.warn("Invalid reconcile problem ignored: " + docRef.get().getId().getUri() + " - problem position: " + problem.getOffset() + "/" + problem.getLength(), e);
856+
log.warn("Invalid reconcile problem ignored: " + doc.getId().getUri() + " - problem position: " + problem.getOffset() + "/" + problem.getLength(), e);
864857
}
865858
}
866859
};

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2017, 2025 Pivotal, Inc.
2+
* Copyright (c) 2017, 2026 Pivotal, Inc.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -36,7 +36,6 @@
3636
import java.util.concurrent.ExecutorService;
3737
import java.util.concurrent.Executors;
3838
import java.util.concurrent.TimeUnit;
39-
import java.util.concurrent.atomic.AtomicReference;
4039
import java.util.function.BiConsumer;
4140
import java.util.function.BiFunction;
4241
import java.util.function.Consumer;
@@ -249,7 +248,7 @@ public void removeSymbols(IJavaProject project, String docURI) {
249248
namespaceHandler.put("http://www.springframework.org/schema/beans", new SpringIndexerXMLNamespaceHandlerBeans());
250249
springIndexerXML = new SpringIndexerXML(handler, namespaceHandler, this.cache, projectFinder());
251250

252-
BiFunction<AtomicReference<TextDocument>, BiConsumer<String, Diagnostic>, IProblemCollector> problemCollectorFactory = (docRef, aggregator) -> server.createProblemCollector(docRef, aggregator);
251+
BiFunction<TextDocument, BiConsumer<String, Diagnostic>, IProblemCollector> problemCollectorFactory = (doc, aggregator) -> server.createProblemCollector(doc, aggregator);
253252
springIndexerJava = new SpringIndexerJava(handler, specificProviders, this.cache, projectFinder(), server.getProgressService(), jdtReconciler, problemCollectorFactory, config.getJavaValidationSettingsJson(), cuCache);
254253
factoriesIndexer = new SpringFactoriesIndexer(handler, cache);
255254

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2017, 2025 Pivotal, Inc.
2+
* Copyright (c) 2017, 2026 Pivotal, Inc.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -27,7 +27,6 @@
2727
import org.springframework.ide.vscode.boot.java.utils.SpringIndexerJavaContext;
2828
import org.springframework.ide.vscode.commons.util.BadLocationException;
2929
import org.springframework.ide.vscode.commons.util.text.DocumentRegion;
30-
import org.springframework.ide.vscode.commons.util.text.TextDocument;
3130

3231
import reactor.util.function.Tuple2;
3332

@@ -40,7 +39,7 @@ public class BeansSymbolProvider implements SymbolProvider {
4039
private static final Logger log = LoggerFactory.getLogger(BeansSymbolProvider.class);
4140

4241
@Override
43-
public void addSymbols(Annotation node, ITypeBinding typeBinding, Collection<ITypeBinding> metaAnnotations, SpringIndexerJavaContext context, TextDocument doc) {
42+
public void addSymbols(Annotation node, ITypeBinding typeBinding, Collection<ITypeBinding> metaAnnotations, SpringIndexerJavaContext context) {
4443
if (node == null) return;
4544

4645
ASTNode parent = node.getParent();
@@ -52,9 +51,9 @@ public void addSymbols(Annotation node, ITypeBinding typeBinding, Collection<ITy
5251
ITypeBinding beanType = BeansIndexer.getBeanType(method);
5352
String markerString = BeansIndexer.getAnnotations(method);
5453

55-
for (Tuple2<String, DocumentRegion> nameAndRegion : BeanUtils.getBeanNamesFromBeanAnnotationWithRegions(node, doc)) {
54+
for (Tuple2<String, DocumentRegion> nameAndRegion : BeanUtils.getBeanNamesFromBeanAnnotationWithRegions(node, context.getDoc())) {
5655
try {
57-
Location location = new Location(doc.getUri(), doc.toRange(nameAndRegion.getT2()));
56+
Location location = new Location(context.getDoc().getUri(), context.getDoc().toRange(nameAndRegion.getT2()));
5857

5958
WorkspaceSymbol symbol = new WorkspaceSymbol(
6059
BeansIndexer.beanLabel(nameAndRegion.getT1(), beanType.getName(), "@Bean" + markerString),

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,19 +76,19 @@ public class ComponentSymbolProvider implements SymbolProvider {
7676
private static final Logger log = LoggerFactory.getLogger(ComponentSymbolProvider.class);
7777

7878
@Override
79-
public void addSymbols(Annotation node, ITypeBinding annotationType, Collection<ITypeBinding> metaAnnotations, SpringIndexerJavaContext context, TextDocument doc) {
79+
public void addSymbols(Annotation node, ITypeBinding annotationType, Collection<ITypeBinding> metaAnnotations, SpringIndexerJavaContext context) {
8080
try {
8181
if (node != null && node.getParent() != null && node.getParent() instanceof TypeDeclaration type) {
8282
// createSymbol(type, node, annotationType, metaAnnotations, context, doc);
8383
}
8484
else if (node != null && node.getParent() != null && node.getParent() instanceof RecordDeclaration record) {
85-
createSymbol(record, node, annotationType, metaAnnotations, context, doc);
85+
createSymbol(record, node, annotationType, metaAnnotations, context, context.getDoc());
8686
}
8787
else if (node != null && node.getParent() != null && node.getParent() instanceof AnnotationTypeDeclaration annotationDeclaration) {
88-
createSymbol(annotationDeclaration, node, annotationType, metaAnnotations, context, doc);
88+
createSymbol(annotationDeclaration, node, annotationType, metaAnnotations, context, context.getDoc());
8989
}
9090
else if (Annotations.NAMED_ANNOTATIONS.contains(annotationType.getQualifiedName())) {
91-
WorkspaceSymbol symbol = DefaultSymbolProvider.provideDefaultSymbol(node, doc);
91+
WorkspaceSymbol symbol = DefaultSymbolProvider.provideDefaultSymbol(node, context.getDoc());
9292
context.getGeneratedSymbols().add(new CachedSymbol(context.getDocURI(), context.getLastModified(), symbol));
9393
context.getGeneratedIndexElements().add(new CachedIndexElement(context.getDocURI(), new SimpleSymbolElement(symbol)));
9494
}
@@ -99,7 +99,7 @@ else if (Annotations.NAMED_ANNOTATIONS.contains(annotationType.getQualifiedName(
9999
}
100100

101101
@Override
102-
public void addSymbols(TypeDeclaration typeDeclaration, SpringIndexerJavaContext context, TextDocument doc) {
102+
public void addSymbols(TypeDeclaration typeDeclaration, SpringIndexerJavaContext context) {
103103
AnnotationHierarchies annotationHierarchies = AnnotationHierarchies.get(typeDeclaration);
104104

105105
boolean isComponment = annotationHierarchies.isAnnotatedWith(typeDeclaration.resolveBinding(), Annotations.COMPONENT)
@@ -108,12 +108,12 @@ public void addSymbols(TypeDeclaration typeDeclaration, SpringIndexerJavaContext
108108

109109
// check for event listener implementations on classes that are not annotated with component, but created via bean methods (for example)
110110
if (isComponment) {
111-
indexComponent(typeDeclaration, context, doc);
111+
indexComponent(typeDeclaration, context, context.getDoc());
112112
}
113113
else {
114-
indexEventListenerInterfaceImplementation(null, typeDeclaration, context, doc);
115-
indexBeanRegistrarImplementation(null, typeDeclaration, context, doc);
116-
indexBeanMethods(null, typeDeclaration, null, null, context, doc);
114+
indexEventListenerInterfaceImplementation(null, typeDeclaration, context, context.getDoc());
115+
indexBeanRegistrarImplementation(null, typeDeclaration, context, context.getDoc());
116+
indexBeanMethods(null, typeDeclaration, null, null, context, context.getDoc());
117117
indexAotProcessors(typeDeclaration, context);
118118
}
119119
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2025 Broadcom
2+
* Copyright (c) 2025, 2026 Broadcom
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -57,11 +57,11 @@ public class ConfigurationPropertiesSymbolProvider implements SymbolProvider {
5757
private static final Logger log = LoggerFactory.getLogger(ConfigurationPropertiesSymbolProvider.class);
5858

5959
@Override
60-
public void addSymbols(Annotation node, ITypeBinding annotationType, Collection<ITypeBinding> metaAnnotations, SpringIndexerJavaContext context, TextDocument doc) {
60+
public void addSymbols(Annotation node, ITypeBinding annotationType, Collection<ITypeBinding> metaAnnotations, SpringIndexerJavaContext context) {
6161
try {
6262
if (node != null && node.getParent() != null) {
6363
if (node.getParent() instanceof AbstractTypeDeclaration abstractType) {
64-
createSymbolForType(abstractType, node, annotationType, metaAnnotations, context, doc);
64+
createSymbolForType(abstractType, node, annotationType, metaAnnotations, context, context.getDoc());
6565
}
6666
}
6767
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2023, 2025 VMware, Inc.
2+
* Copyright (c) 2023, 2026 VMware, Inc.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -46,10 +46,10 @@ public class FeignClientSymbolProvider implements SymbolProvider {
4646
private static final Logger log = LoggerFactory.getLogger(FeignClientSymbolProvider.class);
4747

4848
@Override
49-
public void addSymbols(Annotation node, ITypeBinding annotationType, Collection<ITypeBinding> metaAnnotations, SpringIndexerJavaContext context, TextDocument doc) {
49+
public void addSymbols(Annotation node, ITypeBinding annotationType, Collection<ITypeBinding> metaAnnotations, SpringIndexerJavaContext context) {
5050
try {
5151
if (node != null && node.getParent() != null && node.getParent() instanceof TypeDeclaration) {
52-
Two<WorkspaceSymbol, Bean> result = createSymbol(node, annotationType, metaAnnotations, context, doc);
52+
Two<WorkspaceSymbol, Bean> result = createSymbol(node, annotationType, metaAnnotations, context, context.getDoc());
5353

5454
WorkspaceSymbol symbol = result.getFirst();
5555
Bean beanDefinition = result.getSecond();

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2018, 2025 Pivotal, Inc.
2+
* Copyright (c) 2018, 2026 Pivotal, Inc.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -66,15 +66,15 @@ public DataRepositorySymbolProvider(DataRepositoryAotMetadataService repositoryM
6666
}
6767

6868
@Override
69-
public void addSymbols(TypeDeclaration typeDeclaration, SpringIndexerJavaContext context, TextDocument doc) {
69+
public void addSymbols(TypeDeclaration typeDeclaration, SpringIndexerJavaContext context) {
7070
// this checks spring data repository beans that are defined as extensions of the repository interface
71-
Tuple4<String, ITypeBinding, String, DocumentRegion> repositoryBean = getRepositoryBean(typeDeclaration, doc);
71+
Tuple4<String, ITypeBinding, String, DocumentRegion> repositoryBean = getRepositoryBean(typeDeclaration, context.getDoc());
7272

7373
if (repositoryBean != null) {
7474
try {
7575
String beanName = repositoryBean.getT1();
7676
ITypeBinding beanType = repositoryBean.getT2();
77-
Location location = new Location(doc.getUri(), doc.toRange(repositoryBean.getT4()));
77+
Location location = new Location(context.getDoc().getUri(), context.getDoc().toRange(repositoryBean.getT4()));
7878

7979
WorkspaceSymbol symbol = new WorkspaceSymbol(
8080
beanLabel(true, beanName, beanType.getName(), repositoryBean.getT3()),
@@ -84,7 +84,7 @@ public void addSymbols(TypeDeclaration typeDeclaration, SpringIndexerJavaContext
8484
context.getGeneratedSymbols().add(new CachedSymbol(context.getDocURI(), context.getLastModified(), symbol));
8585

8686
// index elements
87-
InjectionPoint[] injectionPoints = ASTUtils.findInjectionPoints(typeDeclaration, doc);
87+
InjectionPoint[] injectionPoints = ASTUtils.findInjectionPoints(typeDeclaration, context.getDoc());
8888

8989
ITypeBinding concreteBeanTypeBindung = typeDeclaration.resolveBinding();
9090

@@ -93,10 +93,10 @@ public void addSymbols(TypeDeclaration typeDeclaration, SpringIndexerJavaContext
9393
String concreteRepoType = concreteBeanTypeBindung.getQualifiedName();
9494

9595
Collection<Annotation> annotationsOnMethod = ASTUtils.getAnnotations(typeDeclaration);
96-
AnnotationMetadata[] annotations = ASTUtils.getAnnotationsMetadata(annotationsOnMethod, doc);
96+
AnnotationMetadata[] annotations = ASTUtils.getAnnotationsMetadata(annotationsOnMethod, context.getDoc());
9797

9898
Bean beanDefinition = new Bean(beanName, concreteRepoType, location, injectionPoints, supertypes, annotations, false, symbol.getName());
99-
indexQueryMethods(beanDefinition, typeDeclaration, context, doc);
99+
indexQueryMethods(beanDefinition, typeDeclaration, context, context.getDoc());
100100

101101
context.getGeneratedIndexElements().add(new CachedIndexElement(context.getDocURI(), beanDefinition));
102102

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2025 Broadcom
2+
* Copyright (c) 2025, 2026 Broadcom
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -26,7 +26,6 @@
2626
import org.springframework.ide.vscode.boot.java.utils.CachedSymbol;
2727
import org.springframework.ide.vscode.boot.java.utils.SpringIndexerJavaContext;
2828
import org.springframework.ide.vscode.commons.util.BadLocationException;
29-
import org.springframework.ide.vscode.commons.util.text.TextDocument;
3029

3130
/**
3231
* @author Martin Lippert
@@ -36,7 +35,7 @@ public class EventListenerSymbolProvider implements SymbolProvider {
3635
private static final Logger log = LoggerFactory.getLogger(EventListenerSymbolProvider.class);
3736

3837
@Override
39-
public void addSymbols(Annotation node, ITypeBinding typeBinding, Collection<ITypeBinding> metaAnnotations, SpringIndexerJavaContext context, TextDocument doc) {
38+
public void addSymbols(Annotation node, ITypeBinding typeBinding, Collection<ITypeBinding> metaAnnotations, SpringIndexerJavaContext context) {
4039
if (node == null) return;
4140

4241
ASTNode parent = node.getParent();
@@ -48,7 +47,7 @@ public void addSymbols(Annotation node, ITypeBinding typeBinding, Collection<ITy
4847
try {
4948
String symbolLabel = EventListenerIndexer.createEventListenerSymbolLabel(node, method);
5049
WorkspaceSymbol symbol = new WorkspaceSymbol(symbolLabel, SymbolKind.Interface,
51-
Either.forLeft(new Location(doc.getUri(), doc.toRange(node.getStartPosition(), node.getLength()))));
50+
Either.forLeft(new Location(context.getDoc().getUri(), context.getDoc().toRange(node.getStartPosition(), node.getLength()))));
5251

5352
context.getGeneratedSymbols().add(new CachedSymbol(context.getDocURI(), context.getLastModified(), symbol));
5453
}

0 commit comments

Comments
 (0)