private ConByConInfo doResolveConstructorCallerConstructorInfo(Class<?> callingClass, int callingIndex, String calledClass, long calledConHash)
{
try
{
Constructor<?> callingConstructor = constructors[callingIndex];
if (callingConstructor == null) throw new RuntimeException("Unable to figure out calling method of a caller pointcut");
Class<?> called = SecurityActions.getClassLoader(callingClass).loadClass(calledClass);
Constructor<?> calledCon = MethodHashing.findConstructorByHash(called, calledConHash);
if (calledCon == null) throw new RuntimeException("Unable to figure out calledcon of a caller pointcut");
boolean matched = false;
ClassifiedBindingAndPointcutCollection bindingCol = manager.getBindingCollection();
for (AdviceBinding binding : bindingCol.getConstructorCallBindings())
{
if (binding.getPointcut().matchesCall(this, callingConstructor, called, calledCon))
{
addConstructorCalledByConPointcut(callingIndex, calledClass, calledConHash, binding);
matched = true;
}
}
if (!matched) initializeConCalledByConEmptyChain(callingIndex, calledClass, calledConHash);
ConByConInfo info = initializeConCalledByConInterceptorsMap(callingClass, callingIndex, calledClass, calledConHash, calledCon);
ArrayList<AdviceBinding> bindings = getConCalledByConBindings(callingIndex, calledClass, calledConHash);
bindConCalledByConInterceptorChain(bindings, callingIndex, calledClass, calledConHash);
return info;
}
catch (Exception x)
{
throw new RuntimeException(x);
}
}