Program: 9590
Project: 9590
Buggy source:
private void weaveInterTypeDeclarations(SourceTypeBinding sourceType,Collection typeMungers,Collection declareParents,boolean skipInners){
  ResolvedTypeX onType=factory.fromEclipse(sourceType);
  onType.clearInterTypeMungers();
  for (Iterator i=declareParents.iterator(); i.hasNext(); ) {
    doDeclareParents((DeclareParents)i.next(),sourceType);
  }
  for (Iterator i=typeMungers.iterator(); i.hasNext(); ) {
    EclipseTypeMunger munger=(EclipseTypeMunger)i.next();
    if (munger.matches(onType)) {
      onType.addInterTypeMunger(munger);
    }
  }
  for (Iterator i=onType.getInterTypeMungers().iterator(); i.hasNext(); ) {
    EclipseTypeMunger munger=(EclipseTypeMunger)i.next();
    munger.munge(sourceType);
  }
  if (skipInners)   return;
  ReferenceBinding[] memberTypes=sourceType.memberTypes;
  for (int i=0, length=memberTypes.length; i < length; i++) {
    if (memberTypes[i] instanceof SourceTypeBinding) {
      weaveInterTypeDeclarations((SourceTypeBinding)memberTypes[i],typeMungers,declareParents,false);
    }
  }
}

Fixed version (ground truth):
private void weaveInterTypeDeclarations(SourceTypeBinding sourceType,Collection typeMungers,Collection declareParents,boolean skipInners){
  ResolvedTypeX onType=factory.fromEclipse(sourceType);
  WeaverStateInfo info=onType.getWeaverState();
  if (info != null && !info.isOldStyle()) {
    Collection mungers=onType.getWeaverState().getTypeMungers(onType);
    for (Iterator i=mungers.iterator(); i.hasNext(); ) {
      ConcreteTypeMunger m=(ConcreteTypeMunger)i.next();
      EclipseTypeMunger munger=factory.makeEclipseTypeMunger(m);
      if (munger.munge(sourceType)) {
        if (onType.isInterface() && munger.getMunger().needsAccessToTopmostImplementor()) {
          if (!onType.getWorld().getCrosscuttingMembersSet().containsAspect(munger.getAspectType())) {
            dangerousInterfaces.put(onType,"String_Node_Str" + onType + "String_Node_Str"+ munger.getAspectType());
          }
        }
      }
    }
    return;
  }
  for (Iterator i=dangerousInterfaces.entrySet().iterator(); i.hasNext(); ) {
    Map.Entry entry=(Map.Entry)i.next();
    ResolvedTypeX interfaceType=(ResolvedTypeX)entry.getKey();
    if (onType.isTopmostImplementor(interfaceType)) {
      factory.showMessage(IMessage.ERROR,onType + "String_Node_Str" + entry.getValue(),onType.getSourceLocation(),null);
    }
  }
  boolean needOldStyleWarning=(info != null && info.isOldStyle());
  onType.clearInterTypeMungers();
  for (Iterator i=declareParents.iterator(); i.hasNext(); ) {
    doDeclareParents((DeclareParents)i.next(),sourceType);
  }
  for (Iterator i=typeMungers.iterator(); i.hasNext(); ) {
    EclipseTypeMunger munger=(EclipseTypeMunger)i.next();
    if (munger.matches(onType)) {
      if (needOldStyleWarning) {
        factory.showMessage(IMessage.WARNING,"String_Node_Str" + onType + "String_Node_Str",onType.getSourceLocation(),null);
        needOldStyleWarning=false;
      }
      onType.addInterTypeMunger(munger);
    }
  }
  for (Iterator i=onType.getInterTypeMungers().iterator(); i.hasNext(); ) {
    EclipseTypeMunger munger=(EclipseTypeMunger)i.next();
    munger.munge(sourceType);
  }
  if (skipInners)   return;
  ReferenceBinding[] memberTypes=sourceType.memberTypes;
  for (int i=0, length=memberTypes.length; i < length; i++) {
    if (memberTypes[i] instanceof SourceTypeBinding) {
      weaveInterTypeDeclarations((SourceTypeBinding)memberTypes[i],typeMungers,declareParents,false);
    }
  }
}