package org.netbeans.gradle.project.others; import java.util.concurrent.atomic.AtomicReference; import org.jtrim.utils.ExceptionHelper; public final class PluginClass implements ClassFinder { private final PluginClassFactory classFactory; private final String className; private final AtomicReference<Class<?>> loadedClass; public PluginClass(PluginClassFactory classFactory, String className) { ExceptionHelper.checkNotNullArgument(classFactory, "classFactory"); ExceptionHelper.checkNotNullArgument(className, "className"); this.classFactory = classFactory; this.className = className; this.loadedClass = new AtomicReference<>(); } @Override public Class<?> tryGetClass() { Class<?> result = loadedClass.get(); if (result == null) { loadedClass.compareAndSet(null, classFactory.tryFindClass(className)); result = loadedClass.get(); } return result; } }