Buggy code:
public class MethodBinding extends Binding implements BaseTypes , TypeConstants { public int modifiers ; public char [ ] selector ; public TypeBinding returnType ; public TypeBinding [ ] parameters ; public ReferenceBinding [ ] thrownExceptions ; public ReferenceBinding declaringClass ; char [ ] signature ; protected MethodBinding ( ) { } public MethodBinding ( int modifiers , char [ ] selector , TypeBinding returnType , TypeBinding [ ] args , ReferenceBinding [ ] exceptions , ReferenceBinding declaringClass ) { } public MethodBinding ( int modifiers , TypeBinding [ ] args , ReferenceBinding [ ] exceptions , ReferenceBinding declaringClass ) { } public MethodBinding ( MethodBinding initialMethodBinding , ReferenceBinding declaringClass ) { } public final boolean areParametersEqual ( MethodBinding method ) { } public final int bindingType ( ) { } public boolean canBeSeenBy ( InvocationSite invocationSite , Scope scope ) { } public boolean canBeSeenBy ( TypeBinding receiverType , InvocationSite invocationSite , Scope scope ) { if ( isPublic ( ) ) return true ; <START_BUG> SourceTypeBinding invocationType = scope . enclosingSourceType ( ) ; <END_BUG> if ( ( invocationType == ( declaringClass ) ) && ( invocationType == receiverType ) ) return true ; if ( isProtected ( ) ) { if ( invocationType == ( declaringClass ) ) return true ; if ( ( invocationType . fPackage ) == ( declaringClass . fPackage ) ) return true ; ReferenceBinding currentType = invocationType ; int depth = 0 ; do { if ( declaringClass . isSuperclassOf ( currentType ) ) { if ( invocationSite . isSuperAccess ( ) ) { return true ; } if ( receiverType instanceof ArrayBinding ) { return false ; } if ( isStatic ( ) ) { return true ; } if ( ( currentType == receiverType ) || ( currentType . isSuperclassOf ( ( ( ReferenceBinding ) ( receiverType ) ) ) ) ) { if ( depth > 0 ) invocationSite . setDepth ( depth ) ; return true ; } } depth ++ ; currentType = currentType . enclosingType ( ) ; } while ( currentType != null ) ; return false ; } if ( isPrivate ( ) ) { if ( receiverType != ( declaringClass ) ) return false ; if ( invocationType != ( declaringClass ) ) { ReferenceBinding outerInvocationType = invocationType ; ReferenceBinding temp = outerInvocationType . enclosingType ( ) ; while ( temp != null ) { outerInvocationType = temp ; temp = temp . enclosingType ( ) ; } ReferenceBinding outerDeclaringClass = declaringClass ; temp = outerDeclaringClass . enclosingType ( ) ; while ( temp != null ) { outerDeclaringClass = temp ; temp = temp . enclosingType ( ) ; } if ( outerInvocationType != outerDeclaringClass ) return false ; } return true ; } if ( ( invocationType . fPackage ) != ( declaringClass . fPackage ) ) return false ; if ( receiverType instanceof ArrayBinding ) return false ; ReferenceBinding type = ( ( ReferenceBinding ) ( receiverType ) ) ; PackageBinding declaringPackage = declaringClass . fPackage ; do { if ( ( declaringClass ) == type ) return true ; if ( declaringPackage != ( type . fPackage ) ) return false ; } while ( ( type = type . superclass ( ) ) != null ) ; return false ; } public final char [ ] constantPoolName ( ) { } public final int getAccessFlags ( ) { } public final boolean isAbstract ( ) { } public final boolean isConstructor ( ) { } protected boolean isConstructorRelated ( ) { } public final boolean isDefault ( ) { } public final boolean isDefaultAbstract ( ) { } public final boolean isDeprecated ( ) { } public final boolean isFinal ( ) { } public final boolean isNative ( ) { } public final boolean isPrivate ( ) { } public final boolean isProtected ( ) { } public final boolean isPublic ( ) { } public final boolean isRequiredToClearPrivateModifier ( ) { } public final boolean isStatic ( ) { } public final boolean isStrictfp ( ) { } public final boolean isSynchronized ( ) { } public final boolean isSynthetic ( ) { } public final boolean isViewedAsDeprecated ( ) { } public char [ ] readableName ( ) { } protected final void selector ( char [ ] selector ) { } public final char [ ] signature ( ) { } public final int sourceEnd ( ) { } public AbstractMethodDeclaration sourceMethod ( ) { } public final int sourceStart ( ) { } public boolean alwaysNeedsAccessMethod ( ) { } public MethodBinding getAccessMethod ( ) { } public final void tagForClearingPrivateModifier ( ) { } public String toString ( ) { } }

Fix:
SourceTypeBinding invocationType = scope . invocationType ( ) ;