From d9a9901b2b9e33685d1702cc7105509c5369625d Mon Sep 17 00:00:00 2001 From: "tadei.bilan" Date: Mon, 19 Jul 2021 17:19:52 +0300 Subject: [PATCH] Convert mdsal-binding-dom-codec to a JPMS module Convert mdsal-binding-dom-codec to a properly-injected JPMS module, available through @Singleton, @Component and @MetaInfServices. Also update NonCachingCodecTest to expose its mock fields and UnionValueOptionContextTest to use test-model's classes. This also necessitates relocating the loeader package, as otherwise maven-javadoc-plugin ends up being confused passes down invalid @packages to javadoc. JIRA: MDSAL-641 Change-Id: I3cbe8da4fc4905a1246a5e94a7e208e1bccfa1d8 Signed-off-by: tadei.bilan Signed-off-by: Robert Varga --- .../dom/adapter/query/QueryBuilderTest.java | 6 +- .../adapter/query/QueryPerformanceTest.java | 6 +- binding/mdsal-binding-dom-codec/pom.xml | 68 ++++++++++++------- .../src/main/java/module-info.java | 48 +++++++++++++ .../dom/codec/impl/BindingCodecContext.java | 8 +-- .../dom/codec/impl/ClassGeneratorBridge.java | 2 +- .../codec/impl/CodecDataObjectGenerator.java | 6 +- .../impl/DataObjectStreamerGenerator.java | 6 +- .../dom/codec/impl/NodeCodecContext.java | 2 +- .../codec/impl/NotificationCodecContext.java | 2 +- .../codec/impl/OpaqueNodeCodecContext.java | 4 +- ...ava => SimpleBindingCodecTreeFactory.java} | 9 +-- ...java => SimpleBindingDOMCodecFactory.java} | 8 +-- .../di/DefaultBindingCodecTreeFactory.java | 33 +++++++++ .../di/DefaultBindingDOMCodecFactory.java | 33 +++++++++ .../di/DefaultBindingDOMCodecServices.java | 36 ++++++++++ .../dom/codec/impl/di/package-info.java | 12 ++++ .../{ => impl}/loader/CodecClassLoader.java | 2 +- .../loader/LeafCodecClassLoader.java | 2 +- .../loader/RootCodecClassLoader.java | 2 +- .../codec/{ => impl}/loader/package-info.java | 7 +- .../dom/codec/impl/NonCachingCodecTest.java | 6 +- .../impl/UnionValueOptionContextTest.java | 58 +++++----------- .../rfc8525/AbstractYangLibraryTest.java | 13 ++-- 24 files changed, 262 insertions(+), 117 deletions(-) create mode 100644 binding/mdsal-binding-dom-codec/src/main/java/module-info.java rename binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/{DefaultBindingCodecTreeFactory.java => SimpleBindingCodecTreeFactory.java} (82%) rename binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/{DefaultBindingDOMCodecFactory.java => SimpleBindingDOMCodecFactory.java} (83%) create mode 100644 binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingCodecTreeFactory.java create mode 100644 binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingDOMCodecFactory.java create mode 100644 binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingDOMCodecServices.java create mode 100644 binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/package-info.java rename binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/{ => impl}/loader/CodecClassLoader.java (99%) rename binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/{ => impl}/loader/LeafCodecClassLoader.java (98%) rename binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/{ => impl}/loader/RootCodecClassLoader.java (98%) rename binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/{ => impl}/loader/package-info.java (63%) diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/query/QueryBuilderTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/query/QueryBuilderTest.java index f3b879d83e..7cf3be6c06 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/query/QueryBuilderTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/query/QueryBuilderTest.java @@ -12,6 +12,7 @@ import static org.junit.Assert.assertNotNull; import com.google.common.base.Stopwatch; import java.util.List; +import java.util.ServiceLoader; import java.util.stream.Collectors; import org.eclipse.jdt.annotation.NonNull; import org.junit.AfterClass; @@ -24,7 +25,7 @@ import org.opendaylight.mdsal.binding.api.query.QueryFactory; import org.opendaylight.mdsal.binding.api.query.QueryResult; import org.opendaylight.mdsal.binding.api.query.QueryResult.Item; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; -import org.opendaylight.mdsal.binding.dom.codec.impl.DefaultBindingCodecTreeFactory; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers; import org.opendaylight.yang.gen.v1.mdsal.query.norev.Foo; import org.opendaylight.yang.gen.v1.mdsal.query.norev.FooBuilder; @@ -53,7 +54,8 @@ public class QueryBuilderTest { @BeforeClass public static final void beforeClass() { - CODEC = new DefaultBindingCodecTreeFactory().create(BindingRuntimeHelpers.createRuntimeContext()); + CODEC = ServiceLoader.load(BindingCodecTreeFactory.class).findFirst().orElseThrow() + .create(BindingRuntimeHelpers.createRuntimeContext()); } @AfterClass diff --git a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/query/QueryPerformanceTest.java b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/query/QueryPerformanceTest.java index 13f20a852b..06b9595d1c 100644 --- a/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/query/QueryPerformanceTest.java +++ b/binding/mdsal-binding-dom-adapter/src/test/java/org/opendaylight/mdsal/binding/dom/adapter/query/QueryPerformanceTest.java @@ -15,6 +15,7 @@ import static org.junit.Assert.assertTrue; import com.google.common.base.Stopwatch; import com.google.common.util.concurrent.FluentFuture; import java.util.Optional; +import java.util.ServiceLoader; import java.util.concurrent.ExecutionException; import org.eclipse.jdt.annotation.NonNull; import org.junit.AfterClass; @@ -28,7 +29,7 @@ import org.opendaylight.mdsal.binding.api.query.QueryExpression; import org.opendaylight.mdsal.binding.api.query.QueryFactory; import org.opendaylight.mdsal.binding.api.query.QueryResult; import org.opendaylight.mdsal.binding.dom.adapter.test.AbstractDataBrokerTest; -import org.opendaylight.mdsal.binding.dom.codec.impl.DefaultBindingCodecTreeFactory; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.yang.gen.v1.mdsal.query.norev.Foo; @@ -69,7 +70,8 @@ public class QueryPerformanceTest extends AbstractDataBrokerTest { @Override protected void setupWithRuntimeContext(final BindingRuntimeContext runtimeContext) { super.setupWithRuntimeContext(runtimeContext); - factory = new DefaultQueryFactory(new DefaultBindingCodecTreeFactory().create(runtimeContext)); + factory = new DefaultQueryFactory(ServiceLoader.load(BindingCodecTreeFactory.class).findFirst().orElseThrow() + .create(runtimeContext)); } @Override diff --git a/binding/mdsal-binding-dom-codec/pom.xml b/binding/mdsal-binding-dom-codec/pom.xml index 878c139532..ac9068e10f 100644 --- a/binding/mdsal-binding-dom-codec/pom.xml +++ b/binding/mdsal-binding-dom-codec/pom.xml @@ -19,28 +19,67 @@ mdsal-binding-dom-codec bundle - - net.bytebuddy - org.opendaylight.mdsal.binding.dom.codec.jar.bytebuddy - - + + com.google.guava + guava + net.bytebuddy byte-buddy + + org.opendaylight.yangtools + concepts + + + org.opendaylight.yangtools + util + + + org.opendaylight.yangtools + yang-common + + + org.opendaylight.yangtools + yang-data-api + org.opendaylight.yangtools yang-data-impl + + org.opendaylight.yangtools + yang-data-util + + + org.opendaylight.yangtools + yang-model-api + org.opendaylight.mdsal mdsal-binding-model-api + + org.opendaylight.mdsal + mdsal-binding-dom-codec-api + org.opendaylight.mdsal mdsal-binding-dom-codec-spi + + org.opendaylight.mdsal + mdsal-binding-runtime-api + + + org.opendaylight.mdsal + mdsal-binding-spec-util + + + org.opendaylight.mdsal + yang-binding + com.guicedee.services javax.inject @@ -74,23 +113,4 @@ test - - - - - org.apache.felix - maven-bundle-plugin - true - - - ${project.groupId}.${project.artifactId} - - org.opendaylight.mdsal.binding.dom.codec.impl, - org.opendaylight.mdsal.binding.dom.codec.loader, - - - - - - diff --git a/binding/mdsal-binding-dom-codec/src/main/java/module-info.java b/binding/mdsal-binding-dom-codec/src/main/java/module-info.java new file mode 100644 index 0000000000..1973901ae4 --- /dev/null +++ b/binding/mdsal-binding-dom-codec/src/main/java/module-info.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; +import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; +import org.opendaylight.mdsal.binding.dom.codec.impl.SimpleBindingCodecTreeFactory; +import org.opendaylight.mdsal.binding.dom.codec.impl.SimpleBindingDOMCodecFactory; +import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory; +import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices; +import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; + +module org.opendaylight.mdsal.binding.dom.codec.impl { + exports org.opendaylight.mdsal.binding.dom.codec.impl.di; + + uses BindingRuntimeContext; + provides BindingDOMCodecFactory with SimpleBindingDOMCodecFactory; + provides BindingDOMCodecServices with BindingCodecContext; + provides BindingCodecTreeFactory with SimpleBindingCodecTreeFactory; + + requires transitive org.opendaylight.mdsal.binding.runtime.api; + requires transitive org.opendaylight.mdsal.binding.dom.codec.api; + requires transitive org.opendaylight.mdsal.binding.dom.codec.spi; + requires com.google.common; + requires net.bytebuddy; + requires org.opendaylight.mdsal.binding.model.api; + requires org.opendaylight.mdsal.binding.spec.util; + requires org.opendaylight.yangtools.concepts; + requires org.opendaylight.yangtools.util; + requires org.opendaylight.yangtools.yang.binding; + requires org.opendaylight.yangtools.yang.common; + requires org.opendaylight.yangtools.yang.data.api; + requires org.opendaylight.yangtools.yang.data.impl; + requires org.opendaylight.yangtools.yang.data.util; + requires org.opendaylight.yangtools.yang.model.api; + requires org.opendaylight.yangtools.yang.model.util; + requires org.slf4j; + + // Annotations + requires static com.github.spotbugs.annotations; + requires static javax.inject; + requires static metainf.services; + requires static org.eclipse.jdt.annotation; + requires static org.osgi.service.component.annotations; +} diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java index b85065ab39..aa62a2192f 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/BindingCodecContext.java @@ -12,7 +12,6 @@ import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; -import com.google.common.annotations.Beta; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; @@ -35,8 +34,6 @@ import java.util.Map.Entry; import java.util.Optional; import java.util.ServiceLoader; import java.util.concurrent.ExecutionException; -import javax.inject.Inject; -import javax.inject.Singleton; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.kohsuke.MetaInfServices; @@ -46,7 +43,7 @@ import org.opendaylight.mdsal.binding.dom.codec.api.BindingInstanceIdentifierCod import org.opendaylight.mdsal.binding.dom.codec.api.BindingNormalizedNodeWriterFactory; import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter; import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader; import org.opendaylight.mdsal.binding.dom.codec.spi.AbstractBindingNormalizedNodeSerializer; import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices; import org.opendaylight.mdsal.binding.dom.codec.spi.BindingSchemaMapping; @@ -100,9 +97,7 @@ import org.opendaylight.yangtools.yang.model.api.type.UnionTypeDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Beta @MetaInfServices(value = BindingDOMCodecServices.class) -@Singleton public final class BindingCodecContext extends AbstractBindingNormalizedNodeSerializer implements BindingDOMCodecServices, Immutable, CodecContextFactory, DataObjectSerializerRegistry { private final class DataObjectSerializerProxy implements DataObjectSerializer, Delegator> { @@ -154,7 +149,6 @@ public final class BindingCodecContext extends AbstractBindingNormalizedNodeSeri .orElseThrow(() -> new IllegalStateException("Failed to load BindingRuntimeContext"))); } - @Inject public BindingCodecContext(final BindingRuntimeContext context) { this.context = requireNonNull(context, "Binding Runtime Context is required."); root = SchemaRootCodecContext.create(this); diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ClassGeneratorBridge.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ClassGeneratorBridge.java index d5791d7534..7b2c313f9e 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ClassGeneratorBridge.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/ClassGeneratorBridge.java @@ -13,7 +13,7 @@ import com.google.common.annotations.Beta; import com.google.common.base.Supplier; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.ClassGenerator; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.ClassGenerator; /** * Bridge for initializing generated instance constants during class loading time. This class is public only due to diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecDataObjectGenerator.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecDataObjectGenerator.java index 2603faec76..1c4021ca66 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecDataObjectGenerator.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/CodecDataObjectGenerator.java @@ -43,9 +43,9 @@ import net.bytebuddy.jar.asm.Opcodes; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.dom.codec.impl.ClassGeneratorBridge.LocalNameProvider; import org.opendaylight.mdsal.binding.dom.codec.impl.ClassGeneratorBridge.NodeContextSupplierProvider; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.ClassGenerator; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.GeneratorResult; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.ClassGenerator; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.GeneratorResult; import org.opendaylight.mdsal.binding.spec.naming.BindingMapping; import org.opendaylight.yangtools.yang.binding.DataObject; import org.slf4j.Logger; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java index c8b4b3e254..b0da583985 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DataObjectStreamerGenerator.java @@ -50,9 +50,9 @@ import net.bytebuddy.matcher.ElementMatchers; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.dom.codec.api.BindingStreamEventWriter; import org.opendaylight.mdsal.binding.dom.codec.impl.NodeCodecContext.CodecContextFactory; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.ClassGenerator; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.GeneratorResult; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.ClassGenerator; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.GeneratorResult; import org.opendaylight.mdsal.binding.dom.codec.spi.BindingSchemaMapping; import org.opendaylight.mdsal.binding.model.api.GeneratedType; import org.opendaylight.mdsal.binding.model.api.MethodSignature; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/NodeCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/NodeCodecContext.java index 8ce77a2160..f4ac5d8c63 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/NodeCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/NodeCodecContext.java @@ -13,7 +13,7 @@ import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeNode; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader; import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; import org.opendaylight.mdsal.binding.runtime.api.ListRuntimeType; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/NotificationCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/NotificationCodecContext.java index 87da154d33..332707334c 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/NotificationCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/NotificationCodecContext.java @@ -35,7 +35,7 @@ import net.bytebuddy.implementation.bytecode.member.MethodVariableAccess; import net.bytebuddy.jar.asm.Opcodes; import net.bytebuddy.matcher.ElementMatchers; import org.eclipse.jdt.annotation.NonNull; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.GeneratorResult; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.GeneratorResult; import org.opendaylight.mdsal.binding.runtime.api.NotificationRuntimeType; import org.opendaylight.yangtools.yang.binding.BaseNotification; import org.opendaylight.yangtools.yang.binding.DataObject; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/OpaqueNodeCodecContext.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/OpaqueNodeCodecContext.java index f26fb25bd0..cf932f27e5 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/OpaqueNodeCodecContext.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/OpaqueNodeCodecContext.java @@ -21,8 +21,8 @@ import net.bytebuddy.dynamic.DynamicType.Builder; import net.bytebuddy.jar.asm.Opcodes; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.dom.codec.api.BindingOpaqueObjectCodecTreeNode; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader; -import org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader.GeneratorResult; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader; +import org.opendaylight.mdsal.binding.dom.codec.impl.loader.CodecClassLoader.GeneratorResult; import org.opendaylight.yangtools.concepts.AbstractIllegalArgumentCodec; import org.opendaylight.yangtools.concepts.IllegalArgumentCodec; import org.opendaylight.yangtools.yang.binding.OpaqueData; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DefaultBindingCodecTreeFactory.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SimpleBindingCodecTreeFactory.java similarity index 82% rename from binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DefaultBindingCodecTreeFactory.java rename to binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SimpleBindingCodecTreeFactory.java index aeb270fec2..feeb56acac 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DefaultBindingCodecTreeFactory.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SimpleBindingCodecTreeFactory.java @@ -7,8 +7,6 @@ */ package org.opendaylight.mdsal.binding.dom.codec.impl; -import com.google.common.annotations.Beta; -import javax.inject.Singleton; import org.kohsuke.MetaInfServices; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; @@ -19,12 +17,10 @@ import org.osgi.service.component.annotations.Deactivate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Beta @MetaInfServices -@Singleton @Component(immediate = true) -public final class DefaultBindingCodecTreeFactory implements BindingCodecTreeFactory { - private static final Logger LOG = LoggerFactory.getLogger(DefaultBindingCodecTreeFactory.class); +public final class SimpleBindingCodecTreeFactory implements BindingCodecTreeFactory { + private static final Logger LOG = LoggerFactory.getLogger(SimpleBindingCodecTreeFactory.class); @Override public BindingCodecTree create(final BindingRuntimeContext context) { @@ -37,7 +33,6 @@ public final class DefaultBindingCodecTreeFactory implements BindingCodecTreeFac LOG.info("Binding-DOM Codec enabled"); } - @Deactivate @SuppressWarnings("static-method") void deactivate() { diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DefaultBindingDOMCodecFactory.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SimpleBindingDOMCodecFactory.java similarity index 83% rename from binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DefaultBindingDOMCodecFactory.java rename to binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SimpleBindingDOMCodecFactory.java index 521d40d6ea..03c77ac082 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/DefaultBindingDOMCodecFactory.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/SimpleBindingDOMCodecFactory.java @@ -7,8 +7,6 @@ */ package org.opendaylight.mdsal.binding.dom.codec.impl; -import com.google.common.annotations.Beta; -import javax.inject.Singleton; import org.eclipse.jdt.annotation.NonNullByDefault; import org.kohsuke.MetaInfServices; import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory; @@ -20,13 +18,11 @@ import org.osgi.service.component.annotations.Deactivate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -@Beta @NonNullByDefault @MetaInfServices -@Singleton @Component(immediate = true) -public final class DefaultBindingDOMCodecFactory implements BindingDOMCodecFactory { - private static final Logger LOG = LoggerFactory.getLogger(DefaultBindingDOMCodecFactory.class); +public final class SimpleBindingDOMCodecFactory implements BindingDOMCodecFactory { + private static final Logger LOG = LoggerFactory.getLogger(SimpleBindingDOMCodecFactory.class); @Override public BindingDOMCodecServices createBindingDOMCodec(final BindingRuntimeContext context) { diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingCodecTreeFactory.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingCodecTreeFactory.java new file mode 100644 index 0000000000..66491c1ec1 --- /dev/null +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingCodecTreeFactory.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.dom.codec.impl.di; + +import com.google.common.annotations.Beta; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; +import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; +import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; +import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; + +/** + * Default implementation of {@link BindingCodecTreeFactory}. + */ +@Beta +@Singleton +public final class DefaultBindingCodecTreeFactory implements BindingCodecTreeFactory { + @Inject + public DefaultBindingCodecTreeFactory() { + // Exposed for DI + } + + @Override + public BindingCodecTree create(final BindingRuntimeContext context) { + return new BindingCodecContext(context); + } +} diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingDOMCodecFactory.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingDOMCodecFactory.java new file mode 100644 index 0000000000..23c8285069 --- /dev/null +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingDOMCodecFactory.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.dom.codec.impl.di; + +import com.google.common.annotations.Beta; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; +import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecFactory; +import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices; +import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; + +/** + * Default implementation of {@link BindingDOMCodecFactory}. + */ +@Beta +@Singleton +public final class DefaultBindingDOMCodecFactory implements BindingDOMCodecFactory { + @Inject + public DefaultBindingDOMCodecFactory() { + // Exposed for DI + } + + @Override + public BindingDOMCodecServices createBindingDOMCodec(final BindingRuntimeContext context) { + return new BindingCodecContext(context); + } +} diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingDOMCodecServices.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingDOMCodecServices.java new file mode 100644 index 0000000000..0db05b9a2a --- /dev/null +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/DefaultBindingDOMCodecServices.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.dom.codec.impl.di; + +import com.google.common.annotations.Beta; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.eclipse.jdt.annotation.NonNull; +import org.opendaylight.mdsal.binding.dom.codec.impl.BindingCodecContext; +import org.opendaylight.mdsal.binding.dom.codec.spi.BindingDOMCodecServices; +import org.opendaylight.mdsal.binding.dom.codec.spi.ForwardingBindingDOMCodecServices; +import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; + +/** + * Default implementation of {@link BindingDOMCodecServices}. + */ +@Beta +@Singleton +public final class DefaultBindingDOMCodecServices extends ForwardingBindingDOMCodecServices { + private final @NonNull BindingDOMCodecServices delegate; + + @Inject + public DefaultBindingDOMCodecServices(final BindingRuntimeContext context) { + delegate = new BindingCodecContext(context); + } + + @Override + protected BindingDOMCodecServices delegate() { + return delegate; + } +} diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/package-info.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/package-info.java new file mode 100644 index 0000000000..5fdce96d1d --- /dev/null +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/di/package-info.java @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +/** + * Package exposing components to various dependency injection frameworks, so they can locate them. This package is not + * exposed to OSGi runtime. + */ +package org.opendaylight.mdsal.binding.dom.codec.impl.di; \ No newline at end of file diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/CodecClassLoader.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/CodecClassLoader.java similarity index 99% rename from binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/CodecClassLoader.java rename to binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/CodecClassLoader.java index 5dfacb9694..4a5a8941b5 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/CodecClassLoader.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/CodecClassLoader.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.dom.codec.loader; +package org.opendaylight.mdsal.binding.dom.codec.impl.loader; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Verify.verify; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/LeafCodecClassLoader.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/LeafCodecClassLoader.java similarity index 98% rename from binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/LeafCodecClassLoader.java rename to binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/LeafCodecClassLoader.java index ef2eed4052..fd9ea46413 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/LeafCodecClassLoader.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/LeafCodecClassLoader.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.dom.codec.loader; +package org.opendaylight.mdsal.binding.dom.codec.impl.loader; import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/RootCodecClassLoader.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/RootCodecClassLoader.java similarity index 98% rename from binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/RootCodecClassLoader.java rename to binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/RootCodecClassLoader.java index 5465e83cac..b52fe17027 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/RootCodecClassLoader.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/RootCodecClassLoader.java @@ -5,7 +5,7 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ -package org.opendaylight.mdsal.binding.dom.codec.loader; +package org.opendaylight.mdsal.binding.dom.codec.impl.loader; import static com.google.common.base.Verify.verify; import static com.google.common.base.Verify.verifyNotNull; diff --git a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/package-info.java b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/package-info.java similarity index 63% rename from binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/package-info.java rename to binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/package-info.java index 3747006bbc..ced5ac7ea9 100644 --- a/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/loader/package-info.java +++ b/binding/mdsal-binding-dom-codec/src/main/java/org/opendaylight/mdsal/binding/dom/codec/impl/loader/package-info.java @@ -7,12 +7,11 @@ */ /** * {@link java.lang.ClassLoader} support for Binding/DOM codec translation code generators. This package provides one - * core class, {@link org.opendaylight.mdsal.binding.dom.codec.loader.CodecClassLoader}, which allows lookup of - * compile-time-generated Binding classes for the purpose of referencing them within code generators and which - * serves as the ClassLoader holding runtime-generated codecs. + * core class, {@link CodecClassLoader}, which allows lookup of compile-time-generated Binding classes for the purpose + * of referencing them within code generators and which serves as the ClassLoader holding runtime-generated codecs. * *

* While the interfaces and classes in this package may be publicly accessible, they are an implementation detail and * may change incompatibly at any time. */ -package org.opendaylight.mdsal.binding.dom.codec.loader; \ No newline at end of file +package org.opendaylight.mdsal.binding.dom.codec.impl.loader; \ No newline at end of file diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/NonCachingCodecTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/NonCachingCodecTest.java index 1f517042de..8cf69a473c 100644 --- a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/NonCachingCodecTest.java +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/NonCachingCodecTest.java @@ -22,11 +22,11 @@ import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; @RunWith(MockitoJUnitRunner.StrictStubs.class) public class NonCachingCodecTest { @Mock - private BindingNormalizedNodeCodec codec; + public BindingNormalizedNodeCodec codec; @Mock - private NormalizedNode node; + public NormalizedNode node; @Mock - private DataObject object; + public DataObject object; @Before public void before() { diff --git a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/UnionValueOptionContextTest.java b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/UnionValueOptionContextTest.java index a71dbd1313..27c89b82c3 100644 --- a/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/UnionValueOptionContextTest.java +++ b/binding/mdsal-binding-dom-codec/src/test/java/org/opendaylight/mdsal/binding/dom/codec/impl/UnionValueOptionContextTest.java @@ -8,33 +8,30 @@ package org.opendaylight.mdsal.binding.dom.codec.impl; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; -import java.lang.reflect.Method; -import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.test.union.rev150121.LowestLevel1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.test.union.rev150121.LowestLevel2; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.yangtools.test.union.rev150121.UnionTestType; public class UnionValueOptionContextTest { private static UnionValueOptionContext TEST_UVOC_1; private static UnionValueOptionContext TEST_UVOC_2; - @Before - public void setUp() throws Exception { - final Method methodFoo1 = TestDataObject1.class.getMethod("foo"); - final Method methodFoo2 = TestDataObject2.class.getMethod("foo"); - TEST_UVOC_1 = new UnionValueOptionContext(TestUnion.class, TestDataObject1.class, methodFoo1, - SchemaUnawareCodec.NOOP_CODEC); - TEST_UVOC_2 = new UnionValueOptionContext(TestUnion.class, TestDataObject2.class, methodFoo2, - SchemaUnawareCodec.NOOP_CODEC); + @BeforeClass + public static void beforeClass() throws Exception { + TEST_UVOC_1 = new UnionValueOptionContext(UnionTestType.class, LowestLevel1.class, + UnionTestType.class.getMethod("getLowestLevel1"), SchemaUnawareCodec.NOOP_CODEC); + TEST_UVOC_2 = new UnionValueOptionContext(UnionTestType.class, LowestLevel2.class, + UnionTestType.class.getMethod("getLowestLevel2"), SchemaUnawareCodec.NOOP_CODEC); } @Test public void hashCodeTest() throws Exception { - final Method methodFoo1 = TestDataObject1.class.getMethod("foo"); - final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(TestUnion.class, TestDataObject1.class, - methodFoo1, SchemaUnawareCodec.NOOP_CODEC); + final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(UnionTestType.class, LowestLevel1.class, + UnionTestType.class.getMethod("getLowestLevel1"), SchemaUnawareCodec.NOOP_CODEC); assertEquals("HashCode", test_uvoc.hashCode(), TEST_UVOC_1.hashCode()); assertNotEquals("HashCode", TEST_UVOC_1.hashCode(), TEST_UVOC_2.hashCode()); @@ -42,33 +39,10 @@ public class UnionValueOptionContextTest { @Test public void equalsTest() throws Exception { - final Method methodFoo1 = TestDataObject1.class.getMethod("foo"); - final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(TestUnion.class, TestDataObject1.class, - methodFoo1, SchemaUnawareCodec.NOOP_CODEC); + final UnionValueOptionContext test_uvoc = new UnionValueOptionContext(UnionTestType.class, LowestLevel1.class, + UnionTestType.class.getMethod("getLowestLevel1"), SchemaUnawareCodec.NOOP_CODEC); - assertTrue("Equals", TEST_UVOC_1.equals(test_uvoc)); - assertFalse("Not equals", TEST_UVOC_1.equals(TEST_UVOC_2)); - } - - protected static final class TestDataObject1 { - public void foo() { - - } - } - - protected static final class TestDataObject2 { - public void foo() { - - } - } - - public static final class TestUnion { - public TestUnion(final TestDataObject1 arg) { - - } - - public TestUnion(final TestDataObject2 arg) { - - } + assertEquals(TEST_UVOC_1, test_uvoc); + assertNotEquals(TEST_UVOC_1, TEST_UVOC_2); } } diff --git a/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/AbstractYangLibraryTest.java b/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/AbstractYangLibraryTest.java index 26c932b319..3a0fff17c6 100644 --- a/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/AbstractYangLibraryTest.java +++ b/yanglib/mdsal-yanglib-rfc8525/src/test/java/org/opendaylight/mdsal/yanglib/rfc8525/AbstractYangLibraryTest.java @@ -7,23 +7,24 @@ */ package org.opendaylight.mdsal.yanglib.rfc8525; +import java.util.ServiceLoader; import org.junit.Before; import org.junit.BeforeClass; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTree; import org.opendaylight.mdsal.binding.dom.codec.api.BindingCodecTreeFactory; -import org.opendaylight.mdsal.binding.dom.codec.impl.DefaultBindingCodecTreeFactory; -import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator; import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext; import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeGenerator; import org.opendaylight.mdsal.binding.runtime.spi.BindingRuntimeHelpers; import org.opendaylight.yangtools.yang.parser.api.YangParserException; import org.opendaylight.yangtools.yang.parser.api.YangParserFactory; -import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory; abstract class AbstractYangLibraryTest { - private static final BindingRuntimeGenerator BINDING_RUNTIME_GENERATOR = new DefaultBindingRuntimeGenerator(); - private static final YangParserFactory YANG_PARSER_FACTORY = new DefaultYangParserFactory(); - private static final BindingCodecTreeFactory CODEC_FACTORY = new DefaultBindingCodecTreeFactory(); + private static final BindingRuntimeGenerator BINDING_RUNTIME_GENERATOR = + ServiceLoader.load(BindingRuntimeGenerator.class).findFirst().orElseThrow(); + private static final YangParserFactory YANG_PARSER_FACTORY = ServiceLoader.load(YangParserFactory.class).findFirst() + .orElseThrow(); + private static final BindingCodecTreeFactory CODEC_FACTORY = ServiceLoader.load(BindingCodecTreeFactory.class) + .findFirst().orElseThrow(); static BindingRuntimeContext runtimeContext; static BindingCodecTree codecTree; -- 2.36.6