Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMickael Istria2019-05-06 10:26:10 +0000
committerMickael Istria2019-05-09 10:21:16 +0000
commit70c7eb47deef804fd67bb90a9a521720d925641b (patch)
tree606a03048ef42f0d8bf324c6981fe0e27ad33c56
parente4c433cae5c6a6552d3b974ce3b401dc63ad1501 (diff)
downloadlsp4e-70c7eb47deef804fd67bb90a9a521720d925641b.tar.gz
lsp4e-70c7eb47deef804fd67bb90a9a521720d925641b.tar.xz
lsp4e-70c7eb47deef804fd67bb90a9a521720d925641b.zip
Bug 546169 - Contribute WorkspaceSymbols to Quick Access
Change-Id: I410eaed51d51d3999c26119bcdc7c736cd9f10a6 Signed-off-by: Mickael Istria <mistria@redhat.com>
-rw-r--r--org.eclipse.lsp4e.debug/pom.xml2
-rw-r--r--org.eclipse.lsp4e.test/META-INF/MANIFEST.MF2
-rw-r--r--org.eclipse.lsp4e.test/pom.xml3
-rw-r--r--org.eclipse.lsp4e.tests.mock/pom.xml2
-rw-r--r--org.eclipse.lsp4e/META-INF/MANIFEST.MF4
-rw-r--r--org.eclipse.lsp4e/plugin.xml6
-rw-r--r--org.eclipse.lsp4e/pom.xml4
-rw-r--r--org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/WorkspaceSymbolQuickAccessElement.java52
-rw-r--r--org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/WorkspaceSymbolsQuickAccessProvider.java56
-rw-r--r--org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java1
-rw-r--r--org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties3
-rw-r--r--pom.xml4
-rw-r--r--repository/pom.xml2
-rw-r--r--target-platforms/target-platform-latest/pom.xml2
-rw-r--r--target-platforms/target-platform-latest/target-platform-latest.target4
-rw-r--r--target-platforms/target-platform-photon/pom.xml3
16 files changed, 133 insertions, 17 deletions
diff --git a/org.eclipse.lsp4e.debug/pom.xml b/org.eclipse.lsp4e.debug/pom.xml
index 0c206b8c..39326a8d 100644
--- a/org.eclipse.lsp4e.debug/pom.xml
+++ b/org.eclipse.lsp4e.debug/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>org.eclipse.lsp4e</groupId>
<artifactId>parent</artifactId>
- <version>0.8.0-SNAPSHOT</version>
+ <version>0.10.0-SNAPSHOT</version>
</parent>
<packaging>eclipse-plugin</packaging>
<version>0.9.1-SNAPSHOT</version>
diff --git a/org.eclipse.lsp4e.test/META-INF/MANIFEST.MF b/org.eclipse.lsp4e.test/META-INF/MANIFEST.MF
index 7a5dccfa..b94e8d8d 100644
--- a/org.eclipse.lsp4e.test/META-INF/MANIFEST.MF
+++ b/org.eclipse.lsp4e.test/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Tests for language server bundle (Incubation)
Bundle-SymbolicName: org.eclipse.lsp4e.test;singleton:=true
-Bundle-Version: 0.9.1.qualifier
+Bundle-Version: 0.10.0.qualifier
Fragment-Host: org.eclipse.lsp4e
Bundle-Vendor: Eclipse.org
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/org.eclipse.lsp4e.test/pom.xml b/org.eclipse.lsp4e.test/pom.xml
index a9812dca..d91340b8 100644
--- a/org.eclipse.lsp4e.test/pom.xml
+++ b/org.eclipse.lsp4e.test/pom.xml
@@ -4,10 +4,9 @@
<parent>
<groupId>org.eclipse.lsp4e</groupId>
<artifactId>parent</artifactId>
- <version>0.8.0-SNAPSHOT</version>
+ <version>0.10.0-SNAPSHOT</version>
</parent>
<artifactId>org.eclipse.lsp4e.test</artifactId>
- <version>0.9.1-SNAPSHOT</version>
<packaging>eclipse-test-plugin</packaging>
<properties>
diff --git a/org.eclipse.lsp4e.tests.mock/pom.xml b/org.eclipse.lsp4e.tests.mock/pom.xml
index e491fc4a..ba3ee8d8 100644
--- a/org.eclipse.lsp4e.tests.mock/pom.xml
+++ b/org.eclipse.lsp4e.tests.mock/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>org.eclipse.lsp4e</groupId>
<artifactId>parent</artifactId>
- <version>0.8.0-SNAPSHOT</version>
+ <version>0.10.0-SNAPSHOT</version>
</parent>
<artifactId>org.eclipse.lsp4e.tests.mock</artifactId>
<version>0.9.1-SNAPSHOT</version>
diff --git a/org.eclipse.lsp4e/META-INF/MANIFEST.MF b/org.eclipse.lsp4e/META-INF/MANIFEST.MF
index 493a4643..9971340c 100644
--- a/org.eclipse.lsp4e/META-INF/MANIFEST.MF
+++ b/org.eclipse.lsp4e/META-INF/MANIFEST.MF
@@ -2,14 +2,14 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Language Server Protocol client for Eclipse IDE (Incubation)
Bundle-SymbolicName: org.eclipse.lsp4e;singleton:=true
-Bundle-Version: 0.9.1.qualifier
+Bundle-Version: 0.10.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Require-Bundle: org.eclipse.core.runtime;bundle-version="3.12.0",
org.eclipse.equinox.common;bundle-version="3.8.0",
org.eclipse.jface.text;bundle-version="3.13.0",
org.eclipse.ui.workbench.texteditor;bundle-version="3.10.0",
org.eclipse.jface;bundle-version="3.12.0",
- org.eclipse.ui.workbench;bundle-version="3.108.0",
+ org.eclipse.ui.workbench;bundle-version="3.115.0",
org.eclipse.core.resources;bundle-version="3.11.0",
org.eclipse.ui;bundle-version="3.108.0",
org.eclipse.ui.ide,
diff --git a/org.eclipse.lsp4e/plugin.xml b/org.eclipse.lsp4e/plugin.xml
index 1f70aa86..2599a9cf 100644
--- a/org.eclipse.lsp4e/plugin.xml
+++ b/org.eclipse.lsp4e/plugin.xml
@@ -509,4 +509,10 @@
contentType="org.eclipse.core.runtime.text">
</reconciler>
</extension>
+ <extension
+ point="org.eclipse.ui.quickAccess">
+ <computer
+ class="org.eclipse.lsp4e.operations.symbols.WorkspaceSymbolsQuickAccessProvider"
+ name="Workspace Symbols"/>
+ </extension>
</plugin>
diff --git a/org.eclipse.lsp4e/pom.xml b/org.eclipse.lsp4e/pom.xml
index 0e85dcb7..57c6cb78 100644
--- a/org.eclipse.lsp4e/pom.xml
+++ b/org.eclipse.lsp4e/pom.xml
@@ -1,11 +1,11 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>org.eclipse.lsp4e</artifactId>
- <version>0.9.1-SNAPSHOT</version>
+ <version>0.10.0-SNAPSHOT</version>
<parent>
<groupId>org.eclipse.lsp4e</groupId>
<artifactId>parent</artifactId>
- <version>0.8.0-SNAPSHOT</version>
+ <version>0.10.0-SNAPSHOT</version>
</parent>
<packaging>eclipse-plugin</packaging>
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/WorkspaceSymbolQuickAccessElement.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/WorkspaceSymbolQuickAccessElement.java
new file mode 100644
index 00000000..477954e8
--- /dev/null
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/WorkspaceSymbolQuickAccessElement.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Red Hat Inc. and others.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Mickael Istria (Red Hat Inc.) - initial implementation
+ *******************************************************************************/
+package org.eclipse.lsp4e.operations.symbols;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.lsp4e.LSPEclipseUtils;
+import org.eclipse.lsp4e.outline.SymbolsLabelProvider;
+import org.eclipse.lsp4j.Range;
+import org.eclipse.lsp4j.SymbolInformation;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.quickaccess.QuickAccessElement;
+
+public class WorkspaceSymbolQuickAccessElement extends QuickAccessElement {
+
+ private static final SymbolsLabelProvider LABEL_PROVIDER = new SymbolsLabelProvider(false, false);
+ private final SymbolInformation symbol;
+
+ public WorkspaceSymbolQuickAccessElement(SymbolInformation symbol) {
+ this.symbol = symbol;
+ }
+
+ @Override
+ public String getLabel() {
+ return LABEL_PROVIDER.getText(symbol);
+ }
+
+ @Override
+ public ImageDescriptor getImageDescriptor() {
+ return ImageDescriptor.createFromImage(LABEL_PROVIDER.getImage(symbol));
+ }
+
+ @Override
+ public String getId() {
+ Range range = symbol.getLocation().getRange();
+ return symbol.getName() + '@' + symbol.getLocation().getUri() + '[' + range.getStart().getLine() + ',' + range.getStart().getCharacter() + ':' + range.getEnd().getLine() + ',' + range.getEnd().getCharacter() + ']';
+ }
+
+ @Override
+ public void execute() {
+ LSPEclipseUtils.openInEditor(symbol.getLocation(), PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage());
+ }
+
+}
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/WorkspaceSymbolsQuickAccessProvider.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/WorkspaceSymbolsQuickAccessProvider.java
new file mode 100644
index 00000000..27f3335e
--- /dev/null
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/WorkspaceSymbolsQuickAccessProvider.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2019 Red Hat Inc. and others.
+ * This program and the accompanying materials are made
+ * available under the terms of the Eclipse Public License 2.0
+ * which is available at https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Mickael Istria (Red Hat Inc.) - initial implementation
+ *******************************************************************************/
+package org.eclipse.lsp4e.operations.symbols;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.stream.Collectors;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.lsp4e.LanguageServiceAccessor;
+import org.eclipse.lsp4j.WorkspaceSymbolParams;
+import org.eclipse.lsp4j.services.LanguageServer;
+import org.eclipse.ui.quickaccess.IQuickAccessComputer;
+import org.eclipse.ui.quickaccess.QuickAccessElement;
+
+public class WorkspaceSymbolsQuickAccessProvider implements IQuickAccessComputer {
+
+
+ private List<@NonNull LanguageServer> usedLanguageServers;
+
+ @Override
+ public QuickAccessElement[] computeElements() {
+ this.usedLanguageServers = LanguageServiceAccessor.getActiveLanguageServers(serverCapabilities -> Boolean.TRUE.equals(serverCapabilities.getWorkspaceSymbolProvider()));
+ if (usedLanguageServers.isEmpty()) {
+ return new QuickAccessElement[0];
+ }
+ WorkspaceSymbolParams params = new WorkspaceSymbolParams(); // see https://github.com/Microsoft/language-server-protocol/issues/740
+ List<QuickAccessElement> res = Collections.synchronizedList(new ArrayList<>());
+ CompletableFuture.allOf(usedLanguageServers.stream().map(ls ->
+ ls.getWorkspaceService().symbol(params).thenAcceptAsync(symbols ->
+ res.addAll(symbols.stream().map(WorkspaceSymbolQuickAccessElement::new).collect(Collectors.toList()))
+ )).toArray(CompletableFuture[]::new)).join();
+ return res.toArray(new QuickAccessElement[res.size()]);
+ }
+
+ @Override
+ public void resetState() {
+ }
+
+ @Override
+ public boolean needsRefresh() {
+ return this.usedLanguageServers == null || !this.usedLanguageServers.equals(LanguageServiceAccessor.getActiveLanguageServers(serverCapabilities -> Boolean.TRUE.equals(serverCapabilities.getWorkspaceSymbolProvider())));
+ }
+
+}
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java
index 082a0085..624f7d8e 100644
--- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java
@@ -70,6 +70,7 @@ public class Messages extends NLS {
public static String LSSearchQuery_pluralReferences;
public static String enableDisableLSJob;
public static String edit_CreateFile;
+ public static String workspaceSymbols;
static {
NLS.initializeMessages("org.eclipse.lsp4e.ui.messages", Messages.class); //$NON-NLS-1$
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties
index 47bb392a..1f450895 100644
--- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties
@@ -73,4 +73,5 @@ LSSearchQuery_pluralReferences= ''{0}'' at [{1}:{2}] - {3} references in {4}ms
enableDisableLSJob=Enable/Disable Language Servers
-edit_CreateFile=Create file {0} \ No newline at end of file
+edit_CreateFile=Create file {0}
+workspaceSymbols=Workspace symbols \ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 6167001a..e3aecb57 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.eclipse.lsp4e</groupId>
<artifactId>parent</artifactId>
- <version>0.8.0-SNAPSHOT</version>
+ <version>0.10.0-SNAPSHOT</version>
<packaging>pom</packaging>
<prerequisites>
@@ -46,7 +46,7 @@
<artifact>
<groupId>${project.groupId}</groupId>
<artifactId>${target-config}</artifactId>
- <version>0.8.0-SNAPSHOT</version>
+ <version>0.10.0-SNAPSHOT</version>
</artifact>
</target>
<environments>
diff --git a/repository/pom.xml b/repository/pom.xml
index 55c0342e..251a2047 100644
--- a/repository/pom.xml
+++ b/repository/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>org.eclipse.lsp4e</groupId>
<artifactId>parent</artifactId>
- <version>0.8.0-SNAPSHOT</version>
+ <version>0.10.0-SNAPSHOT</version>
</parent>
<packaging>eclipse-repository</packaging>
</project>
diff --git a/target-platforms/target-platform-latest/pom.xml b/target-platforms/target-platform-latest/pom.xml
index 7874d148..b320a636 100644
--- a/target-platforms/target-platform-latest/pom.xml
+++ b/target-platforms/target-platform-latest/pom.xml
@@ -4,7 +4,7 @@
<parent>
<groupId>org.eclipse.lsp4e</groupId>
<artifactId>parent</artifactId>
- <version>0.8.0-SNAPSHOT</version>
+ <version>0.10.0-SNAPSHOT</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-target-definition</packaging>
diff --git a/target-platforms/target-platform-latest/target-platform-latest.target b/target-platforms/target-platform-latest/target-platform-latest.target
index ce00b455..00ae6001 100644
--- a/target-platforms/target-platform-latest/target-platform-latest.target
+++ b/target-platforms/target-platform-latest/target-platform-latest.target
@@ -5,7 +5,7 @@
<unit id="config.a.jre.javase" version="0.0.0"/>
<unit id="org.eclipse.sdk.ide" version="0.0.0"/>
<unit id="org.eclipse.jface.text.tests" version="0.0.0"/>
-<repository location="https://download.eclipse.org/eclipse/updates/4.11/R-4.11-201903070500/"/>
+<repository location="https://download.eclipse.org/eclipse/updates/4.12-I-builds/I20190508-1800/"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
<unit id="org.eclipse.mylyn.commons.notifications.feature.group" version="0.0.0"/>
@@ -22,7 +22,7 @@
<unit id="org.eclipse.lsp4j.jsonrpc" version="0.0.0"/>
<unit id="org.eclipse.lsp4j.debug" version="0.0.0"/>
<unit id="org.eclipse.lsp4j.jsonrpc.debug" version="0.0.0"/>
-<repository location="http://download.eclipse.org/lsp4j/updates/releases/0.7.0/"/>
+<repository location="http://download.eclipse.org/lsp4j/updates/releases/0.7.1/"/>
<!--repository location="http://services.typefox.io/open-source/jenkins/job/lsp4j/job/master/lastStableBuild/artifact/build/p2-repository/"/-->
</location>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
diff --git a/target-platforms/target-platform-photon/pom.xml b/target-platforms/target-platform-photon/pom.xml
index 60ca1d11..f38ad4f8 100644
--- a/target-platforms/target-platform-photon/pom.xml
+++ b/target-platforms/target-platform-photon/pom.xml
@@ -4,8 +4,9 @@
<parent>
<groupId>org.eclipse.lsp4e</groupId>
<artifactId>parent</artifactId>
- <version>0.8.0-SNAPSHOT</version>
+ <version>0.10.0-SNAPSHOT</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-target-definition</packaging>
+ <version>0.8.0-SNAPSHOT</version>
</project>

Back to the top