From 734250881237ca556858ae68caa155b77347ae17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9lios=20GILLES?= Date: Mon, 27 Nov 2023 17:10:17 +0100 Subject: [PATCH] Add ability to add source/resource folder outside of the project basedir using linked folder --- .../add-source-resource/parent/java/A.java | 5 ++ .../parent/resources/res.txt | 0 .../parent/test-resources/test.txt | 0 .../parent/test/ATest.java | 5 ++ .../add-source-resource/submoduleA/pom.xml | 80 +++++++++++++++++++ .../m2e/jdt/tests/JavaConfigurationTest.java | 6 ++ .../AbstractJavaProjectConfigurator.java | 47 ++++++++--- 7 files changed, 131 insertions(+), 12 deletions(-) create mode 100644 org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/java/A.java create mode 100644 org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/resources/res.txt create mode 100644 org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/test-resources/test.txt create mode 100644 org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/test/ATest.java create mode 100644 org.eclipse.m2e.jdt.tests/projects/add-source-resource/submoduleA/pom.xml diff --git a/org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/java/A.java b/org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/java/A.java new file mode 100644 index 0000000000..396f5b59a4 --- /dev/null +++ b/org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/java/A.java @@ -0,0 +1,5 @@ +import java.io.Serializable; + +class ATest implements Serializable { + +} diff --git a/org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/resources/res.txt b/org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/resources/res.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/test-resources/test.txt b/org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/test-resources/test.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/test/ATest.java b/org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/test/ATest.java new file mode 100644 index 0000000000..396f5b59a4 --- /dev/null +++ b/org.eclipse.m2e.jdt.tests/projects/add-source-resource/parent/test/ATest.java @@ -0,0 +1,5 @@ +import java.io.Serializable; + +class ATest implements Serializable { + +} diff --git a/org.eclipse.m2e.jdt.tests/projects/add-source-resource/submoduleA/pom.xml b/org.eclipse.m2e.jdt.tests/projects/add-source-resource/submoduleA/pom.xml new file mode 100644 index 0000000000..061c543cd3 --- /dev/null +++ b/org.eclipse.m2e.jdt.tests/projects/add-source-resource/submoduleA/pom.xml @@ -0,0 +1,80 @@ + + + 4.0.0 + foo.bar + add-source-resource + 0.0.1-SNAPSHOT + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.10.1 + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + java + generate-sources + + add-source + + + + ../parent/java + + + + + test + generate-sources + + add-test-source + + + + ../parent/test + + + + + resources + generate-resources + + add-resource + + + + + ../parent/resources + + + + + + test-resources + generate-resources + + add-test-resource + + + + + ../parent/test-resources + + + + + + + + + diff --git a/org.eclipse.m2e.jdt.tests/src/org/eclipse/m2e/jdt/tests/JavaConfigurationTest.java b/org.eclipse.m2e.jdt.tests/src/org/eclipse/m2e/jdt/tests/JavaConfigurationTest.java index e56ccb6798..57285384fb 100644 --- a/org.eclipse.m2e.jdt.tests/src/org/eclipse/m2e/jdt/tests/JavaConfigurationTest.java +++ b/org.eclipse.m2e.jdt.tests/src/org/eclipse/m2e/jdt/tests/JavaConfigurationTest.java @@ -132,6 +132,12 @@ public void testComplianceVsEnablePreviewSettings() throws CoreException, IOExce assertEquals(JavaCore.ENABLED, project.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, false)); assertEquals(JavaCore.IGNORE, project.getOption(JavaCore.COMPILER_PB_REPORT_PREVIEW_FEATURES, false)); } + + @Test + public void testAddSourceResource() throws CoreException, IOException, InterruptedException { + IJavaProject project = importResourceProject("/projects/add-source-resource/submoduleA/pom.xml"); + assertEquals(4, project.getRawClasspath().length); + } // --- utility methods --- private static final Predicate TEST_SOURCES = cp -> cp.isTest() diff --git a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java index 593febb513..5550ed90cc 100644 --- a/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java +++ b/org.eclipse.m2e.jdt/src/org/eclipse/m2e/jdt/internal/AbstractJavaProjectConfigurator.java @@ -14,6 +14,7 @@ package org.eclipse.m2e.jdt.internal; import java.io.File; +import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -33,6 +34,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jdt.core.IAccessRule; import org.eclipse.jdt.core.IClasspathAttribute; @@ -134,6 +136,9 @@ public abstract class AbstractJavaProjectConfigurator extends AbstractProjectCon protected static final String DEFAULT_COMPILER_LEVEL = "1.5"; //$NON-NLS-1$ + private static final QualifiedName LINKED_RESOURCE_PROPERTY = new QualifiedName(MavenJdtPlugin.PLUGIN_ID, + "linkedSource"); + @Override public void configure(ProjectConfigurationRequest request, IProgressMonitor monitor) throws CoreException { IProject project = request.mavenProjectFacade().getProject(); @@ -361,6 +366,9 @@ protected void addProjectSourceFolders(IClasspathDescriptor classpath, Map