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

Reply via email to