From: Robert Varga Date: Wed, 21 Jun 2023 12:16:30 +0000 (+0200) Subject: Move BindingReflections.cacheModuleInfos() X-Git-Tag: v12.0.0~40 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=745074e1604f2f3f0f96eda28499fa9e70d5ce7a;p=mdsal.git Move BindingReflections.cacheModuleInfos() This caching is only used in AbstractSchemaAwareTest, move them there. JIRA: MDSAL-781 Change-Id: Id0f9d16f5ec046e7b545486aabbfca7e706b9f2e Signed-off-by: Robert Varga --- diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractSchemaAwareTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractSchemaAwareTest.java index e8341d46e6..2819d2837b 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractSchemaAwareTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/test/AbstractSchemaAwareTest.java @@ -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> MODULE_INFO_CACHE = + CacheBuilder.newBuilder().weakKeys().weakValues().build( + new CacheLoader>() { + @Override + public ImmutableSet 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 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. + * + *

+ * {@link YangModuleInfo} are discovered using {@link ServiceLoader} for {@link YangModelBindingProvider}. + * {@link YangModelBindingProvider} are simple classes which holds only pointers to actual instance + * {@link YangModuleInfo}. + * + *

+ * 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 cacheModuleInfos(final ClassLoader loader) { + return MODULE_INFO_CACHE.getUnchecked(loader); + } } diff --git a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/BindingRuntimeHelpers.java b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/BindingRuntimeHelpers.java index 38c4c35d59..199b4ab247 100644 --- a/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/BindingRuntimeHelpers.java +++ b/binding/mdsal-binding-runtime-spi/src/main/java/org/opendaylight/mdsal/binding/runtime/spi/BindingRuntimeHelpers.java @@ -119,8 +119,12 @@ public final class BindingRuntimeHelpers { } public static @NonNull ImmutableSet loadModuleInfos() { + return loadModuleInfos(Thread.currentThread().getContextClassLoader()); + } + + public static @NonNull ImmutableSet loadModuleInfos(final ClassLoader classLoader) { final var moduleInfoSet = ImmutableSet.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); diff --git a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflections.java b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflections.java index 1fa8ffa023..d941482c5f 100644 --- a/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflections.java +++ b/binding/mdsal-binding-spec-util/src/main/java/org/opendaylight/mdsal/binding/spec/reflect/BindingReflections.java @@ -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> MODULE_INFO_CACHE = - CacheBuilder.newBuilder().weakKeys().weakValues().build( - new CacheLoader>() { - @Override - public ImmutableSet 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()}. * - *

- * 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. - * - *

- * {@link YangModuleInfo} are discovered using {@link ServiceLoader} for {@link YangModelBindingProvider}. - * {@link YangModelBindingProvider} are simple classes which holds only pointers to actual instance - * {@link YangModuleInfo}. - * - *

- * 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 cacheModuleInfos(final ClassLoader loader) { - return MODULE_INFO_CACHE.getUnchecked(loader); - } - private static void collectYangModuleInfo(final YangModuleInfo moduleInfo, final Builder moduleInfoSet) { moduleInfoSet.add(moduleInfo);