From ca8ea99b492d3cf0fcce2b8fc90af5abea9d95a2 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 18 Feb 2020 09:58:07 +0100 Subject: [PATCH] Refactor GeneratedClassLoadingStrategy This class holds two implementations, each of which is a singleton. Make sure we lazy-load implementation classes so that the CHA can be more effective. JIRA: MDSAL-392 Change-Id: Ia31f63d877ec1025e1a06bf8676d918857e6fd1e Signed-off-by: Robert Varga --- .../impl/GeneratedClassLoadingStrategy.java | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/GeneratedClassLoadingStrategy.java b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/GeneratedClassLoadingStrategy.java index 66d90ed273..f6a09f7803 100644 --- a/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/GeneratedClassLoadingStrategy.java +++ b/binding/mdsal-binding-generator-impl/src/main/java/org/opendaylight/mdsal/binding/generator/impl/GeneratedClassLoadingStrategy.java @@ -7,41 +7,44 @@ */ package org.opendaylight.mdsal.binding.generator.impl; +import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.mdsal.binding.generator.api.ClassLoadingStrategy; import org.opendaylight.mdsal.binding.model.api.Type; import org.opendaylight.yangtools.util.ClassLoaderUtils; public abstract class GeneratedClassLoadingStrategy implements ClassLoadingStrategy { + private static final class AlwaysFailClassLoadingStrategy extends GeneratedClassLoadingStrategy { + static final @NonNull AlwaysFailClassLoadingStrategy INSTANCE = new AlwaysFailClassLoadingStrategy(); - private static final GeneratedClassLoadingStrategy TCCL_STRATEGY = new TCCLClassLoadingStrategy(); - - private static final GeneratedClassLoadingStrategy ALWAYS_FAIL_STRATEGY = new GeneratedClassLoadingStrategy() { @Override public Class loadClass(final String fullyQualifiedName) throws ClassNotFoundException { throw new ClassNotFoundException(fullyQualifiedName); } - }; + } - @Override - public Class loadClass(final Type type) throws ClassNotFoundException { - return loadClass(type.getFullyQualifiedName()); + private static final class TCCLClassLoadingStrategy extends GeneratedClassLoadingStrategy { + static final @NonNull TCCLClassLoadingStrategy INSTANCE = new TCCLClassLoadingStrategy(); + + @Override + public Class loadClass(final String fullyQualifiedName) throws ClassNotFoundException { + return ClassLoaderUtils.loadClassWithTCCL(fullyQualifiedName); + } } - @Override - public abstract Class loadClass(String fullyQualifiedName) throws ClassNotFoundException; + protected GeneratedClassLoadingStrategy() { - public static final GeneratedClassLoadingStrategy getTCCLClassLoadingStrategy() { - return TCCL_STRATEGY; } - public static final GeneratedClassLoadingStrategy getAlwaysFailClassLoadingStrategy() { - return ALWAYS_FAIL_STRATEGY; + public static final @NonNull GeneratedClassLoadingStrategy getTCCLClassLoadingStrategy() { + return TCCLClassLoadingStrategy.INSTANCE; } - private static final class TCCLClassLoadingStrategy extends GeneratedClassLoadingStrategy { - @Override - public Class loadClass(final String fullyQualifiedName) throws ClassNotFoundException { - return ClassLoaderUtils.loadClassWithTCCL(fullyQualifiedName); - } + public static final @NonNull GeneratedClassLoadingStrategy getAlwaysFailClassLoadingStrategy() { + return AlwaysFailClassLoadingStrategy.INSTANCE; + } + + @Override + public Class loadClass(final Type type) throws ClassNotFoundException { + return loadClass(type.getFullyQualifiedName()); } } -- 2.36.6