first commit

This commit is contained in:
2025-07-28 13:56:49 +05:30
commit e9eb805edb
3438 changed files with 520990 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
package net.sf.jasperreports.engine.design;
import java.io.Serializable;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.fill.JREvaluator;
import net.sf.jasperreports.engine.util.JRClassLoader;
import net.sf.jasperreports.engine.util.JRProperties;
import org.apache.commons.collections.ReferenceMap;
public abstract class JRAbstractJavaCompiler extends JRAbstractCompiler {
public static final String PROPERTY_EVALUATOR_CLASS_REFERENCE_FIX_ENABLED = "net.sf.jasperreports.evaluator.class.reference.fix.enabled";
private static ThreadLocal classFromBytesRef = new ThreadLocal();
private static Object CLASS_CACHE_NULL_KEY = new Object();
private static Map classCache = (Map)new ReferenceMap(2, 1);
protected JRAbstractJavaCompiler(boolean needsSourceFiles) {
super(needsSourceFiles);
}
protected JREvaluator loadEvaluator(Serializable compileData, String className) throws JRException {
JREvaluator evaluator = null;
try {
Class clazz = getClassFromCache(className);
if (clazz == null) {
clazz = JRClassLoader.loadClassFromBytes(className, (byte[])compileData);
putClassInCache(className, clazz);
}
if (JRProperties.getBooleanProperty("net.sf.jasperreports.evaluator.class.reference.fix.enabled"))
classFromBytesRef.set(clazz);
evaluator = (JREvaluator)clazz.newInstance();
} catch (Exception e) {
throw new JRException("Error loading expression class : " + className, e);
}
return evaluator;
}
protected static Object classCacheKey() {
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
Object key = (contextClassLoader == null) ? CLASS_CACHE_NULL_KEY : contextClassLoader;
return key;
}
protected static synchronized Class getClassFromCache(String className) {
Object key = classCacheKey();
Map contextMap = (Map)classCache.get(key);
Class cachedClass = null;
if (contextMap != null)
cachedClass = (Class)contextMap.get(className);
return cachedClass;
}
protected static synchronized void putClassInCache(String className, Class loadedClass) {
ReferenceMap referenceMap;
Object key = classCacheKey();
Map contextMap = (Map)classCache.get(key);
if (contextMap == null) {
referenceMap = new ReferenceMap(0, 1);
classCache.put(key, referenceMap);
}
referenceMap.put(className, loadedClass);
}
}