Buggy code:
public class ArrayInitializer extends Expression { public Expression [ ] expressions ; public ArrayBinding binding ; public ArrayInitializer ( ) { } public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream , boolean valueRequired ) { } public StringBuffer printExpression ( int indent , StringBuffer output ) { } public TypeBinding resolveTypeExpecting ( BlockScope scope , TypeBinding expectedType ) { this . constant = Constant . NotAConstant ; if ( expectedType instanceof ArrayBinding ) { if ( ( ( this . bits ) & ( ASTNode . IsAnnotationDefaultValue ) ) == 0 ) { TypeBinding leafComponentType = expectedType . leafComponentType ( ) ; if ( ! ( leafComponentType . isReifiable ( ) ) ) { scope . problemReporter ( ) . illegalGenericArray ( leafComponentType , this ) ; } } this . resolvedType = this . binding = ( ( ArrayBinding ) ( expectedType ) ) ; if ( ( this . expressions ) == null ) return this . binding ; TypeBinding elementType = this . binding . elementsType ( ) ; for ( int i = 0 , length = this . expressions . length ; i < length ; i ++ ) { Expression expression = this . expressions [ i ] ; expression . setExpectedType ( elementType ) ; TypeBinding expressionType = ( expression instanceof ArrayInitializer ) ? expression . resolveTypeExpecting ( scope , elementType ) : expression . resolveType ( scope ) ; if ( expressionType == null ) continue ; if ( elementType != expressionType ) scope . compilationUnitScope ( ) . recordTypeConversion ( elementType , expressionType ) ; <START_BUG> if ( ( ( expression . isConstantValueOfTypeAssignableToType ( expressionType , elementType ) ) || ( ( elementType . isBaseType ( ) ) && ( BaseTypeBinding . isWidening ( elementType . id , expressionType . id ) ) ) ) || ( expressionType . isCompatibleWith ( elementType ) ) ) { <END_BUG> expression . computeConversion ( scope , elementType , expressionType ) ; } else if ( ( scope . isBoxingCompatibleWith ( expressionType , elementType ) ) || ( ( ( ( expressionType . isBaseType ( ) ) && ( ( scope . compilerOptions ( ) . sourceLevel ) >= ( ClassFileConstants . JDK1_5 ) ) ) && ( ! ( elementType . isBaseType ( ) ) ) ) && ( expression . isConstantValueOfTypeAssignableToType ( expressionType , scope . environment ( ) . computeBoxingType ( elementType ) ) ) ) ) { expression . computeConversion ( scope , elementType , expressionType ) ; } else { scope . problemReporter ( ) . typeMismatchError ( expressionType , elementType , expression , null ) ; } } return this . binding ; } TypeBinding leafElementType = null ; int dim = 1 ; if ( ( this . expressions ) == null ) { leafElementType = scope . getJavaLangObject ( ) ; } else { Expression expression = this . expressions [ 0 ] ; while ( ( expression != null ) && ( expression instanceof ArrayInitializer ) ) { dim ++ ; Expression [ ] subExprs = ( ( ArrayInitializer ) ( expression ) ) . expressions ; if ( subExprs == null ) { leafElementType = scope . getJavaLangObject ( ) ; expression = null ; break ; } expression = ( ( ArrayInitializer ) ( expression ) ) . expressions [ 0 ] ; } if ( expression != null ) { leafElementType = expression . resolveType ( scope ) ; } for ( int i = 1 , length = this . expressions . length ; i < length ; i ++ ) { expression = this . expressions [ i ] ; if ( expression != null ) { expression . resolveType ( scope ) ; } } } if ( leafElementType != null ) { this . resolvedType = scope . createArrayType ( leafElementType , dim ) ; if ( expectedType != null ) scope . problemReporter ( ) . typeMismatchError ( this . resolvedType , expectedType , this , null ) ; } return null ; } public void traverse ( ASTVisitor visitor , BlockScope scope ) { } }

Fix:
if ( ( ( expression . isConstantValueOfTypeAssignableToType ( expressionType , elementType ) ) || ( BaseTypeBinding . isWidening ( elementType . id , expressionType . id ) ) ) || ( expressionType . isCompatibleWith ( elementType ) ) ) {