diff --git a/org.eclipse.lsp4e.test/META-INF/MANIFEST.MF b/org.eclipse.lsp4e.test/META-INF/MANIFEST.MF index d9ad4b604..e74e67ce7 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.16.10.qualifier +Bundle-Version: 0.16.11.qualifier Fragment-Host: org.eclipse.lsp4e Bundle-Vendor: Eclipse LSP4E Bundle-RequiredExecutionEnvironment: JavaSE-21 diff --git a/org.eclipse.lsp4e.test/pom.xml b/org.eclipse.lsp4e.test/pom.xml index 9347b66c7..46b3c2210 100644 --- a/org.eclipse.lsp4e.test/pom.xml +++ b/org.eclipse.lsp4e.test/pom.xml @@ -8,7 +8,7 @@ org.eclipse.lsp4e.test eclipse-test-plugin - 0.16.10-SNAPSHOT + 0.16.11-SNAPSHOT diff --git a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java index 767a4c3bd..99d238416 100644 --- a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java +++ b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java @@ -13,6 +13,7 @@ *******************************************************************************/ package org.eclipse.lsp4e.test.edit; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -81,6 +82,7 @@ import org.junit.jupiter.api.io.TempDir; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.MethodSource; public class LSPEclipseUtilsTest extends AbstractTestWithProject { @@ -637,5 +639,18 @@ public static Stream getHtmlDocString() { void getHtmlDocString(Either<@Nullable String, MarkupContent> arg, String expected) throws Exception { assertEquals(expected, LSPEclipseUtils.getHtmlDocString(arg)); } + + @ParameterizedTest + @CsvSource({ + "file:///C:/Users/username/path/to/SomeDir/SomeType.hpp, SomeType.hpp", + "file:///home/username/path/to/SomeDir/SomeType.hpp, SomeType.hpp", + "file:///," + }) + void testReadingFileNameFromUri(String uriText, String expectedFileName) { + URI uri = URI.create(uriText); + + String actualFileName = assertDoesNotThrow(() -> LSPEclipseUtils.getFileName(uri)); + assertEquals(expectedFileName, actualFileName); + } } diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java index 9a1a06113..fdd665579 100644 --- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java +++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java @@ -431,6 +431,15 @@ public static CallHierarchyPrepareParams toCallHierarchyPrepareParams(int offset return toPath(toBuffer(document)); } + public static @Nullable String getFileName(URI uri) { + try { + return java.nio.file.Path.of(uri).getFileName().toString(); + } catch (Exception e) { + LanguageServerPlugin.logWarning("Failed to parse file name from URI " + uri, e); //$NON-NLS-1$ + } + return null; + } + public static int toEclipseMarkerSeverity(@Nullable DiagnosticSeverity lspSeverity) { if (lspSeverity == null) { // if severity is empty it is up to the client to interpret diagnostics diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/internal/SymbolIconProviderRegistry.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/internal/SymbolIconProviderRegistry.java index 05349e4c4..1ae1ccb37 100644 --- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/internal/SymbolIconProviderRegistry.java +++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/operations/symbols/internal/SymbolIconProviderRegistry.java @@ -12,7 +12,6 @@ package org.eclipse.lsp4e.operations.symbols.internal; import java.net.URI; -import java.nio.file.Path; import java.util.HashMap; import java.util.Map; @@ -22,6 +21,7 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.lsp4e.LSPEclipseUtils; import org.eclipse.lsp4e.LanguageServerPlugin; import org.eclipse.lsp4e.outline.SymbolsModel.DocumentSymbolWithURI; import org.eclipse.lsp4e.ui.SymbolIconProvider; @@ -106,11 +106,8 @@ private SymbolIconProvider getIconProvider(Object symbol) { return defaultIconProvider; } - String fileName = null; - try { - fileName = Path.of(uri.getPath()).getFileName().toString(); - } catch (Exception e) { - LanguageServerPlugin.logWarning("Failed to parse file name from URI " + uri, e); //$NON-NLS-1$ + String fileName = LSPEclipseUtils.getFileName(uri); + if (fileName == null) { return defaultIconProvider; } @@ -146,8 +143,8 @@ private SymbolIconProvider getIconProvider(Object symbol) { } try { - return URI.create(uri); - } catch (IllegalArgumentException e) { + return LSPEclipseUtils.toUri(uri); + } catch (Exception e) { LanguageServerPlugin.logWarning("Failed to parse URI " + uri, e); //$NON-NLS-1$ return null; }