diff options
| author | Mickael Istria | 2019-05-06 10:26:10 +0000 |
|---|---|---|
| committer | Mickael Istria | 2019-05-09 10:21:16 +0000 |
| commit | 70c7eb47deef804fd67bb90a9a521720d925641b (patch) | |
| tree | 606a03048ef42f0d8bf324c6981fe0e27ad33c56 | |
| parent | e4c433cae5c6a6552d3b974ce3b401dc63ad1501 (diff) | |
| download | lsp4e-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.xml | 2 | ||||
| -rw-r--r-- | org.eclipse.lsp4e.test/META-INF/MANIFEST.MF | 2 | ||||
| -rw-r--r-- | org.eclipse.lsp4e.test/pom.xml | 3 | ||||
| -rw-r--r-- | org.eclipse.lsp4e.tests.mock/pom.xml | 2 | ||||
| -rw-r--r-- | org.eclipse.lsp4e/META-INF/MANIFEST.MF | 4 | ||||
| -rw-r--r-- | org.eclipse.lsp4e/plugin.xml | 6 | ||||
| -rw-r--r-- | org.eclipse.lsp4e/pom.xml | 4 | ||||
| -rw-r--r-- | org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/WorkspaceSymbolQuickAccessElement.java | 52 | ||||
| -rw-r--r-- | org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/WorkspaceSymbolsQuickAccessProvider.java | 56 | ||||
| -rw-r--r-- | org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/Messages.java | 1 | ||||
| -rw-r--r-- | org.eclipse.lsp4e/src/org/eclipse/lsp4e/ui/messages.properties | 3 | ||||
| -rw-r--r-- | pom.xml | 4 | ||||
| -rw-r--r-- | repository/pom.xml | 2 | ||||
| -rw-r--r-- | target-platforms/target-platform-latest/pom.xml | 2 | ||||
| -rw-r--r-- | target-platforms/target-platform-latest/target-platform-latest.target | 4 | ||||
| -rw-r--r-- | target-platforms/target-platform-photon/pom.xml | 3 |
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 @@ -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> |
