Buggy code:
Collection wovenClassNames = new ArrayList ( ) ; IWeaveRequestor requestor = input . getRequestor ( ) ; if ( input . isApplyAtAspectJMungersOnly ( ) ) { ContextToken atAspectJMungersOnly = CompilationAndWeavingContext . enteringPhase ( PROCESSING_ATASPECTJTYPE_MUNGERS_ONLY , "" ) ; requestor . weavingAspects ( ) ; ContextToken aspectToken = CompilationAndWeavingContext . enteringPhase ( WEAVING_ASPECTS , "" ) ; for ( Iterator i = input . getClassFileIterator ( ) ; i . hasNext ( ) ; ) { UnwovenClassFile classFile = ( ( UnwovenClassFile ) ( i . next ( ) ) ) ; String className = classFile . getClassName ( ) ; ResolvedType theType = world . resolve ( className ) ; if ( theType . isAnnotationStyleAspect ( ) ) { BcelObjectType classType = BcelWorld . getBcelObjectType ( theType ) ; if ( classType == null ) { throw new org . aspectj . weaver . BCException ( ( ( ( "Can't<seq2seq4repair_space>find<seq2seq4repair_space>bcel<seq2seq4repair_space>delegate<seq2seq4repair_space>for<seq2seq4repair_space>" + className ) + "<seq2seq4repair_space>type=" ) + ( theType . getClass ( ) ) ) ) ; } LazyClassGen clazz = classType . getLazyClassGen ( ) ; BcelPerClauseAspectAdder selfMunger = new BcelPerClauseAspectAdder ( theType , theType . getPerClause ( ) . getKind ( ) ) ; selfMunger . forceMunge ( clazz , true ) ; classType . finishedWith ( ) ; UnwovenClassFile [ ] newClasses = getClassFilesFor ( clazz ) ; for ( int news = 0 ; news < ( newClasses . length ) ; news ++ ) { requestor . acceptResult ( newClasses [ news ] ) ; } wovenClassNames . add ( classFile . getClassName ( ) ) ; } } requestor . weaveCompleted ( ) ; CompilationAndWeavingContext . leavingPhase ( atAspectJMungersOnly ) ; return wovenClassNames ; } requestor . processingReweavableState ( ) ; ContextToken reweaveToken = CompilationAndWeavingContext . enteringPhase ( PROCESSING_REWEAVABLE_STATE , "" ) ; prepareToProcessReweavableState ( ) ; for ( Iterator i = input . getClassFileIterator ( ) ; i . hasNext ( ) ; ) { UnwovenClassFile classFile = ( ( UnwovenClassFile ) ( i . next ( ) ) ) ; String className = classFile . getClassName ( ) ; BcelObjectType classType = getClassType ( className ) ; if ( classType != null ) { ContextToken tok = CompilationAndWeavingContext . enteringPhase ( PROCESSING_REWEAVABLE_STATE , className ) ; processReweavableStateIfPresent ( className , classType ) ; CompilationAndWeavingContext . leavingPhase ( tok ) ; } } CompilationAndWeavingContext . leavingPhase ( reweaveToken ) ; ContextToken typeMungingToken = CompilationAndWeavingContext . enteringPhase ( PROCESSING_TYPE_MUNGERS , "" ) ; requestor . addingTypeMungers ( ) ; List typesToProcess = new ArrayList ( ) ; for ( Iterator iter = input . getClassFileIterator ( ) ; iter . hasNext ( ) ; ) { UnwovenClassFile clf = ( ( UnwovenClassFile ) ( iter . next ( ) ) ) ; typesToProcess . add ( clf . getClassName ( ) ) ; } while ( ( typesToProcess . size ( ) ) > 0 ) { weaveParentsFor ( typesToProcess , ( ( String ) ( typesToProcess . get ( 0 ) ) ) ) ; } for ( Iterator i = input . getClassFileIterator ( ) ; i . hasNext ( ) ; ) { UnwovenClassFile classFile = ( ( UnwovenClassFile ) ( i . next ( ) ) ) ; String className = classFile . getClassName ( ) ; addNormalTypeMungers ( className ) ; } CompilationAndWeavingContext . leavingPhase ( typeMungingToken ) ; requestor . weavingAspects ( ) ; ContextToken aspectToken = CompilationAndWeavingContext . enteringPhase ( WEAVING_ASPECTS , "" ) ; for ( Iterator i = input . getClassFileIterator ( ) ; i . hasNext ( ) ; ) { UnwovenClassFile classFile = ( ( UnwovenClassFile ) ( i . next ( ) ) ) ; String className = classFile . getClassName ( ) ; ResolvedType theType = world . resolve ( className ) ; if ( theType . isAspect ( ) ) { BcelObjectType classType = BcelWorld . getBcelObjectType ( theType ) ; if ( classType == null ) { ReferenceTypeDelegate theDelegate = ( ( org . aspectj . weaver . ReferenceType ) ( theType ) ) . getDelegate ( ) ; <START_BUG> if ( theDelegate . getClass ( ) . getSimpleName ( ) . equals ( "EclipseSourceType" ) ) <END_BUG> continue ; throw new org . aspectj . weaver . BCException ( ( ( ( "Can't<seq2seq4repair_space>find<seq2seq4repair_space>bcel<seq2seq4repair_space>delegate<seq2seq4repair_space>for<seq2seq4repair_space>" + className ) + "<seq2seq4repair_space>type=" ) + ( theType . getClass ( ) ) ) ) ; } weaveAndNotify ( classFile , classType , requestor ) ; wovenClassNames . add ( className ) ; } } CompilationAndWeavingContext . leavingPhase ( aspectToken ) ; requestor . weavingClasses ( ) ; ContextToken classToken = CompilationAndWeavingContext . enteringPhase ( WEAVING_CLASSES , "" ) ; for ( Iterator i = input . getClassFileIterator ( ) ; i . hasNext ( ) ; ) { UnwovenClassFile classFile = ( ( UnwovenClassFile ) ( i . next ( ) ) ) ; String className = classFile . getClassName ( ) ; ResolvedType theType = world . resolve ( className ) ; if ( ! ( theType . isAspect ( ) ) ) { BcelObjectType classType = BcelWorld . getBcelObjectType ( theType ) ; if ( classType == null ) { throw new org . aspectj . weaver . BCException ( ( ( ( "Can't<seq2seq4repair_space>find<seq2seq4repair_space>bcel<seq2seq4repair_space>delegate<seq2seq4repair_space>for<seq2seq4repair_space>" + className ) + "<seq2seq4repair_space>type=" ) + ( theType . getClass ( ) ) ) ) ; } weaveAndNotify ( classFile , classType , requestor ) ; wovenClassNames . add ( className ) ; } } CompilationAndWeavingContext . leavingPhase ( classToken ) ; addedClasses = new ArrayList ( ) ; deletedTypenames = new ArrayList ( ) ; warnOnUnmatchedAdvice ( ) ; requestor . weaveCompleted ( ) ; CompilationAndWeavingContext . leavingPhase ( weaveToken ) ; return wovenClassNames ; } private void warnOnUnmatchedAdvice ( ) { } private void weaveParentsFor ( List typesForWeaving , String typeToWeave ) { } public void prepareToProcessReweavableState ( ) { } public void processReweavableStateIfPresent ( String className , BcelObjectType classType ) { }

Fix:
if ( theDelegate . getClass ( ) . getName ( ) . endsWith ( "EclipseSourceType" ) )