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() {
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) {
}
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,
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) {
}
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);