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 = NotAConstant ; if ( ( ( this . bits ) & ( ASTNode . IsAnnotationDefaultValue ) ) == 0 ) { TypeBinding leafComponentType = expectedType . leafComponentType ( ) ; <START_BUG> if ( ( ( leafComponentType . isBoundParameterizedType ( ) ) || ( leafComponentType . isGenericType ( ) ) ) || ( leafComponentType . isTypeVariable ( ) ) ) { <END_BUG> scope . problemReporter ( ) . illegalGenericArray ( leafComponentType , this ) ; } } if ( expectedType . isArrayType ( ) ) { this . resolvedType = this . binding = ( ( ArrayBinding ) ( expectedType ) ) ; if ( ( this . expressions ) == null ) return this . binding ; TypeBinding elementType = this . binding . elementsType ( ) ; for ( int i = 0 , length = expressions . length ; i < length ; i ++ ) { Expression expression = expressions [ i ] ; TypeBinding exprType = ( expression instanceof ArrayInitializer ) ? expression . resolveTypeExpecting ( scope , elementType ) : expression . resolveType ( scope ) ; if ( exprType == null ) return null ; if ( elementType != exprType ) scope . compilationUnitScope ( ) . recordTypeConversion ( elementType , exprType ) ; if ( ( ( expression . isConstantValueOfTypeAssignableToType ( exprType , elementType ) ) || ( ( elementType . isBaseType ( ) ) && ( BaseTypeBinding . isWidening ( elementType . id , exprType . id ) ) ) ) || ( exprType . isCompatibleWith ( elementType ) ) ) { expression . computeConversion ( scope , elementType , exprType ) ; } else if ( ( scope . isBoxingCompatibleWith ( exprType , elementType ) ) || ( ( ( ( exprType . isBaseType ( ) ) && ( ( scope . compilerOptions ( ) . sourceLevel ) >= ( ClassFileConstants . JDK1_5 ) ) ) && ( ! ( elementType . isBaseType ( ) ) ) ) && ( expression . isConstantValueOfTypeAssignableToType ( exprType , scope . environment ( ) . computeBoxingType ( elementType ) ) ) ) ) { expression . computeConversion ( scope , elementType , exprType ) ; } else { scope . problemReporter ( ) . typeMismatchError ( exprType , elementType , expression ) ; return null ; } } return binding ; } TypeBinding leafElementType = null ; int dim = 1 ; if ( ( expressions ) == null ) { leafElementType = scope . getJavaLangObject ( ) ; } else { Expression currentExpression = expressions [ 0 ] ; while ( ( currentExpression != null ) && ( currentExpression instanceof ArrayInitializer ) ) { dim ++ ; Expression [ ] subExprs = ( ( ArrayInitializer ) ( currentExpression ) ) . expressions ; if ( subExprs == null ) { leafElementType = scope . getJavaLangObject ( ) ; currentExpression = null ; break ; } currentExpression = ( ( ArrayInitializer ) ( currentExpression ) ) . expressions [ 0 ] ; } if ( currentExpression != null ) { leafElementType = currentExpression . resolveType ( scope ) ; } } if ( leafElementType != null ) { TypeBinding probableTb = scope . createArrayType ( leafElementType , dim ) ; scope . problemReporter ( ) . typeMismatchError ( probableTb , expectedType , this ) ; } return null ; } public void traverse ( ASTVisitor visitor , BlockScope scope ) { } }

Fix:
if ( ( leafComponentType . isBoundParameterizedType ( ) ) || ( leafComponentType . isTypeVariable ( ) ) ) {