diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/.classpath b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/.classpath
new file mode 100644
index 0000000000..16d067f284
--- /dev/null
+++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/.project b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/.project
new file mode 100644
index 0000000000..d469a46440
--- /dev/null
+++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/.project
@@ -0,0 +1,28 @@
+
+
+ org.springframework.tooling.ls.eclipse.gotosymbol.test
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/META-INF/MANIFEST.MF b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..1ffadbdc19
--- /dev/null
+++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Goto Symbol Tests
+Bundle-SymbolicName: org.springframework.tooling.ls.eclipse.gotosymbol.test
+Bundle-Version: 5.4.0.qualifier
+Fragment-Host: org.springframework.tooling.ls.eclipse.gotosymbol
+Bundle-RequiredExecutionEnvironment: JavaSE-21
+Require-Bundle: org.junit
diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/build.properties b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/build.properties
new file mode 100644
index 0000000000..34d2e4d2da
--- /dev/null
+++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/pom.xml b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/pom.xml
new file mode 100644
index 0000000000..325c2785f2
--- /dev/null
+++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ org.springframework.boot.ide
+ org.springframework.boot.ide.servers
+ 5.4.0-SNAPSHOT
+ ../pom.xml
+
+
+ org.springframework.tooling.ls.eclipse.gotosymbol.test
+ eclipse-test-plugin
+
+
+
+
+ org.eclipse.tycho
+ tycho-surefire-plugin
+ ${tycho-version}
+
+ **/*Test.java
+
+
+
+
+
diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialogModelTest.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialogModelTest.java
new file mode 100644
index 0000000000..f2f5859ca6
--- /dev/null
+++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol.test/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialogModelTest.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2026 Broadcom, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Broadcom, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.springframework.tooling.ls.eclipse.gotosymbol.dialogs;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertSame;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+
+/**
+ * Tests the scope selection of the go-to-symbol dialog model.
+ *
+ * @author Broadcom, Inc.
+ */
+public class GotoSymbolDialogModelTest {
+
+ @Test
+ public void startsWithRememberedSymbolsProvider() {
+ SymbolsProvider workspace = provider("Workspace");
+ SymbolsProvider project = provider("Project");
+ SymbolsProvider file = provider("File");
+
+ GotoSymbolDialogModel model = new GotoSymbolDialogModel(null, 1, workspace, project, file);
+
+ assertSame(project, model.currentSymbolsProvider.getValue());
+ assertEquals(1, model.getCurrentSymbolsProviderIndex());
+ }
+
+ @Test
+ public void togglesFromRememberedSymbolsProvider() {
+ SymbolsProvider workspace = provider("Workspace");
+ SymbolsProvider project = provider("Project");
+ SymbolsProvider file = provider("File");
+ GotoSymbolDialogModel model = new GotoSymbolDialogModel(null, 1, workspace, project, file);
+
+ model.toggleSymbolsProvider();
+
+ assertSame(file, model.currentSymbolsProvider.getValue());
+ assertEquals(2, model.getCurrentSymbolsProviderIndex());
+ }
+
+ private SymbolsProvider provider(String name) {
+ return new SymbolsProvider() {
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public List fetchFor(String query) {
+ return Collections.emptyList();
+ }
+
+ @Override
+ public boolean fromFile(SymbolContainer symbol) {
+ return false;
+ }
+ };
+ }
+}
diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialogModel.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialogModel.java
index e3231f2f0a..9d967f5975 100644
--- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialogModel.java
+++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialogModel.java
@@ -238,11 +238,16 @@ private List> computeMatches(Collection
private FavouritesPreference favourites = null;
public GotoSymbolDialogModel(String keyBindings, SymbolsProvider... symbolsProviders) {
+ this(keyBindings, 0, symbolsProviders);
+ }
+
+ public GotoSymbolDialogModel(String keyBindings, int initialSymbolsProviderIndex, SymbolsProvider... symbolsProviders) {
this.keyBindings = keyBindings;
- Assert.isLegal(symbolsProviders.length>0);
+ Assert.isLegal(symbolsProviders.length>0);
+ Assert.isLegal(initialSymbolsProviderIndex >= 0 && initialSymbolsProviderIndex < symbolsProviders.length);
this.symbolsProviders = symbolsProviders;
- this.currentSymbolsProviderIndex = 0;
- this.currentSymbolsProvider.setValue(symbolsProviders[0]);
+ this.currentSymbolsProviderIndex = initialSymbolsProviderIndex;
+ this.currentSymbolsProvider.setValue(symbolsProviders[initialSymbolsProviderIndex]);
}
public GotoSymbolDialogModel setFavourites(FavouritesPreference favourites) {
@@ -279,6 +284,10 @@ public SymbolsProvider[] getSymbolsProviders() {
return symbolsProviders;
}
+ public int getCurrentSymbolsProviderIndex() {
+ return currentSymbolsProviderIndex;
+ }
+
/**
* Set an ok handler. The handler is meant to be called by the UI when user request to
* execute the dialogs action on its current selection. For example, by pressing 'ENTER'
diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/handlers/GotoSymbolHandler.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/handlers/GotoSymbolHandler.java
index 7c91412b54..bd3ee79d92 100644
--- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/handlers/GotoSymbolHandler.java
+++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/handlers/GotoSymbolHandler.java
@@ -46,6 +46,7 @@ private static void debug(String string) {
}
}
private static GotoSymbolDialogModel currentDialog = null;
+ private static int lastSymbolsProviderIndex = 0;
public GotoSymbolHandler() {
debug("Creating GotoSymbolHandler");
@@ -63,16 +64,17 @@ public Object execute(ExecutionEvent event) throws ExecutionException {
final Shell shell = HandlerUtil.getActiveShell(event);
final ITextEditor textEditor = (ITextEditor) part;
- GotoSymbolDialogModel model = new GotoSymbolDialogModel(getKeybindings(event), InWorkspaceSymbolsProvider.createFor(event), InProjectSymbolsProvider.createFor(event), InFileSymbolsProvider.createFor(textEditor))
+ GotoSymbolDialogModel model = new GotoSymbolDialogModel(getKeybindings(event), lastSymbolsProviderIndex, InWorkspaceSymbolsProvider.createFor(event), InProjectSymbolsProvider.createFor(event), InFileSymbolsProvider.createFor(textEditor))
.setOkHandler(GotoSymbolDialogModel.OPEN_IN_EDITOR_OK_HANDLER);
GotoSymbolDialog dialog = new GotoSymbolDialog(shell, textEditor, model, /*alignRight*/ false);
currentDialog = model;
- dialog.open();
- debug("GotoSymbolDialog opened");
dialog.getShell().addDisposeListener(de -> {
debug("GotoSymbolDialog closed!");
+ lastSymbolsProviderIndex = model.getCurrentSymbolsProviderIndex();
currentDialog = null;
});
+ dialog.open();
+ debug("GotoSymbolDialog opened");
}
debug("<<org.springframework.tooling.cloudfoundry.manifest.ls.integration.feature
org.springframework.tooling.ls.eclipse.gotosymbol
+ org.springframework.tooling.ls.eclipse.gotosymbol.test
org.springframework.tooling.boot.ls
org.springframework.tooling.boot.ls.feature