Buggy code:
public Object visit ( ThisOrTargetPointcut node , Object data ) { } public Object visit ( AndPointcut node , Object data ) { } public Object visit ( NotPointcut node , Object data ) { } public Object visit ( OrPointcut node , Object data ) { } } public void weaveAroundClosure ( BcelAdvice munger , boolean hasDynamicTest ) { InstructionFactory fact = getFactory ( ) ; enclosingMethod . setCanInline ( false ) ; int linenumber = getSourceLine ( ) ; LazyMethodGen callbackMethod = extractMethod ( NameMangler . aroundCallbackMethodName ( getSignature ( ) , getEnclosingClass ( ) ) , 0 , munger ) ; BcelVar [ ] adviceVars = munger . getExposedStateAsBcelVars ( true ) ; String closureClassName = NameMangler . makeClosureClassName ( getEnclosingClass ( ) . getType ( ) , getEnclosingClass ( ) . getNewGeneratedNameTag ( ) ) ; Member constructorSig = new org . aspectj . weaver . MemberImpl ( Member . CONSTRUCTOR , UnresolvedType . forName ( closureClassName ) , 0 , "<init>" , "([Ljava//lang//Object;)V" ) ; BcelVar closureHolder = null ; if ( ( getKind ( ) ) == ( PreInitialization ) ) { closureHolder = genTempVar ( AROUND_CLOSURE_TYPE ) ; } InstructionList closureInstantiation = makeClosureInstantiation ( constructorSig , closureHolder ) ; makeClosureClassAndReturnConstructor ( closureClassName , callbackMethod , makeProceedArgumentMap ( adviceVars ) ) ; InstructionList returnConversionCode ; if ( ( getKind ( ) ) == ( PreInitialization ) ) { returnConversionCode = new InstructionList ( ) ; BcelVar stateTempVar = genTempVar ( OBJECTARRAY ) ; closureHolder . appendLoad ( returnConversionCode , fact ) ; returnConversionCode . append ( Utility . createInvoke ( fact , world , AjcMemberMaker . aroundClosurePreInitializationGetter ( ) ) ) ; stateTempVar . appendStore ( returnConversionCode , fact ) ; Type [ ] stateTypes = getSuperConstructorParameterTypes ( ) ; returnConversionCode . append ( ALOAD_0 ) ; for ( int i = 0 , len = stateTypes . length ; i < len ; i ++ ) { UnresolvedType bcelTX = BcelWorld . fromBcel ( stateTypes [ i ] ) ; ResolvedType stateRTX = world . resolve ( bcelTX , true ) ; if ( stateRTX . isMissing ( ) ) { world . getLint ( ) . cantFindType . signal ( new String [ ] { WeaverMessages . format ( CANT_FIND_TYPE_DURING_AROUND_WEAVE_PREINIT , bcelTX . getClassName ( ) ) } , getSourceLocation ( ) , new ISourceLocation [ ] { munger . getSourceLocation ( ) } ) ; } stateTempVar . appendConvertableArrayLoad ( returnConversionCode , fact , i , stateRTX ) ; } } else { returnConversionCode = Utility . createConversion ( getFactory ( ) , BcelWorld . makeBcelType ( munger . getSignature ( ) . getReturnType ( ) ) , callbackMethod . getReturnType ( ) , world . isInJava5Mode ( ) ) ; if ( ! ( isFallsThrough ( ) ) ) { returnConversionCode . append ( InstructionFactory . createReturn ( callbackMethod . getReturnType ( ) ) ) ; } } int bitflags = 0 ; if ( getKind ( ) . isTargetSameAsThis ( ) ) bitflags |= 65536 ; if ( hasThis ( ) ) bitflags |= 4096 ; if ( bindsThis ( munger ) ) bitflags |= 256 ; if ( hasTarget ( ) ) bitflags |= 16 ; if ( bindsTarget ( munger ) ) bitflags |= 1 ; if ( ( ( ( ( munger . getConcreteAspect ( ) ) != null ) && ( munger . getConcreteAspect ( ) . isAnnotationStyleAspect ( ) ) ) && ( ( munger . getDeclaringAspect ( ) ) != null ) ) && ( munger . getDeclaringAspect ( ) . resolve ( world ) . isAnnotationStyleAspect ( ) ) ) { closureInstantiation . append ( fact . createConstant ( new Integer ( bitflags ) ) ) ; closureInstantiation . append ( Utility . createInvoke ( getFactory ( ) , getWorld ( ) , new org . aspectj . weaver . MemberImpl ( Member . METHOD , UnresolvedType . forName ( "org.aspectj.runtime.internal.AroundClosure" ) , Modifier . PUBLIC , "linkClosureAndJoinPoint" , "(I)Lorg//aspectj//lang//ProceedingJoinPoint;" ) ) ) ; } InstructionList advice = new InstructionList ( ) ; advice . append ( munger . getAdviceArgSetup ( this , null , closureInstantiation ) ) ; advice . append ( munger . getNonTestAdviceInstructions ( this ) ) ; advice . append ( returnConversionCode ) ; <START_BUG> if ( ( getKind ( ) ) == ( Shadow . MethodExecution ) ) { <END_BUG> advice . getStart ( ) . addTargeter ( new LineNumberTag ( linenumber ) ) ; } if ( ! hasDynamicTest ) { range . append ( advice ) ; } else { InstructionList callback = makeCallToCallback ( callbackMethod ) ; InstructionList postCallback = new InstructionList ( ) ; if ( terminatesWithReturn ( ) ) { callback . append ( InstructionFactory . createReturn ( callbackMethod . getReturnType ( ) ) ) ; } else { advice . append ( InstructionFactory . createBranchInstruction ( GOTO , postCallback . append ( NOP ) ) ) ; } range . append ( munger . getTestInstructions ( this , advice . getStart ( ) , callback . getStart ( ) , advice . getStart ( ) ) ) ; range . append ( advice ) ; range . append ( callback ) ; range . append ( postCallback ) ; } } InstructionList makeCallToCallback ( LazyMethodGen callbackMethod ) { } private InstructionList makeClosureInstantiation ( Member constructor , BcelVar holder ) { } private IntMap makeProceedArgumentMap ( BcelVar [ ] adviceArgs ) { } private LazyMethodGen makeClosureClassAndReturnConstructor ( String closureClassName , LazyMethodGen callbackMethod , IntMap proceedMap ) { } public LazyMethodGen extractMethod ( String newMethodName , int visibilityModifier , ShadowMunger munger ) { } private void addPreInitializationReturnCode ( LazyMethodGen extractedMethod , Type [ ] superConstructorTypes ) { } private Type [ ] getSuperConstructorParameterTypes ( ) { } private IntMap makeRemap ( ) { } private LazyMethodGen createMethodGen ( String newMethodName , int visibilityModifier ) { } private boolean samePackage ( String p1 , String p2 ) { }

Fix:
if ( ( ( getKind ( ) ) == ( Shadow . MethodExecution ) ) && ( linenumber > 0 ) ) {