Bug 546081 - IllegalArgumentException in SymbolsLabelProvider
- improve robustness of SymbolsLabelProvider
- catch IllegalArgumentException if language server provides invalid
location URI
Change-Id: I0486fe932835c26308f6e7a43c4bc350b9ddbda4
Signed-off-by: Markus Ofterdinger <markus.ofterdinger@sap.com>
diff --git a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/outline/SymbolsLabelProviderTest.java b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/outline/SymbolsLabelProviderTest.java
index 2869770..2aa20e1 100644
--- a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/outline/SymbolsLabelProviderTest.java
+++ b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/outline/SymbolsLabelProviderTest.java
@@ -27,7 +27,8 @@
@Rule public AllCleanRule clear = new AllCleanRule();
private static final Location LOCATION = new Location("path/to/foo", new Range(new Position(0,0), new Position(1,1)));
-
+ private static final Location INVALID_LOCATION = new Location("file:://///invalid_location_uri", new Range(new Position(0,0), new Position(1,1)));
+
@Test
public void testShowKind() {
SymbolsLabelProvider labelProvider = new SymbolsLabelProvider(false, true);
@@ -48,11 +49,18 @@
SymbolInformation info = new SymbolInformation("Foo", SymbolKind.Class, LOCATION);
assertEquals("Foo path/to/foo", labelProvider.getText(info));
}
-
+
@Test
public void testShowNeither() {
SymbolsLabelProvider labelProvider = new SymbolsLabelProvider(false, false);
SymbolInformation info = new SymbolInformation("Foo", SymbolKind.Class, LOCATION);
assertEquals("Foo", labelProvider.getText(info));
}
+
+ @Test
+ public void testGetStyledTextInalidLocationURI() {
+ SymbolsLabelProvider labelProvider = new SymbolsLabelProvider(false, false);
+ SymbolInformation info = new SymbolInformation("Foo", SymbolKind.Class, INVALID_LOCATION);
+ assertEquals("Foo", labelProvider.getStyledText(info).getString());
+ }
}
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/outline/SymbolsLabelProvider.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/outline/SymbolsLabelProvider.java
index ab95f88..282ae39 100644
--- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/outline/SymbolsLabelProvider.java
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/outline/SymbolsLabelProvider.java
@@ -199,7 +199,11 @@
if (element instanceof SymbolInformation) {
name = ((SymbolInformation) element).getName();
kind = ((SymbolInformation) element).getKind();
- location = URI.create(((SymbolInformation) element).getLocation().getUri());
+ try {
+ location = URI.create(((SymbolInformation) element).getLocation().getUri());
+ } catch (IllegalArgumentException e) {
+ LanguageServerPlugin.logError("Invalid URI: " + ((SymbolInformation) element).getLocation().getUri(), e); //$NON-NLS-1$
+ }
} else if (element instanceof DocumentSymbol) {
name = ((DocumentSymbol) element).getName();
kind = ((DocumentSymbol) element).getKind();