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 ; 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 remember ( IGenericType suppliedType , ReferenceBinding typeBinding ) { } private void remember ( IType type , ReferenceBinding typeBinding ) { if ( ( ( CompilationUnit ) ( type . getCompilationUnit ( ) ) ) . isOpen ( ) ) { try { IGenericType genericType = ( ( IGenericType ) ( ( ( JavaElement ) ( type ) ) . getElementInfo ( ) ) ) ; remember ( genericType , typeBinding ) ; } catch ( JavaModelException e ) { return ; } } else { if ( typeBinding == null ) return ; TypeDeclaration typeDeclaration = ( ( SourceTypeBinding ) ( typeBinding ) ) . scope . referenceType ( ) ; char [ ] superclassName = null ; TypeReference superclass ; <START_BUG> if ( ( ( typeDeclaration . bits ) & ( IsAnonymousTypeMASK ) ) != 0 ) { <END_BUG> superclass = typeDeclaration . allocation . type ; } else { superclass = typeDeclaration . superclass ; } if ( superclass != null ) { char [ ] [ ] typeName = superclass . getTypeName ( ) ; superclassName = ( typeName == null ) ? null : typeName [ ( ( typeName . length ) - 1 ) ] ; } char [ ] [ ] superInterfaceNames = null ; TypeReference [ ] superInterfaces = typeDeclaration . superInterfaces ; if ( superInterfaces != null ) { int length = superInterfaces . length ; superInterfaceNames = new char [ length ] [ ] ; for ( int i = 0 ; i < length ; i ++ ) { TypeReference superInterface = superInterfaces [ i ] ; char [ ] [ ] typeName = superInterface . getTypeName ( ) ; superInterfaceNames [ i ] = typeName [ ( ( typeName . length ) - 1 ) ] ; } } HierarchyType hierarchyType = new HierarchyType ( type , typeDeclaration . name , typeDeclaration . binding . modifiers , superclassName , superInterfaceNames ) ; remember ( hierarchyType , typeDeclaration . binding ) ; } } 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 , CompilationUnitDeclaration parsedUnit , ReferenceBinding binaryTypeBinding ) { } 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 ( ( ( typeDeclaration . bits ) & ( ASTNode . IsAnonymousType ) ) != 0 ) {