public static <T extends Externalizable> T deepClone(T origin) { return origin == null ? null : deepClone(origin, origin.getClass().getClassLoader()); }
protected T doClone() { if (current instanceof DeepCloneable) { return ((DeepCloneable<T>)current).deepClone(); } return (T)ClassUtils.deepClone((Externalizable)current); } }
public PackageBuilder deepClone() { PackageBuilder clone = new PackageBuilder(configuration); clone.rootClassLoader = rootClassLoader; for (Map.Entry<String, PackageRegistry> entry : pkgRegistryMap.entrySet()) { clone.pkgRegistryMap.put(entry.getKey(), entry.getValue().clonePackage(rootClassLoader)); } clone.results.addAll(results); clone.ruleBase = ClassUtils.deepClone(ruleBase, rootClassLoader); clone.globals.putAll(globals); if (dslFiles != null) { clone.dslFiles = new ArrayList<DSLTokenizedMappingFile>(); clone.dslFiles.addAll(dslFiles); } if (cacheTypes != null) { clone.cacheTypes = new HashMap<String, TypeDeclaration>(); clone.cacheTypes.putAll(cacheTypes); } clone.packageAttributes.putAll(packageAttributes); for (Map.Entry<String, List<PackageDescr>> entry : packages.entrySet()) { clone.packages.put(entry.getKey(), new ArrayList<PackageDescr>(entry.getValue())); } clone.packages.putAll(packages); clone.currentRulePackage = currentRulePackage; return clone; }
PackageRegistry clonePackage(ClassLoader classLoader) { Package clonedPkg = ClassUtils.deepClone(pkg, classLoader); clonedPkg.setDialectRuntimeRegistry(pkg.getDialectRuntimeRegistry()); for (Rule rule : pkg.getRules()) { Rule clonedRule = clonedPkg.getRule(rule.getName()); clonedRule.setConsequence(rule.getConsequence()); if (rule.hasNamedConsequences()) { for (Map.Entry<String, Consequence> namedConsequence : rule.getNamedConsequences().entrySet()) { clonedRule.addNamedConsequence(namedConsequence.getKey(), namedConsequence.getValue()); } } } PackageRegistry clone = new PackageRegistry(clonedPkg, dialectRuntimeRegistry, dialectCompiletimeRegistry, typeResolver); clone.setDialect(dialect); return clone; }