Buggy code:
public class PDGSubTreeMapper extends DivideAndConquerMatcher { private PDG pdg1 ; private PDG pdg2 ; private ICompilationUnit iCompilationUnit1 ; private ICompilationUnit iCompilationUnit2 ; private TreeSet < PDGNode > mappedNodesG1 ; private TreeSet < PDGNode > mappedNodesG2 ; private TreeSet < PDGNode > nonMappedNodesG1 ; private TreeSet < PDGNode > nonMappedNodesG2 ; private Map < VariableBindingKeyPair , ArrayList < AbstractVariable > > commonPassedParameters ; private Map < VariableBindingKeyPair , ArrayList < AbstractVariable > > declaredLocalVariablesInMappedNodes ; private Set < AbstractVariable > passedParametersG1 ; private Set < AbstractVariable > passedParametersG2 ; private Set < AbstractVariable > directlyAccessedLocalFieldsG1 ; private Set < AbstractVariable > directlyAccessedLocalFieldsG2 ; private Set < AbstractVariable > indirectlyAccessedLocalFieldsG1 ; private Set < AbstractVariable > indirectlyAccessedLocalFieldsG2 ; private Set < MethodObject > accessedLocalMethodsG1 ; private Set < MethodObject > accessedLocalMethodsG2 ; private Set < AbstractVariable > declaredVariablesInMappedNodesUsedByNonMappedNodesG1 ; private Set < AbstractVariable > declaredVariablesInMappedNodesUsedByNonMappedNodesG2 ; private List < PreconditionViolation > preconditionViolations ; private Set < BindingSignaturePair > renamedVariables ; private Set < PlainVariable > variablesToBeReturnedG1 ; private Set < PlainVariable > variablesToBeReturnedG2 ; private TreeSet < PDGNode > nonMappedPDGNodesG1MovableBefore ; private TreeSet < PDGNode > nonMappedPDGNodesG1MovableAfter ; private TreeSet < PDGNode > nonMappedPDGNodesG1MovableBeforeAndAfter ; private TreeSet < PDGNode > nonMappedPDGNodesG2MovableBefore ; private TreeSet < PDGNode > nonMappedPDGNodesG2MovableAfter ; private TreeSet < PDGNode > nonMappedPDGNodesG2MovableBeforeAndAfter ; private TreeSet < PDGNode > additionallyMatchedNodesG1 ; private TreeSet < PDGNode > additionallyMatchedNodesG2 ; private Set < AbstractVariable > declaredLocalVariablesInAdditionallyMatchedNodesG1 ; private Set < AbstractVariable > declaredLocalVariablesInAdditionallyMatchedNodesG2 ; public PDGSubTreeMapper ( PDG pdg1 , PDG pdg2 , ICompilationUnit iCompilationUnit1 , ICompilationUnit iCompilationUnit2 , ControlDependenceTreeNode controlDependenceSubTreePDG1 , ControlDependenceTreeNode controlDependenceSubTreePDG2 , boolean fullTreeMatch , IProgressMonitor monitor ) { } private void findNonMappedNodes ( TreeSet < PDGNode > allNodes , Set < PDGNode > mappedNodes , Set < PDGNode > nonMappedNodes ) { } private void findDeclaredVariablesInMappedNodesUsedByNonMappedNodes ( PDG pdg , Set < PDGNode > mappedNodes , Set < PDGNode > unmappedNodes , Set < AbstractVariable > variables ) { } private void findPassedParameters ( ) { } private void sortVariables ( List < AbstractVariable > variables1 , List < AbstractVariable > variables2 , List < AbstractVariable > sortedVariables1 , List < AbstractVariable > sortedVariables2 ) { } private String findRenamedVariableName ( AbstractVariable variable ) { } private Set < AbstractVariable > extractPassedParameters ( PDG pdg , Set < PDGNode > mappedNodes ) { } private void findLocallyAccessedFields ( PDG pdg , Set < PDGNode > mappedNodes , ITypeBinding commonSuperclass , Set < AbstractVariable > directlyAccessedFields , Set < AbstractVariable > indirectlyAccessedFields , Set < MethodObject > accessedMethods , List < Expression > expressionsInDifferences , List < AbstractExpression > fieldAccessReplacedWithGetterExpressions ) { } private static Set < ITypeBinding > getAllSuperTypesUpToCommonSuperclass ( ITypeBinding typeBinding , ITypeBinding commonSuperclass ) { Set < ITypeBinding > superTypes = new LinkedHashSet < ITypeBinding > ( ) ; ITypeBinding superTypeBinding = typeBinding . getSuperclass ( ) ; if ( ( superTypeBinding != null ) && ( ! ( superTypeBinding . isEqualTo ( commonSuperclass ) ) ) ) { superTypes . add ( superTypeBinding ) ; superTypes . addAll ( PDGSubTreeMapper . getAllSuperTypesUpToCommonSuperclass ( superTypeBinding , commonSuperclass ) ) ; } ITypeBinding [ ] superInterfaces = typeBinding . getInterfaces ( ) ; for ( ITypeBinding superInterface : superInterfaces ) { <START_BUG> if ( ! ( superTypeBinding . isEqualTo ( commonSuperclass ) ) ) { <END_BUG> superTypes . add ( superInterface ) ; superTypes . addAll ( PDGSubTreeMapper . getAllSuperTypesUpToCommonSuperclass ( superInterface , commonSuperclass ) ) ; } } return superTypes ; } private void getAdditionalLocallyAccessedFieldsAndMethods ( MethodObject calledMethod , ClassObject calledClass , Set < AbstractVariable > accessedFields , Set < MethodObject > accessedMethods ) { } protected Set < PDGNode > getNodesInRegion1 ( PDG pdg , PDGNode controlPredicate , Set < PDGNode > controlPredicateNodesInCurrentLevel , Set < PDGNode > controlPredicateNodesInNextLevel , ControlDependenceTreeNode controlDependenceTreeRoot ) { } protected Set < PDGNode > getNodesInRegion2 ( PDG pdg , PDGNode controlPredicate , Set < PDGNode > controlPredicateNodesInCurrentLevel , Set < PDGNode > controlPredicateNodesInNextLevel , ControlDependenceTreeNode controlDependenceTreeRoot ) { } protected Set < PDGNode > getElseNodesOfSymmetricalIfStatement1 ( PDG pdg , PDGNode controlPredicate , Set < PDGNode > controlPredicateNodesInCurrentLevel , Set < PDGNode > controlPredicateNodesInNextLevel ) { } protected Set < PDGNode > getElseNodesOfSymmetricalIfStatement2 ( PDG pdg , PDGNode controlPredicate , Set < PDGNode > controlPredicateNodesInCurrentLevel , Set < PDGNode > controlPredicateNodesInNextLevel ) { } protected List < ControlDependenceTreeNode > getIfParentChildren1 ( ControlDependenceTreeNode cdtNode ) { } protected List < ControlDependenceTreeNode > getIfParentChildren2 ( ControlDependenceTreeNode cdtNode ) { } private Set < PDGNode > getNodesInRegion ( PDG pdg , PDGNode controlPredicate , Set < PDGNode > controlPredicateNodesInCurrentLevel , Set < PDGNode > controlPredicateNodesInNextLevel , ControlDependenceTreeNode controlDependenceTreeRoot ) { } private Set < PDGNode > getElseNodesOfSymmetricalIfStatement ( PDG pdg , PDGNode controlPredicate , Set < PDGNode > controlPredicateNodesInCurrentLevel , Set < PDGNode > controlPredicateNodesInNextLevel ) { } private List < ControlDependenceTreeNode > getIfParentChildren ( ControlDependenceTreeNode cdtNode ) { } public PDG getPDG1 ( ) { } public PDG getPDG2 ( ) { } public String getMethodName1 ( ) { } public String getMethodName2 ( ) { } public TreeSet < PDGNode > getRemovableNodesG1 ( ) { } public TreeSet < PDGNode > getRemovableNodesG2 ( ) { } public TreeSet < PDGNode > getRemainingNodesG1 ( ) { } public TreeSet < PDGNode > getRemainingNodesG2 ( ) { } public TreeSet < PDGNode > getNonMappedPDGNodesG1MovableBefore ( ) { } public TreeSet < PDGNode > getNonMappedPDGNodesG1MovableAfter ( ) { } public TreeSet < PDGNode > getNonMappedPDGNodesG2MovableBefore ( ) { } public TreeSet < PDGNode > getNonMappedPDGNodesG2MovableAfter ( ) { } public TreeSet < PDGNode > getAdditionallyMatchedNodesG1 ( ) { } public TreeSet < PDGNode > getAdditionallyMatchedNodesG2 ( ) { } public Set < VariableDeclaration > getDeclaredVariablesInMappedNodesUsedByNonMappedNodesG1 ( ) { } public Set < VariableDeclaration > getDeclaredVariablesInMappedNodesUsedByNonMappedNodesG2 ( ) { } public Set < AbstractVariable > getDirectlyAccessedLocalFieldsG1 ( ) { } public Set < AbstractVariable > getDirectlyAccessedLocalFieldsG2 ( ) { } public Set < AbstractVariable > getIndirectlyAccessedLocalFieldsG1 ( ) { } public Set < AbstractVariable > getIndirectlyAccessedLocalFieldsG2 ( ) { }

Fix:
if ( ! ( superInterface . isEqualTo ( commonSuperclass ) ) ) {