Buggy code:
public abstract class BinaryMember extends NamedMember { protected BinaryMember ( JavaElement parent , String name ) { } public void copy ( IJavaElement container , IJavaElement sibling , String rename , boolean force , IProgressMonitor monitor ) throws JavaModelException { } protected IAnnotation [ ] getAnnotations ( IBinaryAnnotation [ ] binaryAnnotations ) { } private IAnnotation getAnnotation ( IBinaryAnnotation binaryAnnotation ) { } private Object getMemberValue ( MemberValuePair memberValuePair , Object binaryValue ) { if ( binaryValue instanceof Constant ) { return Util . getAnnotationMemberValue ( memberValuePair , ( ( Constant ) ( binaryValue ) ) ) ; } else if ( binaryValue instanceof IBinaryAnnotation ) { memberValuePair . valueKind = IMemberValuePair . K_ANNOTATION ; return getAnnotation ( ( ( IBinaryAnnotation ) ( binaryValue ) ) ) ; } else if ( binaryValue instanceof ClassSignature ) { memberValuePair . valueKind = IMemberValuePair . K_CLASS ; char [ ] className = Signature . toCharArray ( CharOperation . replaceOnCopy ( ( ( ClassSignature ) ( binaryValue ) ) . getTypeName ( ) , '//' , '.' ) ) ; return new String ( className ) ; } else if ( binaryValue instanceof EnumConstantSignature ) { memberValuePair . valueKind = IMemberValuePair . K_QUALIFIED_NAME ; EnumConstantSignature enumConstant = ( ( EnumConstantSignature ) ( binaryValue ) ) ; char [ ] enumName = Signature . toCharArray ( CharOperation . replaceOnCopy ( enumConstant . getTypeName ( ) , '//' , '.' ) ) ; char [ ] qualifiedName = CharOperation . concat ( enumName , enumConstant . getEnumConstantName ( ) , '.' ) ; return new String ( qualifiedName ) ; } else if ( binaryValue instanceof Object [ ] ) { memberValuePair . valueKind = - 1 ; Object [ ] binaryValues = ( ( Object [ ] ) ( binaryValue ) ) ; int length = binaryValues . length ; Object [ ] values = new Object [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { int previousValueKind = memberValuePair . valueKind ; Object value = getMemberValue ( memberValuePair , binaryValues [ i ] ) ; <START_BUG> if ( ( previousValueKind != ( IMemberValuePair . K_UNKNOWN ) ) && ( ( memberValuePair . valueKind ) != previousValueKind ) ) { <END_BUG> memberValuePair . valueKind = IMemberValuePair . K_UNKNOWN ; } values [ i ] = value ; } if ( ( memberValuePair . valueKind ) == ( - 1 ) ) memberValuePair . valueKind = IMemberValuePair . K_UNKNOWN ; return values ; } else { memberValuePair . valueKind = IMemberValuePair . K_UNKNOWN ; return null ; } } public String [ ] getCategories ( ) throws JavaModelException { } public String getKey ( ) { } public abstract String getKey ( boolean forceOpen ) throws JavaModelException { } public ISourceRange getNameRange ( ) throws JavaModelException { } public ISourceRange getSourceRange ( ) throws JavaModelException { } public boolean isBinary ( ) { } public boolean isStructureKnown ( ) throws JavaModelException { } public void move ( IJavaElement container , IJavaElement sibling , String rename , boolean force , IProgressMonitor monitor ) throws JavaModelException { } public void rename ( String newName , boolean force , IProgressMonitor monitor ) throws JavaModelException { } public void setContents ( String contents , IProgressMonitor monitor ) throws JavaModelException { } }

Fix:
if ( ( previousValueKind != ( - 1 ) ) && ( ( memberValuePair . valueKind ) != previousValueKind ) ) {