package com.brightgenerous.cglib.delegate; import static com.brightgenerous.commons.ObjectUtils.*; import net.sf.cglib.core.NamingPolicy; import net.sf.cglib.core.Predicate; import net.sf.cglib.proxy.InterfaceMaker; class CglibDelegaterImpl implements CglibDelegater { { check(); } private static void check() { try { Class.forName(NamingPolicy.class.getName()); Class.forName(Predicate.class.getName()); Class.forName(InterfaceMaker.class.getName()); } catch (ClassNotFoundException e) { throw new RuntimeException(e); } } @Override public Class<?> defineInterface(final String name, Class<?>... supers) { ExtendsInterfaceMaker maker = new ExtendsInterfaceMaker(); { final NamingPolicy np = maker.getNamingPolicy(); maker.setNamingPolicy(new NamingPolicy() { @Override public String getClassName(String prefix, String source, Object key, Predicate names) { if (!source.equals(InterfaceMaker.class.getName())) { return np.getClassName(prefix, source, key, names); } return name; } }); } if (isNotNoSize(supers)) { for (Class<?> sc : supers) { maker.add(sc); } } return maker.create(); } }