Buggy code:
} } else { if ( astNode instanceof CompletionOnSingleNameReference ) { char [ ] token = ( ( CompletionOnSingleNameReference ) ( astNode ) ) . token ; findVariablesAndMethods ( token , scope , ( ( CompletionOnSingleNameReference ) ( astNode ) ) , scope ) ; findTypesAndPackages ( token , scope ) ; } else { if ( astNode instanceof CompletionOnSingleTypeReference ) { char [ ] token = ( ( CompletionOnSingleTypeReference ) ( astNode ) ) . token ; if ( qualifiedBinding == null ) { findTypesAndPackages ( token , scope ) ; } else { findMemberTypes ( token , ( ( ReferenceBinding ) ( qualifiedBinding ) ) , scope , scope . enclosingSourceType ( ) ) ; } } else { if ( astNode instanceof CompletionOnQualifiedNameReference ) { insideQualifiedReference = true ; CompletionOnQualifiedNameReference ref = ( ( CompletionOnQualifiedNameReference ) ( astNode ) ) ; char [ ] token = ref . completionIdentifier ; long completionPosition = ref . sourcePositions [ ( ( ref . sourcePositions . length ) - 1 ) ] ; if ( qualifiedBinding instanceof VariableBinding ) { setSourceRange ( ( ( int ) ( completionPosition > > > 32 ) ) , ( ( int ) ( completionPosition ) ) ) ; TypeBinding receiverType = ( ( VariableBinding ) ( qualifiedBinding ) ) . type ; if ( receiverType != null ) { findFieldsAndMethods ( token , receiverType , scope , ref , scope , false ) ; } } else { if ( qualifiedBinding instanceof ReferenceBinding ) { ReferenceBinding receiverType = ( ( ReferenceBinding ) ( qualifiedBinding ) ) ; setSourceRange ( ( ( int ) ( completionPosition > > > 32 ) ) , ( ( int ) ( completionPosition ) ) ) ; findMemberTypes ( token , receiverType , scope , scope . enclosingSourceType ( ) ) ; findClassField ( token , ( ( TypeBinding ) ( qualifiedBinding ) ) ) ; findFields ( token , receiverType , scope , new ObjectVector ( ) , new ObjectVector ( ) , true , ref , scope , false ) ; findMethods ( token , null , receiverType , scope , new ObjectVector ( ) , true , false , false , ref , scope , false ) ; } else { if ( qualifiedBinding instanceof PackageBinding ) { setSourceRange ( astNode . sourceStart , ( ( int ) ( completionPosition ) ) ) ; findTypesAndSubpackages ( token , ( ( PackageBinding ) ( qualifiedBinding ) ) ) ; } } } } else { if ( astNode instanceof CompletionOnQualifiedTypeReference ) { insideQualifiedReference = true ; CompletionOnQualifiedTypeReference ref = ( ( CompletionOnQualifiedTypeReference ) ( astNode ) ) ; char [ ] token = ref . completionIdentifier ; long completionPosition = ref . sourcePositions [ ref . tokens . length ] ; if ( qualifiedBinding instanceof ReferenceBinding ) { setSourceRange ( ( ( int ) ( completionPosition > > > 32 ) ) , ( ( int ) ( completionPosition ) ) ) ; findMemberTypes ( token , ( ( ReferenceBinding ) ( qualifiedBinding ) ) , scope , scope . enclosingSourceType ( ) ) ; } else { if ( qualifiedBinding instanceof PackageBinding ) { setSourceRange ( astNode . sourceStart , ( ( int ) ( completionPosition ) ) ) ; findTypesAndSubpackages ( token , ( ( PackageBinding ) ( qualifiedBinding ) ) ) ; } } } else { if ( astNode instanceof CompletionOnMemberAccess ) { CompletionOnMemberAccess access = ( ( CompletionOnMemberAccess ) ( astNode ) ) ; long completionPosition = access . nameSourcePosition ; setSourceRange ( ( ( int ) ( completionPosition > > > 32 ) ) , ( ( int ) ( completionPosition ) ) ) ; findFieldsAndMethods ( access . token , ( ( TypeBinding ) ( qualifiedBinding ) ) , scope , access , scope , false ) ; } else { if ( astNode instanceof CompletionOnMessageSend ) { CompletionOnMessageSend messageSend = ( ( CompletionOnMessageSend ) ( astNode ) ) ; TypeBinding [ ] argTypes = computeTypes ( messageSend . arguments , ( ( BlockScope ) ( scope ) ) ) ; if ( qualifiedBinding == null ) { findMessageSends ( messageSend . selector , argTypes , scope , messageSend , scope ) ; } else { <START_BUG> findMethods ( messageSend . selector , argTypes , ( ( ReferenceBinding ) ( qualifiedBinding ) ) , scope , new ObjectVector ( ) , false , true , false , messageSend , scope , false ) ; <END_BUG> } } else { if ( astNode instanceof CompletionOnExplicitConstructorCall ) { CompletionOnExplicitConstructorCall constructorCall = ( ( CompletionOnExplicitConstructorCall ) ( astNode ) ) ; TypeBinding [ ] argTypes = computeTypes ( constructorCall . arguments , ( ( BlockScope ) ( scope ) ) ) ; findConstructors ( ( ( ReferenceBinding ) ( qualifiedBinding ) ) , argTypes , scope , constructorCall ) ; } else { if ( astNode instanceof CompletionOnQualifiedAllocationExpression ) { CompletionOnQualifiedAllocationExpression allocExpression = ( ( CompletionOnQualifiedAllocationExpression ) ( astNode ) ) ; TypeBinding [ ] argTypes = computeTypes ( allocExpression . arguments , ( ( BlockScope ) ( scope ) ) ) ; findConstructors ( ( ( ReferenceBinding ) ( qualifiedBinding ) ) , argTypes , scope , allocExpression ) ; } else { if ( astNode instanceof CompletionOnClassLiteralAccess ) { char [ ] token = ( ( CompletionOnClassLiteralAccess ) ( astNode ) ) . completionIdentifier ; findClassField ( token , ( ( TypeBinding ) ( qualifiedBinding ) ) ) ; } } } } } } } } } } } public void complete ( ICompilationUnit sourceUnit , int completionPosition ) { } private TypeBinding [ ] computeTypes ( Expression [ ] arguments , BlockScope scope ) { } private void findClassField ( char [ ] token , TypeBinding receiverType ) { } private void findConstructors ( ReferenceBinding currentType , TypeBinding [ ] argTypes , Scope scope , InvocationSite invocationSite ) { }

Fix:
findMethods ( messageSend . selector , argTypes , ( ( ReferenceBinding ) ( qualifiedBinding ) ) , scope , new ObjectVector ( ) , false , true , false , messageSend , scope , ( ( messageSend . receiver ) == ( ThisImplicit ) ) ) ;