{
if (manager.isNonAdvisableClassName(className))
{
return null;
}
AOPClassPool pool = (AOPClassPool) manager.registerClassLoader(loader);
CtClass clazz = null;
try
{
clazz = pool.getLocally(className);
}
catch (NotFoundException e)
{
// todo Bill Burke: this scares the shit out of me, but it must be done
// I think it will screw up hotdeployment at some time. Then again, maybe not ;)
ByteArrayClassPath cp = new ByteArrayClassPath(className, classfileBuffer);
pool.insertClassPath(cp);
clazz = pool.getLocally(className);
}
if (clazz.isArray())
{
if (verbose && logger.isDebugEnabled()) logger.debug("cannot compile, isArray: " + className);
pool.flushClass(className);
return null;
}
if (clazz.isInterface())
{
if (verbose && logger.isDebugEnabled()) logger.debug("cannot compile, isInterface: " + className);
pool.flushClass(className);
return null;
}
if (clazz.isFrozen())
{
if (verbose && logger.isDebugEnabled()) logger.debug("warning, isFrozen: " + className);
clazz.defrost();
}
ClassAdvisor advisor = AdvisorFactory.getClassAdvisor(clazz, manager);
Instrumentor instrumentor = InstrumentorFactory.getInstrumentor(
pool,
manager,
manager.dynamicStrategy.getJoinpointClassifier(),
manager.dynamicStrategy.getDynamicTransformationObserver(clazz));
if (!Instrumentor.isTransformable(clazz))
{
if (verbose && logger.isDebugEnabled()) logger.debug("[cannot compile] implements Untransformable: " + className);
pool.flushClass(className);
return null;
}
manager.attachMetaData(advisor, clazz, true);
manager.applyInterfaceIntroductions(advisor, clazz);
boolean transformed = instrumentor.transform(clazz, advisor);
if (transformed)
{
pool.lockInCache(clazz);
if (AspectManager.debugClasses)
{
SecurityActions.debugWriteFile(clazz);
}
byte[] rtn = clazz.toBytecode();
if (AspectManager.getPrune()) clazz.prune();
return rtn;
}
else
{
pool.soften(clazz);
}
return null;
}
catch (Exception ex)
{