handleJitCompilation(
fieldHash, JoinPointType.FIELD_SET, PointcutType.SET, joinPointInfo, declaringClass,
m_targetClass, targetInstance, targetInstance
);
}
JoinPoint joinPoint = joinPointInfo.joinPoint;
// if null or redefined -> create a new join point and cache it
if (joinPoint == null) {
Map joinPointMetaDataMap = s_registry.getJoinPointMetaData(m_classHash, fieldHash);
JoinPointMetaData joinPointMetaData = (JoinPointMetaData)joinPointMetaDataMap.get(PointcutType.SET);
AdviceIndexInfo[] adviceIndexes = joinPointMetaData.adviceIndexes;
List cflowExpressions = joinPointMetaData.cflowExpressions;
Pointcut cflowPointcut = joinPointMetaData.cflowPointcut;
initCflowManagement(cflowPointcut, joinPointInfo);
joinPoint = createFieldJoinPoint(
fieldHash, JoinPointType.FIELD_SET, m_targetClass, adviceIndexes,
joinPointMetaData, targetInstance, targetInstance
);
// set the join point
joinPointInfo.joinPoint = joinPoint;
// update the state
if (adviceIndexes.length == 0) {
joinPointInfo.state = JoinPointState.ADVISED;
} else {
joinPointInfo.state = JoinPointState.HAS_ADVICES;
}
}
// intialize the join point before each usage
joinPoint.setTargetInstance(targetInstance);
if (fieldValue[0] != null) {
((FieldRtti)joinPoint.getRtti()).setFieldValue(fieldValue[0]); // array due to sucky javassist field handling
}
enterCflow(joinPointInfo);
try {
joinPoint.proceed();
} finally {
exitCflow(joinPointInfo);
}
}