X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-dom-codec%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fcodec%2Floader%2FCodecClassLoader.java;fp=binding%2Fmdsal-binding-dom-codec%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fdom%2Fcodec%2Floader%2FCodecClassLoader.java;h=5dfacb9694f6639fa472e79c3f811063928e1cfe;hb=3aa65296b24cb2fe7042a99e581702278451bc35;hp=0a0c9480d719ff46f58bd55aa3346a39976c22bc;hpb=f6f3556fd543e3af5a239f5e8666c6305a6b8f5a;p=mdsal.git 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/loader/CodecClassLoader.java index 0a0c9480d7..5dfacb9694 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/loader/CodecClassLoader.java @@ -7,6 +7,7 @@ */ package org.opendaylight.mdsal.binding.dom.codec.loader; +import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; @@ -145,6 +146,19 @@ public abstract class CodecClassLoader extends ClassLoader { return findClassLoader(requireNonNull(bindingInterface)).doGenerateClass(bindingInterface, suffix, generator); } + public final @NonNull Class getGeneratedClass(final Class bindingInterface, final String suffix) { + final CodecClassLoader loader = findClassLoader(requireNonNull(bindingInterface)); + final String fqcn = generatedClassName(bindingInterface, suffix); + + final Class ret; + synchronized (loader.getClassLoadingLock(fqcn)) { + ret = loader.findLoadedClass(fqcn); + } + + checkArgument(ret != null, "Failed to find generated class %s for %s of %s", fqcn, suffix, bindingInterface); + return ret; + } + /** * Append specified loaders to this class loader for the purposes of looking up generated classes. Note that the * loaders are expected to have required classes already loaded. This is required to support generation of @@ -166,7 +180,7 @@ public abstract class CodecClassLoader extends ClassLoader { private Class doGenerateClass(final Class bindingInterface, final String suffix, final ClassGenerator generator) { - final String fqcn = bindingInterface.getName() + "$$$" + suffix; + final String fqcn = generatedClassName(bindingInterface, suffix); synchronized (getClassLoadingLock(fqcn)) { // Attempt to find a loaded class @@ -228,4 +242,8 @@ public abstract class CodecClassLoader extends ClassLoader { } } } + + private static String generatedClassName(final Class bindingInterface, final String suffix) { + return bindingInterface.getName() + "$$$" + suffix; + } }