* Compiles a completely new join point instance based on the new redefined model.
*
* @param changeSetElement the change set item
*/
private static void compileNewJoinPoint(final ChangeSet.Element changeSetElement) {
final CompilationInfo compilationInfo = changeSetElement.getCompilationInfo();
final MatchingJoinPointInfo joinPointInfo = changeSetElement.getJoinPointInfo();
final ClassLoader loader = joinPointInfo.getJoinPointClass().getClassLoader();
final AdviceInfoContainer newAdviceContainer = JoinPointManager.getAdviceInfoContainerForJoinPoint(
joinPointInfo.getExpressionContext(),
loader
);
final CompilationInfo.Model redefinedModel = new CompilationInfo.Model(
compilationInfo.getInitialModel().getEmittedJoinPoint(), // copy the reference since it is the same
newAdviceContainer,
compilationInfo.getRedefinitionCounter(),
compilationInfo.getInitialModel().getThisClassInfo()
);
JoinPointFactory.compileJoinPointAndAttachToClassLoader(redefinedModel, loader);
compilationInfo.setRedefinedModel(redefinedModel);
JoinPointFactory.addCompilationInfo(joinPointInfo.getJoinPointClass(), compilationInfo);
}