Buggy code:
public class HierarchyResolver implements ITypeRequestor { private ReferenceBinding focusType ; private boolean superTypesOnly ; private boolean hasMissingSuperClass ; LookupEnvironment lookupEnvironment ; private CompilerOptions options ; HierarchyBuilder builder ; private ReferenceBinding [ ] typeBindings ; private int typeIndex ; private IGenericType [ ] typeModels ; private static final CompilationUnitDeclaration FakeUnit ; public HierarchyResolver ( INameEnvironment nameEnvironment , Map settings , HierarchyBuilder builder , IProblemFactory problemFactory ) { } public HierarchyResolver ( LookupEnvironment lookupEnvironment , HierarchyBuilder builder ) { } public void accept ( IBinaryType binaryType , PackageBinding packageBinding , AccessRestriction accessRestriction ) { } public void accept ( ICompilationUnit sourceUnit , AccessRestriction accessRestriction ) { } public void accept ( ISourceType [ ] sourceTypes , PackageBinding packageBinding , AccessRestriction accessRestriction ) { } private IType findSuperClass ( IGenericType type , ReferenceBinding typeBinding ) { } private IType [ ] findSuperInterfaces ( IGenericType type , ReferenceBinding typeBinding ) { } private void fixSupertypeBindings ( ) { } private void remember ( IGenericType suppliedType , ReferenceBinding typeBinding ) { } private void remember ( IType type , ReferenceBinding typeBinding ) { } private void rememberAllTypes ( CompilationUnitDeclaration parsedUnit , org . eclipse . jdt . core . ICompilationUnit cu , boolean includeLocalTypes ) { } private void rememberWithMemberTypes ( TypeDeclaration typeDecl , IType typeHandle ) { } private void reportHierarchy ( IType focus , TypeDeclaration focusLocalType , ReferenceBinding binaryTypeBinding ) { if ( focus != null ) { if ( binaryTypeBinding != null ) { this . focusType = binaryTypeBinding ; } else { if ( focusLocalType != null ) { this . focusType = focusLocalType . binding ; } else { char [ ] fullyQualifiedName = focus . getFullyQualifiedName ( ) . toCharArray ( ) ; setFocusType ( CharOperation . splitOn ( '.' , fullyQualifiedName ) ) ; } } } fixSupertypeBindings ( ) ; int objectIndex = - 1 ; for ( int current = this . typeIndex ; current >= 0 ; current -- ) { ReferenceBinding typeBinding = this . typeBindings [ current ] ; if ( ( typeBinding . id ) == ( TypeIds . T_JavaLangObject ) ) { objectIndex = current ; continue ; } IGenericType suppliedType = this . typeModels [ current ] ; if ( ! ( subOrSuperOfFocus ( typeBinding ) ) ) { continue ; } IType superclass ; if ( typeBinding . isInterface ( ) ) { superclass = null ; } else { superclass = findSuperClass ( suppliedType , typeBinding ) ; } IType [ ] superinterfaces = findSuperInterfaces ( suppliedType , typeBinding ) ; this . builder . connect ( suppliedType , this . builder . getHandle ( suppliedType , typeBinding ) , superclass , superinterfaces ) ; } <START_BUG> if ( ( ! ( this . hasMissingSuperClass ) ) && ( objectIndex > ( - 1 ) ) ) { <END_BUG> IGenericType objectType = this . typeModels [ objectIndex ] ; this . builder . connect ( objectType , this . builder . getHandle ( objectType , this . typeBindings [ objectIndex ] ) , null , null ) ; } } private void reset ( ) { } public void resolve ( IGenericType suppliedType ) { } public void resolve ( Openable [ ] openables , HashSet localTypes , IProgressMonitor monitor ) { } private void setEnvironment ( LookupEnvironment lookupEnvironment , HierarchyBuilder builder ) { } public ReferenceBinding setFocusType ( char [ ] [ ] compoundName ) { } public boolean subOrSuperOfFocus ( ReferenceBinding typeBinding ) { } private boolean subTypeOfType ( ReferenceBinding subType , ReferenceBinding typeBinding ) { } protected void worked ( IProgressMonitor monitor , int work ) { } }

Fix:
if ( ( objectIndex > ( - 1 ) ) && ( ( ! ( this . hasMissingSuperClass ) ) || ( ( this . focusType ) == null ) ) ) {