Buggy code:
public class BcelTypeMunger extends ConcreteTypeMunger { public BcelTypeMunger ( ResolvedTypeMunger munger , ResolvedType aspectType ) { } public String toString ( ) { } public boolean munge ( BcelClassWeaver weaver ) { ContextToken tok = CompilationAndWeavingContext . enteringPhase ( MUNGING_WITH , this ) ; boolean changed = false ; boolean worthReporting = true ; if ( ( munger . getKind ( ) ) == ( ResolvedTypeMunger . Field ) ) { changed = mungeNewField ( weaver , ( ( NewFieldTypeMunger ) ( munger ) ) ) ; } else if ( ( munger . getKind ( ) ) == ( ResolvedTypeMunger . Method ) ) { changed = mungeNewMethod ( weaver , ( ( NewMethodTypeMunger ) ( munger ) ) ) ; } else if ( ( munger . getKind ( ) ) == ( ResolvedTypeMunger . PerObjectInterface ) ) { changed = mungePerObjectInterface ( weaver , ( ( PerObjectInterfaceTypeMunger ) ( munger ) ) ) ; worthReporting = false ; } else if ( ( munger . getKind ( ) ) == ( ResolvedTypeMunger . PerTypeWithinInterface ) ) { changed = mungePerTypeWithinTransformer ( weaver ) ; worthReporting = false ; } else if ( ( munger . getKind ( ) ) == ( ResolvedTypeMunger . PrivilegedAccess ) ) { changed = mungePrivilegedAccess ( weaver , ( ( PrivilegedAccessMunger ) ( munger ) ) ) ; worthReporting = false ; } else if ( ( munger . getKind ( ) ) == ( ResolvedTypeMunger . Constructor ) ) { changed = mungeNewConstructor ( weaver , ( ( NewConstructorTypeMunger ) ( munger ) ) ) ; } else if ( ( munger . getKind ( ) ) == ( ResolvedTypeMunger . Parent ) ) { changed = mungeNewParent ( weaver , ( ( NewParentTypeMunger ) ( munger ) ) ) ; } else if ( ( munger . getKind ( ) ) == ( ResolvedTypeMunger . AnnotationOnType ) ) { changed = mungeNewAnnotationOnType ( weaver , ( ( AnnotationOnTypeMunger ) ( munger ) ) ) ; } else { throw new RuntimeException ( "unimplemented" ) ; } if ( changed && ( munger . changesPublicSignature ( ) ) ) { <START_BUG> WeaverStateInfo info = weaver . getLazyClassGen ( ) . getOrCreateWeaverStateInfo ( weaver . getReweavableMode ( ) ) ; <END_BUG> info . addConcreteMunger ( this ) ; } if ( changed && worthReporting ) { if ( munger . getKind ( ) . equals ( Parent ) ) { AsmRelationshipProvider . getDefault ( ) . addRelationship ( weaver . getLazyClassGen ( ) . getType ( ) , munger , getAspectType ( ) ) ; } else { AsmRelationshipProvider . getDefault ( ) . addRelationship ( weaver . getLazyClassGen ( ) . getType ( ) , munger , getAspectType ( ) ) ; } } if ( ( ( changed && worthReporting ) && ( ( munger ) != null ) ) && ( ! ( weaver . getWorld ( ) . getMessageHandler ( ) . isIgnoring ( WEAVEINFO ) ) ) ) { String tName = weaver . getLazyClassGen ( ) . getType ( ) . getSourceLocation ( ) . getSourceFile ( ) . getName ( ) ; if ( ( tName . indexOf ( "no<seq2seq4repair_space>debug<seq2seq4repair_space>info<seq2seq4repair_space>available" ) ) != ( - 1 ) ) tName = "no<seq2seq4repair_space>debug<seq2seq4repair_space>info<seq2seq4repair_space>available" ; else tName = getShortname ( weaver . getLazyClassGen ( ) . getType ( ) . getSourceLocation ( ) . getSourceFile ( ) . getPath ( ) ) ; String fName = getShortname ( getAspectType ( ) . getSourceLocation ( ) . getSourceFile ( ) . getPath ( ) ) ; if ( munger . getKind ( ) . equals ( Parent ) ) { NewParentTypeMunger parentTM = ( ( NewParentTypeMunger ) ( munger ) ) ; if ( parentTM . getNewParent ( ) . isInterface ( ) ) { weaver . getWorld ( ) . getMessageHandler ( ) . handleMessage ( WeaveMessage . constructWeavingMessage ( WEAVEMESSAGE_DECLAREPARENTSIMPLEMENTS , new String [ ] { weaver . getLazyClassGen ( ) . getType ( ) . getName ( ) , tName , parentTM . getNewParent ( ) . getName ( ) , fName } , weaver . getLazyClassGen ( ) . getClassName ( ) , getAspectType ( ) . getName ( ) ) ) ; } else { weaver . getWorld ( ) . getMessageHandler ( ) . handleMessage ( WeaveMessage . constructWeavingMessage ( WEAVEMESSAGE_DECLAREPARENTSEXTENDS , new String [ ] { weaver . getLazyClassGen ( ) . getType ( ) . getName ( ) , tName , parentTM . getNewParent ( ) . getName ( ) , fName } ) ) ; } } else { weaver . getWorld ( ) . getMessageHandler ( ) . handleMessage ( WeaveMessage . constructWeavingMessage ( WEAVEMESSAGE_ITD , new String [ ] { weaver . getLazyClassGen ( ) . getType ( ) . getName ( ) , tName , munger . getKind ( ) . toString ( ) . toLowerCase ( ) , getAspectType ( ) . getName ( ) , ( ( fName + ":'" ) + ( munger . getSignature ( ) ) ) + "'" } , weaver . getLazyClassGen ( ) . getClassName ( ) , getAspectType ( ) . getName ( ) ) ) ; } } CompilationAndWeavingContext . leavingPhase ( tok ) ; return changed ; } private String getShortname ( String path ) { } private boolean mungeNewAnnotationOnType ( BcelClassWeaver weaver , AnnotationOnTypeMunger munger ) { } private boolean mungeNewParent ( BcelClassWeaver weaver , NewParentTypeMunger munger ) { } private boolean enforceDecpRule1_abstractMethodsImplemented ( BcelClassWeaver weaver , ISourceLocation mungerLoc , LazyClassGen newParentTarget , ResolvedType newParent ) { } private boolean enforceDecpRule2_cantExtendFinalClass ( BcelClassWeaver weaver , ISourceLocation mungerLoc , LazyClassGen newParentTarget , ResolvedType newParent ) { } private boolean enforceDecpRule3_visibilityChanges ( BcelClassWeaver weaver , ResolvedType newParent , ResolvedMember superMethod , LazyMethodGen subMethod ) { } private boolean enforceDecpRule4_compatibleReturnTypes ( BcelClassWeaver weaver , ResolvedMember superMethod , LazyMethodGen subMethod ) { }

Fix:
WeaverStateInfo info = weaver . getLazyClassGen ( ) . getOrCreateWeaverStateInfo ( BcelClassWeaver . getReweavableMode ( ) ) ;