diff --git a/eclipse-distribution/pom.xml b/eclipse-distribution/pom.xml index aa4cf4f5c..92866827f 100644 --- a/eclipse-distribution/pom.xml +++ b/eclipse-distribution/pom.xml @@ -54,10 +54,10 @@ nightly ${dist.type}/${dist.key}/${dist.project}/${dist.pathpostfix} - nightly - ${dist.dependencies-version-path} - ${dist.dependencies-version-path} - ${dist.dependencies-version-path} + + http://dist.springsource.com/snapshot/TOOLS/eclipse-integration-commons/nightly + http://dist.springframework.org/snapshot/IDE/nightly + http://dist.springsource.com/${dist.type}/TOOLS/sts4-language-server-integrations/${sts4-language-servers-version} 0.26.0 UTF-8 @@ -72,6 +72,8 @@ ${dist.type}/TOOLS/sts4/nightly/${dist.target.major} ${dist.type}/STS4/nightly/dist/${dist.target.major} false + + nightly @@ -82,6 +84,8 @@ ${dist.type}/TOOLS/sts4/update/${unqualifiedVersion}.${p2.qualifier}/${dist.target.major} ${dist.type}/STS4/${unqualifiedVersion}.${p2.qualifier}/dist/${dist.target.major} true + + today @@ -92,6 +96,8 @@ ${dist.type}/TOOLS/sts4/update/${unqualifiedVersion}.${p2.qualifier}/${dist.target.major} ${dist.type}/STS4/${unqualifiedVersion}.${p2.qualifier}/dist/${dist.target.major} true + + today @@ -213,25 +219,20 @@ - - spring-boot-language-servers - p2 - http://dist.springsource.com/${dist.type}/TOOLS/sts4-language-servers/${dist.springboot-language-servers-pathpostfix} - spring-boot-language-server-integrations p2 - http://dist.springsource.com/${dist.type}/TOOLS/sts4-language-server-integrations/${dist.springboot-language-servers-pathpostfix} + ${sts4-language-servers-p2-repo} springide p2 - http://dist.springframework.org/${dist.type}/IDE/${dist.springide-pathpostfix} + ${springide-p2-repo} eclipse-integration-commons p2 - http://dist.springsource.com/${dist.type}/TOOLS/eclipse-integration-commons/${dist.eclipse-integration-commons-version} + ${eclipsecommons-p2-repo} egit-github diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialog.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialog.java index 88255051d..b351f1fa1 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialog.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/GotoSymbolDialog.java @@ -14,6 +14,7 @@ package org.springframework.tooling.ls.eclipse.gotosymbol.dialogs; import java.time.Duration; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; @@ -26,8 +27,11 @@ import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.lsp4e.LSPEclipseUtils; import org.eclipse.lsp4e.outline.SymbolsLabelProvider; +import org.eclipse.lsp4j.Location; import org.eclipse.lsp4j.SymbolInformation; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; @@ -46,6 +50,7 @@ import org.eclipse.ui.texteditor.ITextEditor; import org.springframework.tooling.ls.eclipse.gotosymbol.GotoSymbolPlugin; import org.springsource.ide.eclipse.commons.livexp.core.UIValueListener; import org.springsource.ide.eclipse.commons.livexp.ui.Disposable; +import org.springsource.ide.eclipse.commons.livexp.ui.Stylers; import org.springsource.ide.eclipse.commons.livexp.ui.util.SwtConnect; @SuppressWarnings("restriction") @@ -78,7 +83,7 @@ public class GotoSymbolDialog extends PopupDialog { } } - private static class GotoSymbolsLabelProvider extends SymbolsLabelProvider { + private class GotoSymbolsLabelProvider extends SymbolsLabelProvider { @Override protected int getMaxSeverity(IResource resource, SymbolInformation symbolInformation) throws CoreException, BadLocationException { @@ -91,8 +96,25 @@ public class GotoSymbolDialog extends PopupDialog { } return maxSeverity; } + + @Override + public StyledString getStyledText(Object element) { + StyledString s = super.getStyledText(element); + if (element instanceof SymbolInformation) { + Optional workspacePath = GotoSymbolDialog.this + .getWorkspaceLocation((SymbolInformation) element); + if (workspacePath.isPresent()) { + s.append(" -- [", Stylers.NULL); + s.append(workspacePath.get(), Stylers.NULL); + s.append("]", Stylers.NULL); + } + } + return s; + } } + private static final Point DEFAULT_SIZE = new Point(280, 300); + private GotoSymbolDialogModel model; private List disposables = new ArrayList<>(); private ITextEditor fTextEditor; @@ -197,6 +219,21 @@ public class GotoSymbolDialog extends PopupDialog { list.addDoubleClickListener(e -> performOk(list)); } + private Optional getWorkspaceLocation(SymbolInformation symbolInformation) { + String val = null; + + if (!model.fromFileProvider(symbolInformation)) { + Location location = symbolInformation.getLocation(); + + IResource targetResource = LSPEclipseUtils.findResourceFor(location.getUri()); + if (targetResource != null && targetResource.getFullPath() != null) { + val = targetResource.getFullPath().toString(); + } + } + + return val != null ? Optional.of(val) : Optional.empty(); + } + private void performOk(TreeViewer list) { if (model.performOk(getTarget(list))) { close(); @@ -289,20 +326,22 @@ public class GotoSymbolDialog extends PopupDialog { super.configureShell(shell); Control control = fTextEditor.getAdapter(Control.class); + Point dialogueSize = DEFAULT_SIZE; if (control != null) { //Set size relative to editor's size. - Point size = new Point(control.getBounds().width/3, control.getBounds().height/2); - shell.setSize(size); + dialogueSize = computeDialogueSize(control); if (alignRight) { shell.setLocation(control.toDisplay(control.getBounds().width - shell.getSize().x, control.getLocation().y)); } else { //centered on the editor - shell.setLocation(control.toDisplay(control.getBounds().width/3, control.getBounds().height/4)); + shell.setLocation(control.toDisplay(control.getBounds().width/4, control.getBounds().height/4)); } - } else { - // fallback - shell.setSize(280, 300); - } + } + shell.setSize(dialogueSize); + } + + protected Point computeDialogueSize(Control control) { + return new Point(control.getBounds().width, control.getBounds().height/2); } // /** 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 562ddef1f..755d4644b 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 @@ -182,6 +182,14 @@ public class GotoSymbolDialogModel { public boolean performOk(SymbolInformation selection) { return this.okHandler.performOk(selection); } + + public boolean fromFileProvider(SymbolInformation symbolInformation) { + SymbolsProvider sp = currentSymbolsProvider.getValue(); + if (sp!=null) { + return sp.fromFile(symbolInformation); + } + return false; + } } diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/InFileSymbolsProvider.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/InFileSymbolsProvider.java index d5ea5b417..47f185f80 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/InFileSymbolsProvider.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/InFileSymbolsProvider.java @@ -68,4 +68,13 @@ public class InFileSymbolsProvider implements SymbolsProvider { public String getName() { return "Symbols in File"; } + + @Override + public boolean fromFile(SymbolInformation symbol) { + if (symbol != null && symbol.getLocation() != null) { + String symbolUri = symbol.getLocation().getUri(); + return info.getFileUri().toString().equals(symbolUri); + } + return false; + } } diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/InWorkspaceSymbolsProvider.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/InWorkspaceSymbolsProvider.java index a5b1af758..331b65e72 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/InWorkspaceSymbolsProvider.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/InWorkspaceSymbolsProvider.java @@ -64,7 +64,6 @@ public class InWorkspaceSymbolsProvider implements SymbolsProvider { // really use this with a single language server anyways. WorkspaceSymbolParams params = new WorkspaceSymbolParams(query); - ImmutableList.Builder allSymbols = ImmutableList.builder(); Flux symbols = Flux.fromIterable(this.languageServers) .flatMap(server -> Mono.fromFuture(server.getWorkspaceService().symbol(params)) .timeout(TIMEOUT) @@ -108,4 +107,8 @@ public class InWorkspaceSymbolsProvider implements SymbolsProvider { return null; } + @Override + public boolean fromFile(SymbolInformation symbol) { + return false; + } } diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/SymbolsProvider.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/SymbolsProvider.java index a655a6e6a..432f331d3 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/SymbolsProvider.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.gotosymbol/src/org/springframework/tooling/ls/eclipse/gotosymbol/dialogs/SymbolsProvider.java @@ -22,4 +22,11 @@ import org.eclipse.lsp4j.SymbolInformation; public interface SymbolsProvider { String getName(); Collection fetchFor(String query) throws Exception; + /** + * True if the symbol information is provided from a file provider (a file is the provider of the symbols). False otherwise + * @param symbol + * @return True if the symbol information is provided from a file provider (a file is the provider of the symbols). False otherwise + + */ + boolean fromFile(SymbolInformation symbol); } \ No newline at end of file diff --git a/eclipse-language-servers/org.springframework.tooling.ls.integration.repository/category.xml b/eclipse-language-servers/org.springframework.tooling.ls.integration.repository/category.xml index efd9b37a9..d52148fa4 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.integration.repository/category.xml +++ b/eclipse-language-servers/org.springframework.tooling.ls.integration.repository/category.xml @@ -1,29 +1,29 @@ - + - + - + - + - + - + - + diff --git a/eclipse-language-servers/org.springframework.tooling.ls.integration.repository/pom.xml b/eclipse-language-servers/org.springframework.tooling.ls.integration.repository/pom.xml index fc3e433a7..8bd9cee5e 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.integration.repository/pom.xml +++ b/eclipse-language-servers/org.springframework.tooling.ls.integration.repository/pom.xml @@ -12,14 +12,7 @@ eclipse-repository - ${accessKey} - ${secretKey} - dist.springsource.com - snapshot - TOOLS sts4-language-server-integrations - nightly - ${dist.type}/${dist.key}/${dist.project}/${dist.pathpostfix} diff --git a/eclipse-language-servers/org.springframework.tooling.ls.repository/category.xml b/eclipse-language-servers/org.springframework.tooling.ls.repository/category.xml index 83d9101a6..0f3869f25 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.repository/category.xml +++ b/eclipse-language-servers/org.springframework.tooling.ls.repository/category.xml @@ -1,9 +1,9 @@ - + - + diff --git a/eclipse-language-servers/org.springframework.tooling.ls.repository/pom.xml b/eclipse-language-servers/org.springframework.tooling.ls.repository/pom.xml index 723538b3d..f83401228 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.repository/pom.xml +++ b/eclipse-language-servers/org.springframework.tooling.ls.repository/pom.xml @@ -12,14 +12,7 @@ eclipse-repository - ${accessKey} - ${secretKey} - dist.springsource.com - snapshot - TOOLS sts4-language-servers - nightly - ${dist.type}/${dist.key}/${dist.project}/${dist.pathpostfix} diff --git a/eclipse-language-servers/pom.xml b/eclipse-language-servers/pom.xml index 71aafefdf..a0f1f3011 100644 --- a/eclipse-language-servers/pom.xml +++ b/eclipse-language-servers/pom.xml @@ -68,9 +68,41 @@ 0.26.0 UTF-8 + + ${accessKey} + ${secretKey} + dist.springsource.com + TOOLS + ${dist.type}/${dist.key}/${dist.project}/${dist.version} + + + + snapshot + + snapshot + nightly + + + + + milestone + + milestone + today + + + + + release + + release + today + + + e47 @@ -298,7 +330,7 @@ tycho-packaging-plugin ${tycho-version} - yyyyMMddHHmm-'${p2.qualifier}' + yyyyMMddHHmm true false diff --git a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/DelegatingCachedClasspath.java b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/DelegatingCachedClasspath.java index addf5d95f..4882e1e73 100644 --- a/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/DelegatingCachedClasspath.java +++ b/headless-services/commons/commons-java/src/main/java/org/springframework/ide/vscode/commons/java/DelegatingCachedClasspath.java @@ -205,6 +205,9 @@ public class DelegatingCachedClasspath implements IClasspa return false; } catch (Exception e) { cachedData.set(new ClasspathData(null, Collections.emptySet(), Collections.emptySet(), null)); + if (cacheFile != null && cacheFile.exists()) { + cacheFile.delete(); + } throw e; } } diff --git a/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/MavenProjectCacheTest.java b/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/MavenProjectCacheTest.java index 646226841..29c42cd9c 100644 --- a/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/MavenProjectCacheTest.java +++ b/headless-services/commons/commons-maven/src/test/java/org/springframework/ide/vscode/commons/maven/MavenProjectCacheTest.java @@ -32,6 +32,7 @@ import java.nio.file.FileVisitOption; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Comparator; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -84,8 +85,8 @@ public class MavenProjectCacheTest { Path cacheFolerPath = testProjectPath.resolve(IJavaProject.PROJECT_CACHE_FOLDER); if (cacheFolerPath.toFile().exists()) { - Files.walk(cacheFolerPath, FileVisitOption.FOLLOW_LINKS).map(Path::toFile).forEach(File::delete); - Files.delete(cacheFolerPath); + Files.walk(cacheFolerPath, FileVisitOption.FOLLOW_LINKS).sorted(Comparator.reverseOrder()).map(Path::toFile) + .forEach(File::delete); } } @@ -252,5 +253,7 @@ public class MavenProjectCacheTest { }).get(10, TimeUnit.SECONDS); progressDone.set(false); verify(diagnosticService, times(1)).diagnosticEvent(any(ShowMessageException.class)); + assertTrue(project.getClasspath().getClasspathEntries().isEmpty()); + assertFalse(cacheFolder.resolve(DelegatingCachedClasspath.CLASSPATH_DATA_CACHE_FILE).toFile().exists()); } }