Buggy code:
public class CompoundAssignment extends Assignment implements OperatorIds { public int operator ; public int assignmentImplicitConversion ; public CompoundAssignment ( Expression lhs , Expression expression , int operator , int sourceEnd ) { } public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream , boolean valueRequired ) { } public int nullStatus ( FlowInfo flowInfo ) { } public String operatorToString ( ) { } public StringBuffer printExpressionNoParenthesis ( int indent , StringBuffer output ) { } public TypeBinding resolveType ( BlockScope scope ) { constant = NotAConstant ; if ( ( ! ( ( this . lhs ) instanceof Reference ) ) || ( this . lhs . isThis ( ) ) ) { scope . problemReporter ( ) . expressionShouldBeAVariable ( this . lhs ) ; return null ; } TypeBinding originalLhsType = lhs . resolveType ( scope ) ; TypeBinding originalExpressionType = expression . resolveType ( scope ) ; if ( ( originalLhsType == null ) || ( originalExpressionType == null ) ) return null ; LookupEnvironment env = scope . environment ( ) ; TypeBinding lhsType = originalLhsType ; TypeBinding expressionType = originalExpressionType ; <START_BUG> boolean use15specifics = ( scope . environment ( ) . options . sourceLevel ) >= ( JDK1_5 ) ; <END_BUG> boolean unboxedLhs = false ; if ( use15specifics ) { if ( ( ( ! ( lhsType . isBaseType ( ) ) ) && ( ( expressionType . id ) != ( TypeIds . T_JavaLangString ) ) ) && ( ( expressionType . id ) != ( TypeIds . T_null ) ) ) { TypeBinding unboxedType = env . computeBoxingType ( lhsType ) ; if ( unboxedType != lhsType ) { lhsType = unboxedType ; unboxedLhs = true ; } } if ( ( ( ! ( expressionType . isBaseType ( ) ) ) && ( ( lhsType . id ) != ( TypeIds . T_JavaLangString ) ) ) && ( ( lhsType . id ) != ( TypeIds . T_null ) ) ) { expressionType = env . computeBoxingType ( expressionType ) ; } } if ( ( restrainUsageToNumericTypes ( ) ) && ( ! ( lhsType . isNumericType ( ) ) ) ) { scope . problemReporter ( ) . operatorOnlyValidOnNumericType ( this , lhsType , expressionType ) ; return null ; } int lhsID = lhsType . id ; int expressionID = expressionType . id ; if ( ( lhsID > 15 ) || ( expressionID > 15 ) ) { if ( lhsID != ( TypeIds . T_JavaLangString ) ) { scope . problemReporter ( ) . invalidOperator ( this , lhsType , expressionType ) ; return null ; } expressionID = TypeIds . T_JavaLangObject ; } int result = OperatorExpression . OperatorSignatures [ operator ] [ ( ( lhsID << 4 ) + expressionID ) ] ; if ( result == ( TypeIds . T_undefined ) ) { scope . problemReporter ( ) . invalidOperator ( this , lhsType , expressionType ) ; return null ; } if ( ( operator ) == ( OperatorIds . PLUS ) ) { if ( lhsID == ( TypeIds . T_JavaLangObject ) ) { scope . problemReporter ( ) . invalidOperator ( this , lhsType , expressionType ) ; return null ; } else { if ( ( ( lhsType . isNumericType ( ) ) || ( lhsID == ( TypeIds . T_boolean ) ) ) && ( ! ( expressionType . isNumericType ( ) ) ) ) { scope . problemReporter ( ) . invalidOperator ( this , lhsType , expressionType ) ; return null ; } } } this . lhs . implicitConversion = ( unboxedLhs ? TypeIds . UNBOXING : 0 ) | ( result > > > 12 ) ; if ( unboxedLhs ) scope . problemReporter ( ) . autoboxing ( this . lhs , originalLhsType , lhsType ) ; this . expression . computeConversion ( scope , TypeBinding . wellKnownType ( scope , ( ( result > > > 8 ) & 15 ) ) , originalExpressionType ) ; this . assignmentImplicitConversion = ( ( unboxedLhs ? TypeIds . BOXING : 0 ) | ( lhsID << 4 ) ) | ( result & 15 ) ; if ( unboxedLhs ) scope . problemReporter ( ) . autoboxing ( this , lhsType , originalLhsType ) ; return this . resolvedType = originalLhsType ; } public boolean restrainUsageToNumericTypes ( ) { } public void traverse ( ASTVisitor visitor , BlockScope scope ) { } }

Fix:
boolean use15specifics = ( scope . compilerOptions ( ) . sourceLevel ) >= ( JDK1_5 ) ;