You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2024/01/10 12:53:48 UTC

(maven) branch master updated: [MNG-8001] Expose CoreRealm internally (#1369)

This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new 2c06637fb4 [MNG-8001] Expose CoreRealm internally (#1369)
2c06637fb4 is described below

commit 2c06637fb4de806abc03bcf1a15718b53210ec74
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Wed Jan 10 13:53:42 2024 +0100

    [MNG-8001] Expose CoreRealm internally (#1369)
    
    Expose internally (not for plugin API) CoreRealm.
    
    ---
    
    https://issues.apache.org/jira/browse/MNG-8001
---
 .../maven/classrealm/DefaultClassRealmManager.java |  9 ++--
 .../extension/internal/CoreExportsProvider.java    |  6 +--
 .../CoreRealm.java}                                | 54 +++++++++++-----------
 .../impl/internal/DefaultCoreRealm.java}           | 27 ++++-------
 .../classrealm/DefaultClassRealmManagerTest.java   |  3 +-
 5 files changed, 46 insertions(+), 53 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java b/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
index 512e7cae8f..14bec0c1c0 100644
--- a/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
+++ b/maven-core/src/main/java/org/apache/maven/classrealm/DefaultClassRealmManager.java
@@ -36,10 +36,9 @@ import java.util.TreeMap;
 import org.apache.maven.artifact.ArtifactUtils;
 import org.apache.maven.classrealm.ClassRealmRequest.RealmType;
 import org.apache.maven.extension.internal.CoreExports;
+import org.apache.maven.internal.CoreRealm;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.Plugin;
-import org.codehaus.plexus.MutablePlexusContainer;
-import org.codehaus.plexus.PlexusContainer;
 import org.codehaus.plexus.classworlds.ClassWorld;
 import org.codehaus.plexus.classworlds.realm.ClassRealm;
 import org.codehaus.plexus.classworlds.realm.DuplicateRealmException;
@@ -87,9 +86,9 @@ public class DefaultClassRealmManager implements ClassRealmManager {
 
     @Inject
     public DefaultClassRealmManager(
-            PlexusContainer container, List<ClassRealmManagerDelegate> delegates, CoreExports exports) {
-        this.world = ((MutablePlexusContainer) container).getClassWorld();
-        this.containerRealm = container.getContainerRealm();
+            CoreRealm coreRealm, List<ClassRealmManagerDelegate> delegates, CoreExports exports) {
+        this.world = coreRealm.getClassWorld();
+        this.containerRealm = coreRealm.getRealm();
         this.delegates = delegates;
 
         Map<String, ClassLoader> foreignImports = exports.getExportedPackages();
diff --git a/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java b/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java
index 9c9d647289..0f0b510482 100644
--- a/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java
+++ b/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java
@@ -25,7 +25,7 @@ import javax.inject.Singleton;
 
 import java.util.Objects;
 
-import org.codehaus.plexus.PlexusContainer;
+import org.apache.maven.internal.CoreRealm;
 
 /**
  * CoreExportsProvider
@@ -37,8 +37,8 @@ public class CoreExportsProvider implements Provider<CoreExports> {
     private final CoreExports exports;
 
     @Inject
-    public CoreExportsProvider(PlexusContainer container) {
-        this(new CoreExports(CoreExtensionEntry.discoverFrom(container.getContainerRealm())));
+    public CoreExportsProvider(CoreRealm coreRealm) {
+        this(new CoreExports(CoreExtensionEntry.discoverFrom(coreRealm.getRealm())));
     }
 
     public CoreExportsProvider(CoreExports exports) {
diff --git a/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java b/maven-core/src/main/java/org/apache/maven/internal/CoreRealm.java
similarity index 52%
copy from maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java
copy to maven-core/src/main/java/org/apache/maven/internal/CoreRealm.java
index 9c9d647289..b27cec352f 100644
--- a/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/CoreRealm.java
@@ -16,36 +16,36 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.maven.extension.internal;
+package org.apache.maven.internal;
 
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Provider;
-import javax.inject.Singleton;
-
-import java.util.Objects;
-
-import org.codehaus.plexus.PlexusContainer;
+import org.apache.maven.api.annotations.Experimental;
+import org.apache.maven.api.annotations.Nonnull;
+import org.codehaus.plexus.classworlds.ClassWorld;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
 
 /**
- * CoreExportsProvider
+ * Access to core {@link ClassRealm}.
+ *
+ * @since 4.0.0
  */
-@Named
-@Singleton
-public class CoreExportsProvider implements Provider<CoreExports> {
-
-    private final CoreExports exports;
-
-    @Inject
-    public CoreExportsProvider(PlexusContainer container) {
-        this(new CoreExports(CoreExtensionEntry.discoverFrom(container.getContainerRealm())));
-    }
-
-    public CoreExportsProvider(CoreExports exports) {
-        this.exports = Objects.requireNonNull(exports);
-    }
-
-    public CoreExports get() {
-        return exports;
+@Experimental
+public interface CoreRealm {
+
+    /**
+     * Obtain the {@link ClassRealm} used for Maven Core.
+     *
+     * @return the class realm of core.
+     */
+    @Nonnull
+    ClassRealm getRealm();
+
+    /**
+     * Shorthand method to obtain the {@link ClassWorld} used for Maven Core.
+     *
+     * @return the class world in use.
+     */
+    @Nonnull
+    default ClassWorld getClassWorld() {
+        return getRealm().getWorld();
     }
 }
diff --git a/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java b/maven-core/src/main/java/org/apache/maven/internal/impl/internal/DefaultCoreRealm.java
similarity index 63%
copy from maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java
copy to maven-core/src/main/java/org/apache/maven/internal/impl/internal/DefaultCoreRealm.java
index 9c9d647289..5d85bab5b6 100644
--- a/maven-core/src/main/java/org/apache/maven/extension/internal/CoreExportsProvider.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/impl/internal/DefaultCoreRealm.java
@@ -16,36 +16,29 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.maven.extension.internal;
+package org.apache.maven.internal.impl.internal;
 
 import javax.inject.Inject;
 import javax.inject.Named;
-import javax.inject.Provider;
 import javax.inject.Singleton;
 
-import java.util.Objects;
-
+import org.apache.maven.internal.CoreRealm;
 import org.codehaus.plexus.PlexusContainer;
+import org.codehaus.plexus.classworlds.realm.ClassRealm;
 
-/**
- * CoreExportsProvider
- */
 @Named
 @Singleton
-public class CoreExportsProvider implements Provider<CoreExports> {
+public class DefaultCoreRealm implements CoreRealm {
 
-    private final CoreExports exports;
+    private final PlexusContainer container;
 
     @Inject
-    public CoreExportsProvider(PlexusContainer container) {
-        this(new CoreExports(CoreExtensionEntry.discoverFrom(container.getContainerRealm())));
-    }
-
-    public CoreExportsProvider(CoreExports exports) {
-        this.exports = Objects.requireNonNull(exports);
+    public DefaultCoreRealm(PlexusContainer container) {
+        this.container = container;
     }
 
-    public CoreExports get() {
-        return exports;
+    @Override
+    public ClassRealm getRealm() {
+        return container.getContainerRealm();
     }
 }
diff --git a/maven-core/src/test/java/org/apache/maven/classrealm/DefaultClassRealmManagerTest.java b/maven-core/src/test/java/org/apache/maven/classrealm/DefaultClassRealmManagerTest.java
index f1908adb42..c90e75bece 100644
--- a/maven-core/src/test/java/org/apache/maven/classrealm/DefaultClassRealmManagerTest.java
+++ b/maven-core/src/test/java/org/apache/maven/classrealm/DefaultClassRealmManagerTest.java
@@ -24,6 +24,7 @@ import java.util.HashSet;
 import java.util.List;
 
 import org.apache.maven.extension.internal.CoreExports;
+import org.apache.maven.internal.impl.internal.DefaultCoreRealm;
 import org.apache.maven.model.Model;
 import org.codehaus.plexus.DefaultPlexusContainer;
 import org.codehaus.plexus.PlexusContainer;
@@ -56,7 +57,7 @@ class DefaultClassRealmManagerTest {
         exportedPackages.add("group1:artifact1");
 
         return new DefaultClassRealmManager(
-                container,
+                new DefaultCoreRealm(container),
                 new ArrayList<ClassRealmManagerDelegate>(),
                 new CoreExports(new ClassRealm(null, "test", null), new HashSet<String>(), exportedPackages));
     }