diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/commands/ProjectCommand.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/commands/ProjectCommand.java index 844e5238dd..47afbdc5ea 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/commands/ProjectCommand.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/commands/ProjectCommand.java @@ -271,13 +271,13 @@ public static IJavaProject getJavaProjectFromUri(String uri) throws CoreExceptio // For multi-module scenario Arrays.sort(containers, (Comparator) (IContainer a, IContainer b) -> { - return a.getFullPath().toPortableString().length() - b.getFullPath().toPortableString().length(); + return a.getFullPath().segmentCount() - b.getFullPath().segmentCount(); }); IJavaElement targetElement = null; for (IContainer container : containers) { targetElement = JavaCore.create(container.getProject()); - if (targetElement != null) { + if (targetElement != null && targetElement.exists()) { break; } } diff --git a/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/module3/pom.xml b/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/module3/pom.xml new file mode 100644 index 0000000000..83fc2253fe --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/module3/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + org.eclipse + multimodule3 + 1.0-SNAPSHOT + + org.eclipse + this_is_a_very_long_module_name + 1.0-SNAPSHOT + this_is_a_very_long_module_name + + UTF-8 + + + + junit + junit + 4.13 + test + + + diff --git a/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/module3/src/main/java/org/eclipse/App.java b/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/module3/src/main/java/org/eclipse/App.java new file mode 100644 index 0000000000..743a1f9d99 --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/module3/src/main/java/org/eclipse/App.java @@ -0,0 +1,9 @@ +package org.eclipse; + +public class App { + public static final String GREETING = "Hello World!"; + + public static void main(String[] args) { + System.out.println(GREETING); + } +} diff --git a/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/module3/src/test/java/org/eclipse/AppTest.java b/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/module3/src/test/java/org/eclipse/AppTest.java new file mode 100644 index 0000000000..8c2a2b1a6b --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/module3/src/test/java/org/eclipse/AppTest.java @@ -0,0 +1,12 @@ +package org.eclipse; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class AppTest { + @Test + public void testApp() { + assertTrue(true); + } +} diff --git a/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/pom.xml b/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/pom.xml index b58ef54174..5a0fcca6ee 100644 --- a/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/pom.xml +++ b/org.eclipse.jdt.ls.tests/projects/maven/multimodule3/pom.xml @@ -11,6 +11,7 @@ module1 module2 + module3 diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/commands/ProjectCommandTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/commands/ProjectCommandTest.java index 25815cf9be..14d410da8b 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/commands/ProjectCommandTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/commands/ProjectCommandTest.java @@ -130,6 +130,19 @@ public void testGetMavenProjectFromUri() throws Exception { assertNotNull("Can get project from project uri", javaProject); } + @Test + public void testGetMultiModuleMavenProjectFromUri() throws Exception { + importProjects("maven/multimodule3"); + IProject project = WorkspaceHelper.getProject("this_is_a_very_long_module_name"); + String javaSource = project.getFile("src/main/org/eclipse/App.java").getLocationURI().toString(); + IJavaProject javaProject = ProjectCommand.getJavaProjectFromUri(javaSource); + assertEquals("this_is_a_very_long_module_name", javaProject.getElementName()); + + String projectUri = project.getLocationURI().toString(); + javaProject = ProjectCommand.getJavaProjectFromUri(projectUri); + assertEquals("this_is_a_very_long_module_name", javaProject.getElementName()); + } + @Test public void testGetInvisibleProjectFromUri() throws Exception { IProject project = copyAndImportFolder("singlefile/simple", "src/App.java");