This is an automated email from the ASF dual-hosted git repository.
ppisl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 028c7a26de Adding symbol provider to obtain symbols for GoTo Symbol in
workspace (#4302)
028c7a26de is described below
commit 028c7a26de84892bb3d93e3ee30d8b9a9221f2f2
Author: Petr Pisl <[email protected]>
AuthorDate: Tue Jul 12 05:25:09 2022 +0200
Adding symbol provider to obtain symbols for GoTo Symbol in workspace
(#4302)
* Adding symbols to GoTo dialog in VSCode
* Removing changes in LSP API and implementing the CSL GoTo Symbol without
changes in the api.
* Cleaning code.
* Using @ServiceProvider.
---
.../groovy/editor/language/GroovyTypeSearcher.java | 2 +
.../csl/navigation/GsfStructureProvider.java | 2 +-
java/java.lsp.server/nbproject/project.xml | 18 +++++++
.../netbeans/modules/java/lsp/server/Utils.java | 59 ++++++++++++++++++++--
.../lsp/server/protocol/WorkspaceServiceImpl.java | 29 ++++++++++-
5 files changed, 105 insertions(+), 5 deletions(-)
diff --git
a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/language/GroovyTypeSearcher.java
b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/language/GroovyTypeSearcher.java
index 75b444f0f5..045f61f6dc 100644
---
a/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/language/GroovyTypeSearcher.java
+++
b/groovy/groovy.editor/src/org/netbeans/modules/groovy/editor/language/GroovyTypeSearcher.java
@@ -51,11 +51,13 @@ import org.openide.NotifyDescriptor;
import org.openide.filesystems.FileObject;
import org.openide.util.ImageUtilities;
import org.openide.util.NbBundle;
+import org.openide.util.lookup.ServiceProvider;
/**
*
* @author Martin Adamek
*/
+@ServiceProvider(service=IndexSearcher.class)
public class GroovyTypeSearcher implements IndexSearcher {
private static final Logger LOGGER =
Logger.getLogger(GroovyTypeSearcher.class.getName());
diff --git
a/ide/csl.api/src/org/netbeans/modules/csl/navigation/GsfStructureProvider.java
b/ide/csl.api/src/org/netbeans/modules/csl/navigation/GsfStructureProvider.java
index 1aff238658..8e5c1870c7 100644
---
a/ide/csl.api/src/org/netbeans/modules/csl/navigation/GsfStructureProvider.java
+++
b/ide/csl.api/src/org/netbeans/modules/csl/navigation/GsfStructureProvider.java
@@ -72,7 +72,7 @@ public class GsfStructureProvider implements
StructureProvider {
case KEYWORD: return StructureElement.Kind.Key;
case OTHER: return StructureElement.Kind.Object;
case PACKAGE: return StructureElement.Kind.Package;
- case PARAMETER: return StructureElement.Kind.TypeParameter;
+ case PARAMETER: return StructureElement.Kind.Variable;
case PROPERTY: return StructureElement.Kind.Property;
case RULE: return StructureElement.Kind.Event;
case TAG: return StructureElement.Kind.Operator;
diff --git a/java/java.lsp.server/nbproject/project.xml
b/java/java.lsp.server/nbproject/project.xml
index 2299cb4d28..1fe9553d73 100644
--- a/java/java.lsp.server/nbproject/project.xml
+++ b/java/java.lsp.server/nbproject/project.xml
@@ -131,6 +131,24 @@
<specification-version>1.11</specification-version>
</run-dependency>
</dependency>
+ <dependency>
+
<code-name-base>org.netbeans.modules.csl.api</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>2</release-version>
+ <specification-version>2.74</specification-version>
+ </run-dependency>
+ </dependency>
+ <dependency>
+
<code-name-base>org.netbeans.modules.csl.types</code-name-base>
+ <build-prerequisite/>
+ <compile-dependency/>
+ <run-dependency>
+ <release-version>1</release-version>
+ <specification-version>1.17</specification-version>
+ </run-dependency>
+ </dependency>
<dependency>
<code-name-base>org.netbeans.api.progress</code-name-base>
<build-prerequisite/>
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/Utils.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/Utils.java
index b05ab5d9b6..84b39700be 100644
--- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/Utils.java
+++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/Utils.java
@@ -19,12 +19,9 @@
package org.netbeans.modules.java.lsp.server;
import com.google.gson.stream.JsonWriter;
-import com.sun.source.tree.ClassTree;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.LineMap;
-import com.sun.source.tree.MethodTree;
import com.sun.source.tree.Tree;
-import com.sun.source.tree.VariableTree;
import java.io.IOException;
import java.io.StringWriter;
import java.net.MalformedURLException;
@@ -50,11 +47,14 @@ import org.eclipse.lsp4j.Position;
import org.eclipse.lsp4j.Range;
import org.eclipse.lsp4j.SymbolKind;
import org.eclipse.lsp4j.SymbolTag;
+import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.editor.document.LineDocument;
import org.netbeans.api.editor.document.LineDocumentUtils;
import org.netbeans.api.java.source.CompilationInfo;
import org.netbeans.api.lsp.StructureElement;
import org.netbeans.modules.editor.java.Utilities;
+import org.netbeans.modules.parsing.spi.indexing.support.QuerySupport;
+import org.netbeans.spi.jumpto.type.SearchType;
import org.openide.cookies.EditorCookie;
import org.openide.filesystems.FileObject;
import org.openide.filesystems.URLMapper;
@@ -99,6 +99,59 @@ public class Utils {
return SymbolKind.Object;
}
+ @NonNull
+ public static QuerySupport.Kind searchType2QueryKind(@NonNull final
SearchType searchType) {
+ // copy of org.netbeans.modules.jumpto.common.Utils.toQueryKind
+ switch (searchType) {
+ case CAMEL_CASE:
+ return QuerySupport.Kind.CAMEL_CASE;
+ case CASE_INSENSITIVE_CAMEL_CASE:
+ return QuerySupport.Kind.CASE_INSENSITIVE_CAMEL_CASE;
+ case CASE_INSENSITIVE_EXACT_NAME:
+ case EXACT_NAME:
+ return QuerySupport.Kind.EXACT;
+ case CASE_INSENSITIVE_PREFIX:
+ return QuerySupport.Kind.CASE_INSENSITIVE_PREFIX;
+ case CASE_INSENSITIVE_REGEXP:
+ return QuerySupport.Kind.CASE_INSENSITIVE_REGEXP;
+ case PREFIX:
+ return QuerySupport.Kind.PREFIX;
+ case REGEXP:
+ return QuerySupport.Kind.REGEXP;
+ default:
+ throw new
IllegalThreadStateException(String.valueOf(searchType));
+ }
+ }
+
+ public static SymbolKind cslElementKind2SymbolKind(final
org.netbeans.modules.csl.api.ElementKind elementKind) {
+ // copy of
org.netbeans.modules.csl.navigation.GsfStructureProvider.convertKind
+ switch(elementKind) {
+ case ATTRIBUTE: return SymbolKind.Property;
+ case CALL: return SymbolKind.Event;
+ case CLASS: return SymbolKind.Class;
+ case CONSTANT: return SymbolKind.Constant;
+ case CONSTRUCTOR: return SymbolKind.Constructor;
+ case DB: return SymbolKind.File;
+ case ERROR: return SymbolKind.Event;
+ case METHOD: return SymbolKind.Method;
+ case FILE: return SymbolKind.File;
+ case FIELD: return SymbolKind.Field;
+ case MODULE: return SymbolKind.Module;
+ case VARIABLE: return SymbolKind.Variable;
+ case GLOBAL: return SymbolKind.Module;
+ case INTERFACE: return SymbolKind.Interface;
+ case KEYWORD: return SymbolKind.Key;
+ case OTHER: return SymbolKind.Object;
+ case PACKAGE: return SymbolKind.Package;
+ case PARAMETER: return SymbolKind.Variable;
+ case PROPERTY: return SymbolKind.Property;
+ case RULE: return SymbolKind.Event;
+ case TAG: return SymbolKind.Operator;
+ case TEST: return SymbolKind.Function;
+ }
+ return SymbolKind.Object;
+ }
+
public static List<SymbolTag> elementTags2SymbolTags
(Set<StructureElement.Tag> tags) {
if (tags != null) {
// we now have only deprecated tag
diff --git
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
index 90e88c5914..17c458001d 100644
---
a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
+++
b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/WorkspaceServiceImpl.java
@@ -103,6 +103,7 @@ import org.netbeans.api.project.ProjectManager;
import org.netbeans.api.project.ProjectUtils;
import org.netbeans.api.project.SourceGroup;
import org.netbeans.api.project.ui.OpenProjects;
+import org.netbeans.modules.csl.api.IndexSearcher;
import org.netbeans.modules.editor.indent.spi.CodeStylePreferences;
import org.netbeans.modules.gsf.testrunner.ui.api.TestMethodController;
import org.netbeans.modules.gsf.testrunner.ui.api.TestMethodFinder;
@@ -708,8 +709,34 @@ public final class WorkspaceServiceImpl implements
WorkspaceService, LanguageCli
};
WORKER.post(() -> {
try {
- List<WorkspaceSymbol> symbols = new ArrayList<>();
SearchType searchType = getSearchType(queryFin, exactFin,
false, null, null);
+ List<WorkspaceSymbol> symbols = new ArrayList<>();
+
+ // CSL Part
+ Collection<? extends IndexSearcher> providers =
Lookup.getDefault().lookupAll(IndexSearcher.class);
+ Set<? extends IndexSearcher.Descriptor> descriptors;
+ if (!providers.isEmpty()) {
+ for (IndexSearcher provider : providers) {
+ descriptors = provider.getSymbols(null, queryFin,
Utils.searchType2QueryKind(searchType), null);
+ for (IndexSearcher.Descriptor desc : descriptors) {
+ FileObject fo = desc.getFileObject();
+ org.netbeans.modules.csl.api.ElementHandle element
= desc.getElement();
+ if (fo != null) {
+ Position startPos = Utils.createPosition(fo,
desc.getOffset());
+ Position endPos = Utils.createPosition(fo,
desc.getOffset() + desc.getSimpleName().length());
+ WorkspaceSymbol symbol = new WorkspaceSymbol(
+ desc.getSimpleName(),
+
Utils.cslElementKind2SymbolKind(element.getKind()),
+ Either.forLeft(new
Location(Utils.toUri(fo), new Range(startPos, endPos))),
+ desc.getContextName());
+ symbols.add(symbol);
+ }
+ }
+ }
+ }
+
+ // java part
+ // TODO rewrite the java part into a SymbolProvider
JavaSymbolProvider.ResultHandler symbolHandler = new
JavaSymbolProvider.ResultHandler() {
@Override
public void setHighlightText(String text) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists