Buggy code:
public class CodeSnippetScope extends BlockScope { protected CodeSnippetScope ( int kind , Scope parent ) { } public CodeSnippetScope ( BlockScope parent ) { } public CodeSnippetScope ( BlockScope parent , int variableCount ) { } public final boolean canBeSeenByForCodeSnippet ( FieldBinding fieldBinding , TypeBinding receiverType , InvocationSite invocationSite , Scope scope ) { } public final boolean canBeSeenByForCodeSnippet ( MethodBinding methodBinding , TypeBinding receiverType , InvocationSite invocationSite , Scope scope ) { } public final boolean canBeSeenByForCodeSnippet ( ReferenceBinding referenceBinding , ReferenceBinding receiverType ) { } public MethodBinding findExactMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { } public FieldBinding findFieldForCodeSnippet ( TypeBinding receiverType , char [ ] fieldName , InvocationSite invocationSite ) { } public MethodBinding findMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { } public MethodBinding findMethodForArray ( ArrayBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { ReferenceBinding object = getJavaLangObject ( ) ; MethodBinding methodBinding = object . getExactMethod ( selector , argumentTypes ) ; if ( methodBinding != null ) { if ( ( argumentTypes == ( NoParameters ) ) && ( CharOperation . equals ( selector , CLONE ) ) ) <START_BUG> return new MethodBinding ( ( ( ( methodBinding . modifiers ) ^ ( AccProtected ) ) | ( AccPublic ) ) , CLONE , methodBinding . returnType , argumentTypes , null , object ) ; <END_BUG> if ( canBeSeenByForCodeSnippet ( methodBinding , receiverType , invocationSite , this ) ) return methodBinding ; } methodBinding = findMethod ( object , selector , argumentTypes , invocationSite ) ; if ( methodBinding == null ) return new ProblemMethodBinding ( selector , argumentTypes , NotFound ) ; if ( methodBinding . isValidBinding ( ) ) { MethodBinding compatibleMethod = computeCompatibleMethod ( methodBinding , argumentTypes , invocationSite ) ; if ( compatibleMethod == null ) return new ProblemMethodBinding ( methodBinding , selector , argumentTypes , NotFound ) ; methodBinding = compatibleMethod ; if ( ! ( canBeSeenByForCodeSnippet ( methodBinding , receiverType , invocationSite , this ) ) ) return new ProblemMethodBinding ( methodBinding , selector , methodBinding . parameters , NotVisible ) ; } return methodBinding ; } public Binding getBinding ( char [ ] [ ] compoundName , int mask , InvocationSite invocationSite , ReferenceBinding receiverType ) { } public MethodBinding getConstructor ( ReferenceBinding receiverType , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { } public FieldBinding getFieldForCodeSnippet ( TypeBinding receiverType , char [ ] fieldName , InvocationSite invocationSite ) { } public MethodBinding getImplicitMethod ( ReferenceBinding receiverType , char [ ] selector , TypeBinding [ ] argumentTypes , InvocationSite invocationSite ) { } }

Fix:
return new MethodBinding ( ( ( ( methodBinding . modifiers ) & ( ~ ( AccProtected ) ) ) | ( AccPublic ) ) , CLONE , methodBinding . returnType , argumentTypes , null , object ) ;