Program: 87367
Project: 87367
Buggy source:
@Override public String getLocation(final OverlayWidget parentOverlayWidget,final OverlayWidget newChild,final String languageIso,final boolean childrenIncluded){
  if (parentOverlayWidget == null)   return null;
  final List<OverlayWidget> path=parentOverlayWidget.getParentOverlayWidgets();
  path.add(parentOverlayWidget);
  if (newChild != null) {
    path.add(newChild);
  }
  final StringBuilder location=new StringBuilder();
  final String splitter=getSplitter(languageIso);
  for (  final OverlayWidget aw : path) {
    final Collection<Class<? extends OverlayWidget>> filtered=Collections2.filter(hiddenAmendableWidgets,new Predicate<Class<? extends OverlayWidget>>(){
      @Override public boolean apply(      Class<? extends OverlayWidget> input){
        return !ClassUtils.isAssignableFrom(input.getClass(),aw.getClass());
      }
    }
);
    if (!filtered.contains(aw.getClass()) || showAmendableWidgets.contains(aw.getClass())) {
      if (aw.getParentOverlayWidget() == null) {
        location.append(getRootNotation(aw,languageIso));
      }
 else {
        if (aw.getParentOverlayWidget().getType().equalsIgnoreCase(aw.getType())) {
          location.append(getSubNotation(aw,languageIso));
        }
 else {
          location.append(getNotation(aw,languageIso));
        }
        final String num=getNum(aw,languageIso,false);
        if (num != null && !("String_Node_Str".equals(num.trim()))) {
          location.append("String_Node_Str").append(num);
          if (aw.isIntroducedByAnAmendment())           location.append("String_Node_Str").append(getNewNotation(languageIso));
        }
      }
      location.append(splitter);
    }
    if (hideUnderLayingAmendableWidgets.contains(aw.getClass())) {
      break;
    }
  }
  final String locationString=location.toString().endsWith(splitter) ? location.substring(0,location.length() - splitter.length()) : location.toString();
  return locationString.trim();
}

Fixed version (ground truth):
@Override public String getLocation(final OverlayWidget overlayWidget,final String languageIso,final boolean childrenIncluded){
  if (overlayWidget == null)   return null;
  final List<OverlayWidget> path=overlayWidget.getParentOverlayWidgets();
  path.add(overlayWidget);
  final StringBuilder location=new StringBuilder();
  final String splitter=getSplitter(languageIso);
  for (  final OverlayWidget aw : path) {
    final Collection<Class<? extends OverlayWidget>> filtered=Collections2.filter(hiddenAmendableWidgets,new Predicate<Class<? extends OverlayWidget>>(){
      @Override public boolean apply(      Class<? extends OverlayWidget> input){
        return !ClassUtils.isAssignableFrom(input.getClass(),aw.getClass());
      }
    }
);
    if (!filtered.contains(aw.getClass()) || showAmendableWidgets.contains(aw.getClass())) {
      if (aw.getParentOverlayWidget() == null) {
        location.append(getRootNotation(aw,languageIso));
      }
 else {
        if (aw.getParentOverlayWidget().getType().equalsIgnoreCase(aw.getType())) {
          location.append(getSubNotation(aw,languageIso));
        }
 else {
          location.append(getNotation(aw,languageIso));
        }
        final String num=getNum(aw,languageIso,false);
        if (num != null && !("String_Node_Str".equals(num.trim()))) {
          location.append("String_Node_Str").append(num);
          if (aw.isIntroducedByAnAmendment())           location.append("String_Node_Str").append(getNewNotation(languageIso));
        }
      }
      location.append(splitter);
    }
    if (hideUnderLayingAmendableWidgets.contains(aw.getClass())) {
      break;
    }
  }
  final String locationString=location.toString().endsWith(splitter) ? location.substring(0,location.length() - splitter.length()) : location.toString();
  return locationString.trim();
}