@ -348,29 +348,36 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
@@ -348,29 +348,36 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut
}
private ShadowMatch getShadowMatch ( Method targetMethod , Method originalMethod ) {
// Avoid lock contention for known Methods through concurrent access...
ShadowMatch shadowMatch = this . shadowMatchCache . get ( targetMethod ) ;
if ( shadowMatch = = null ) {
try {
shadowMatch = this . pointcutExpression . matchesMethodExecution ( targetMethod ) ;
}
catch ( ReflectionWorld . ReflectionWorldException ex ) {
// Failed to introspect target method, probably because it has been loaded
// in a special ClassLoader. Let's try the original method instead...
if ( targetMethod = = originalMethod ) {
shadowMatch = new ShadowMatchImpl ( org . aspectj . util . FuzzyBoolean . NO , null , null , null ) ;
}
else {
synchronized ( this . shadowMatchCache ) {
// Not found - now check again with full lock...
shadowMatch = this . shadowMatchCache . get ( targetMethod ) ;
if ( shadowMatch = = null ) {
try {
shadowMatch = this . pointcutExpression . matchesMethodExecution ( original Method) ;
shadowMatch = this . pointcutExpression . matchesMethodExecution ( targetMethod ) ;
}
catch ( ReflectionWorld . ReflectionWorldException ex2 ) {
// Could neither introspect the target class nor the proxy class ->
// let's simply consider this method as non-matching.
shadowMatch = new ShadowMatchImpl ( org . aspectj . util . FuzzyBoolean . NO , null , null , null ) ;
catch ( ReflectionWorld . ReflectionWorldException ex ) {
// Failed to introspect target method, probably because it has been loaded
// in a special ClassLoader. Let's try the original method instead...
if ( targetMethod = = originalMethod ) {
shadowMatch = new ShadowMatchImpl ( org . aspectj . util . FuzzyBoolean . NO , null , null , null ) ;
}
else {
try {
shadowMatch = this . pointcutExpression . matchesMethodExecution ( originalMethod ) ;
}
catch ( ReflectionWorld . ReflectionWorldException ex2 ) {
// Could neither introspect the target class nor the proxy class ->
// let's simply consider this method as non-matching.
shadowMatch = new ShadowMatchImpl ( org . aspectj . util . FuzzyBoolean . NO , null , null , null ) ;
}
}
}
this . shadowMatchCache . put ( targetMethod , shadowMatch ) ;
}
}
this . shadowMatchCache . put ( targetMethod , shadowMatch ) ;
}
return shadowMatch ;
}