Buggy code:
public class CompilationUnitStructureRequestor extends ReferenceInfoAdapter implements ISourceElementRequestor { protected ICompilationUnit unit ; protected CompilationUnitElementInfo unitInfo ; protected JavaElementInfo importContainerInfo = null ; protected Map newElements ; protected Stack infoStack ; protected HashMap children ; protected Stack handleStack ; protected int referenceCount = 0 ; protected boolean hasSyntaxErrors = false ; protected Parser parser ; protected static byte [ ] NO_BYTES = new byte [ ] { } ; protected HashtableOfObject fieldRefCache ; protected HashtableOfObject messageRefCache ; protected HashtableOfObject typeRefCache ; protected HashtableOfObject unknownRefCache ; protected CompilationUnitStructureRequestor ( ICompilationUnit unit , CompilationUnitElementInfo unitInfo , Map newElements ) { } public void acceptImport ( int declarationStart , int declarationEnd , char [ ] [ ] tokens , boolean onDemand , int modifiers ) { } public void acceptLineSeparatorPositions ( int [ ] positions ) { } public void acceptPackage ( ImportReference importReference ) { } public void acceptProblem ( CategorizedProblem problem ) { } private void addToChildren ( JavaElementInfo parentInfo , JavaElement handle ) { } static String [ ] convertTypeNamesToSigs ( char [ ] [ ] typeNames ) { } protected IAnnotation enterAnnotation ( Annotation annotation , AnnotatableInfo parentInfo , JavaElement parentHandle ) { } public void enterCompilationUnit ( ) { } public void enterConstructor ( ISourceElementRequestor . MethodInfo methodInfo ) { } public void enterField ( ISourceElementRequestor . FieldInfo fieldInfo ) { } public void enterInitializer ( int declarationSourceStart , int modifiers ) { } public void enterMethod ( ISourceElementRequestor . MethodInfo methodInfo ) { } public void enterType ( ISourceElementRequestor . TypeInfo typeInfo ) { } protected void enterTypeParameter ( ISourceElementRequestor . TypeParameterInfo typeParameterInfo ) { } public void exitCompilationUnit ( int declarationEnd ) { } public void exitConstructor ( int declarationEnd ) { } public void exitField ( int initializationStart , int declarationEnd , int declarationSourceEnd ) { } public void exitInitializer ( int declarationEnd ) { } protected void exitMember ( int declarationEnd ) { } public void exitMethod ( int declarationEnd , int defaultValueStart , int defaultValueEnd ) { } public void exitType ( int declarationEnd ) { } protected void resolveDuplicates ( SourceRefElement handle ) { } private IMemberValuePair getMemberValuePair ( MemberValuePair memberValuePair ) { } private Object getMemberValue ( MemberValuePair memberValuePair , Expression expression ) { if ( expression instanceof Literal ) { ( ( Literal ) ( expression ) ) . computeConstant ( ) ; return Util . getAnnotationMemberValue ( memberValuePair , expression . constant ) ; } else if ( expression instanceof Annotation ) { Annotation annotation = ( ( Annotation ) ( expression ) ) ; Object handle = enterAnnotation ( annotation , null , ( ( JavaElement ) ( this . handleStack . peek ( ) ) ) ) ; exitMember ( annotation . declarationSourceEnd ) ; memberValuePair . valueKind = IMemberValuePair . K_ANNOTATION ; return handle ; } else if ( expression instanceof ClassLiteralAccess ) { ClassLiteralAccess classLiteral = ( ( ClassLiteralAccess ) ( expression ) ) ; char [ ] name = CharOperation . concatWith ( classLiteral . type . getTypeName ( ) , '.' ) ; memberValuePair . valueKind = IMemberValuePair . K_CLASS ; return new String ( name ) ; } else if ( expression instanceof QualifiedNameReference ) { char [ ] qualifiedName = CharOperation . concatWith ( ( ( QualifiedNameReference ) ( expression ) ) . tokens , '.' ) ; memberValuePair . valueKind = IMemberValuePair . K_QUALIFIED_NAME ; return new String ( qualifiedName ) ; } else if ( expression instanceof ArrayInitializer ) { memberValuePair . valueKind = - 1 ; Expression [ ] expressions = ( ( ArrayInitializer ) ( expression ) ) . expressions ; int length = ( expressions == null ) ? 0 : expressions . length ; Object [ ] values = new Object [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { int previousValueKind = memberValuePair . valueKind ; Object value = getMemberValue ( memberValuePair , expressions [ 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 { return null ; } } private void setChildren ( JavaElementInfo info ) { } }

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