From b8d79a92dc7c7e86275523bccbfa2e677d22ed03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=B5=8F=E2=82=87=E2=82=85=C2=BE=C2=BD=E1=B4=AE=CE=A0?= =?UTF-8?q?=E2=82=85=E1=B4=B9=CE=BC=E2=82=83=CE=9B=E1=B5=8F1=E2=82=92?= =?UTF-8?q?=E2=82=8D=E2=85=92=CE=B2=E1=B4=B05=E1=B5=9B?= Date: Wed, 11 Jun 2025 06:56:39 -0500 Subject: [PATCH] add proper module support which has been kissing for over 8 years now, cant believe im having to fix that old yacht owning bastards crap --- .../AbstractJavaProjectConfigurator.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) 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 c52709a09..9bb86bb49 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 @@ -28,6 +28,7 @@ import java.util.Set; import java.util.function.Predicate; import java.util.stream.Stream; +import java.util.Arrays; import org.osgi.framework.Version; import org.slf4j.Logger; @@ -41,6 +42,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jdt.core.IAccessRule; @@ -167,7 +169,7 @@ public void configure(ProjectConfigurationRequest request, IProgressMonitor moni String executionEnvironmentId = getExecutionEnvironmentId(options); addJREClasspathContainer(classpath, executionEnvironmentId); - addMavenClasspathContainer(classpath); + addMavenClasspathContainer(javaProject, classpath); addCustomClasspathEntries(javaProject, classpath); @@ -259,8 +261,8 @@ private IExecutionEnvironment getExecutionEnvironment(String environmentId) { environmentId); return null; } - - protected void addMavenClasspathContainer(IClasspathDescriptor classpath) { + + protected void addMavenClasspathContainer(IJavaProject javaProject, IClasspathDescriptor classpath) { List descriptors = classpath.getEntryDescriptors(); List accessRules = new ArrayList<>(); boolean isExported = false; @@ -278,7 +280,15 @@ protected void addMavenClasspathContainer(IClasspathDescriptor classpath) { // ensure the external annotation path is kept IClasspathAttribute[] externalAnnotations = readExternalAnnotationAttributes(classpath, p -> MavenClasspathHelpers.MAVEN_CLASSPATH_CONTAINER_PATH.equals(p.getPath())); - IClasspathEntry cpe = MavenClasspathHelpers.getDefaultContainerEntry(externalAnnotations); + + // Add module attribute if project has module-info.java + IClasspathAttribute[] attributes = externalAnnotations; + if (ModuleSupport.getModuleInfo(javaProject, new NullProgressMonitor()) != null) { + attributes = Arrays.copyOf(externalAnnotations, externalAnnotations.length + 1); + attributes[externalAnnotations.length] = JavaCore.newClasspathAttribute(IClasspathAttribute.MODULE, "true"); + } + + IClasspathEntry cpe = MavenClasspathHelpers.getDefaultContainerEntry(attributes); // add new entry without removing existing entries first, see bug398121 IClasspathEntryDescriptor entryDescriptor = classpath.addEntry(cpe); @@ -288,6 +298,8 @@ protected void addMavenClasspathContainer(IClasspathDescriptor classpath) { } } + + private static IClasspathAttribute[] readExternalAnnotationAttributes(IClasspathDescriptor classpath, Predicate annotationSourceEntry) { Optional annotationPath = classpath.getEntryDescriptors().stream().filter(annotationSourceEntry)