Bump yangtools to 13.0.0
[mdsal.git] / binding / mdsal-binding-runtime-spi / src / main / java / org / opendaylight / mdsal / binding / runtime / spi / BindingRuntimeHelpers.java
index 38c4c35d593820840e682d46c7abfc9818f12704..e4db5c3d441f88462926c9c125ba3c2ee8056275 100644 (file)
@@ -55,7 +55,7 @@ public final class BindingRuntimeHelpers {
 
     public static @NonNull EffectiveModelContext createEffectiveModel(final YangParserFactory parserFactory,
             final Iterable<? extends YangModuleInfo> moduleInfos) throws YangParserException {
-        return prepareContext(parserFactory, moduleInfos).getEffectiveModelContext();
+        return prepareContext(parserFactory, moduleInfos).modelContext();
     }
 
     public static @NonNull BindingRuntimeContext createRuntimeContext() {
@@ -66,7 +66,7 @@ public final class BindingRuntimeHelpers {
             throw new IllegalStateException("Failed to parse models", e);
         }
         return new DefaultBindingRuntimeContext(ServiceLoaderState.Generator.INSTANCE.generateTypeMapping(
-            infos.getEffectiveModelContext()), infos);
+            infos.modelContext()), infos);
     }
 
     public static @NonNull BindingRuntimeContext createRuntimeContext(final Class<?>... classes) {
@@ -89,7 +89,7 @@ public final class BindingRuntimeHelpers {
         }
 
         return new DefaultBindingRuntimeContext(
-            ServiceLoaderState.Generator.INSTANCE.generateTypeMapping(snapshot.getEffectiveModelContext()), snapshot);
+            ServiceLoaderState.Generator.INSTANCE.generateTypeMapping(snapshot.modelContext()), snapshot);
     }
 
     public static @NonNull BindingRuntimeContext createRuntimeContext(final YangParserFactory parserFactory,
@@ -99,10 +99,10 @@ public final class BindingRuntimeHelpers {
 
     public static @NonNull BindingRuntimeContext createRuntimeContext(final YangParserFactory parserFactory,
             final BindingRuntimeGenerator generator, final Collection<Class<?>> classes) throws YangParserException {
-        final ModuleInfoSnapshot infos = prepareContext(parserFactory, classes.stream()
+        final var infos = prepareContext(parserFactory, classes.stream()
             .map(BindingRuntimeHelpers::getYangModuleInfo)
             .collect(Collectors.toList()));
-        return new DefaultBindingRuntimeContext(generator.generateTypeMapping(infos.getEffectiveModelContext()), infos);
+        return new DefaultBindingRuntimeContext(generator.generateTypeMapping(infos.modelContext()), infos);
     }
 
     public static @NonNull YangModuleInfo getYangModuleInfo(final Class<?> clazz) {
@@ -119,8 +119,27 @@ public final class BindingRuntimeHelpers {
     }
 
     public static @NonNull ImmutableSet<YangModuleInfo> loadModuleInfos() {
+        return loadModuleInfos(Thread.currentThread().getContextClassLoader());
+    }
+
+    /**
+     * Loads {@link YangModuleInfo} infos available on supplied classloader.
+     *
+     * <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 classLoader Classloader for which {@link YangModuleInfo} should be retrieved.
+     * @return Set of {@link YangModuleInfo} available for supplied classloader.
+     */
+    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);