Move BindingReflections.cacheModuleInfos() 88/106588/5
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 21 Jun 2023 12:16:30 +0000 (14:16 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 21 Jun 2023 16:22:42 +0000 (18:22 +0200)
This caching is only used in AbstractSchemaAwareTest, move them there.

JIRA: MDSAL-781
Change-Id: Id0f9d16f5ec046e7b545486aabbfca7e706b9f2e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractSchemaAwareTest.java
binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/BindingRuntimeHelpers.java
binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflections.java

index e8341d46e66fb50841f0a323727f6c35da0a9767..2819d2837b09e77a3696bc0bad4e7b753a35ea62 100644 (file)
@@ -10,11 +10,14 @@ package org.opendaylight.mdsal.binding.dom.adapter.test;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
 import com.google.common.cache.LoadingCache;
+import com.google.common.collect.ImmutableSet;
+import java.util.ServiceLoader;
 import java.util.Set;
+import org.eclipse.jdt.annotation.NonNull;
 import org.junit.Before;
 import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers;
-import org.opendaylight.mdsal.binding.spec.reflect.BindingReflections;
+import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider;
 import org.opendaylight.yangtools.yang.binding.YangModuleInfo;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 
@@ -27,6 +30,15 @@ public abstract class AbstractSchemaAwareTest {
                         return BindingRuntimeHelpers.createRuntimeContext(key);
                     }
                 });
+    private static final LoadingCache<ClassLoader, ImmutableSet<YangModuleInfo>> MODULE_INFO_CACHE =
+        CacheBuilder.newBuilder().weakKeys().weakValues().build(
+            new CacheLoader<ClassLoader, ImmutableSet<YangModuleInfo>>() {
+                @Override
+                public ImmutableSet<YangModuleInfo> load(final ClassLoader key) {
+                    return BindingRuntimeHelpers.loadModuleInfos(key);
+                }
+            });
+
 
     @Before
     public final void setup() throws Exception {
@@ -34,7 +46,7 @@ public abstract class AbstractSchemaAwareTest {
     }
 
     protected Set<YangModuleInfo> getModuleInfos() throws Exception {
-        return BindingReflections.cacheModuleInfos(Thread.currentThread().getContextClassLoader());
+        return cacheModuleInfos(Thread.currentThread().getContextClassLoader());
     }
 
     protected BindingRuntimeContext getRuntimeContext() throws Exception {
@@ -57,4 +69,24 @@ public abstract class AbstractSchemaAwareTest {
     protected void setupWithSchema(final EffectiveModelContext context) {
         // No-op
     }
+
+    /**
+     * Loads {@link YangModuleInfo} instances available on supplied {@link ClassLoader}, assuming the set of available
+     * information does not change. Subsequent accesses may return cached values.
+     *
+     * <p>
+     * {@link YangModuleInfo} are discovered using {@link ServiceLoader} for {@link YangModelBindingProvider}.
+     * {@link YangModelBindingProvider} are simple classes which holds only pointers to actual instance
+     * {@link YangModuleInfo}.
+     *
+     * <p>
+     * When {@link YangModuleInfo} is available, all dependencies are recursively collected into returning set by
+     * collecting results of {@link YangModuleInfo#getImportedModules()}.
+     *
+     * @param loader Class loader for which {@link YangModuleInfo} should be retrieved.
+     * @return Set of {@link YangModuleInfo} available for supplied classloader.
+     */
+    protected static final @NonNull ImmutableSet<YangModuleInfo> cacheModuleInfos(final ClassLoader loader) {
+        return MODULE_INFO_CACHE.getUnchecked(loader);
+    }
 }
index 38c4c35d593820840e682d46c7abfc9818f12704..199b4ab247bca3d7b8e6a0403c40f507dd378f30 100644 (file)
@@ -119,8 +119,12 @@ public final class BindingRuntimeHelpers {
     }
 
     public static @NonNull ImmutableSet<YangModuleInfo> loadModuleInfos() {
+        return loadModuleInfos(Thread.currentThread().getContextClassLoader());
+    }
+
+    public static @NonNull ImmutableSet<YangModuleInfo> loadModuleInfos(final ClassLoader classLoader) {
         final var moduleInfoSet = ImmutableSet.<YangModuleInfo>builder();
-        for (var bindingProvider : ServiceLoader.load(YangModelBindingProvider.class)) {
+        for (var bindingProvider : ServiceLoader.load(YangModelBindingProvider.class, classLoader)) {
             var moduleInfo = bindingProvider.getModuleInfo();
             checkState(moduleInfo != null, "Module Info for %s is not available.", bindingProvider.getClass());
             collectYangModuleInfo(bindingProvider.getModuleInfo(), moduleInfoSet);
index 1fa8ffa023e3f4de9d802283763fce30097eec03..d941482c5f42f2693b8a3b1dd7498090e00ce241 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.mdsal.binding.spec.reflect;
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkState;
 
-import com.google.common.annotations.Beta;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
@@ -50,14 +49,6 @@ public final class BindingReflections {
             .weakKeys()
             .expireAfterAccess(60, TimeUnit.SECONDS)
             .build(new ClassToQNameLoader());
-    private static final LoadingCache<ClassLoader, ImmutableSet<YangModuleInfo>> MODULE_INFO_CACHE =
-            CacheBuilder.newBuilder().weakKeys().weakValues().build(
-                new CacheLoader<ClassLoader, ImmutableSet<YangModuleInfo>>() {
-                    @Override
-                    public ImmutableSet<YangModuleInfo> load(final ClassLoader key) {
-                        return loadModuleInfos(key);
-                    }
-                });
 
     private BindingReflections() {
         // Hidden on purpose
@@ -201,9 +192,6 @@ public final class BindingReflections {
      * When {@link YangModuleInfo} is available, all dependencies are recursively collected into returning set by
      * collecting results of {@link YangModuleInfo#getImportedModules()}.
      *
-     * <p>
-     * Consider using {@link #cacheModuleInfos(ClassLoader)} if the classloader is known to be immutable.
-     *
      * @param loader Classloader for which {@link YangModuleInfo} should be retrieved.
      * @return Set of {@link YangModuleInfo} available for supplied classloader.
      */
@@ -219,27 +207,6 @@ public final class BindingReflections {
         return moduleInfoSet.build();
     }
 
-    /**
-     * Loads {@link YangModuleInfo} instances available on supplied {@link ClassLoader}, assuming the set of available
-     * information does not change. Subsequent accesses may return cached values.
-     *
-     * <p>
-     * {@link YangModuleInfo} are discovered using {@link ServiceLoader} for {@link YangModelBindingProvider}.
-     * {@link YangModelBindingProvider} are simple classes which holds only pointers to actual instance
-     * {@link YangModuleInfo}.
-     *
-     * <p>
-     * When {@link YangModuleInfo} is available, all dependencies are recursively collected into returning set by
-     * collecting results of {@link YangModuleInfo#getImportedModules()}.
-     *
-     * @param loader Class loader for which {@link YangModuleInfo} should be retrieved.
-     * @return Set of {@link YangModuleInfo} available for supplied classloader.
-     */
-    @Beta
-    public static @NonNull ImmutableSet<YangModuleInfo> cacheModuleInfos(final ClassLoader loader) {
-        return MODULE_INFO_CACHE.getUnchecked(loader);
-    }
-
     private static void collectYangModuleInfo(final YangModuleInfo moduleInfo,
             final Builder<YangModuleInfo> moduleInfoSet) {
         moduleInfoSet.add(moduleInfo);