Buggy code:
public class LocalDeclaration extends AbstractVariableDeclaration { public LocalVariableBinding binding ; public LocalDeclaration ( char [ ] name , int sourceStart , int sourceEnd ) { } public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public void checkModifiers ( ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream ) { } public int getKind ( ) { } public void resolve ( BlockScope scope ) { <START_BUG> TypeBinding variableType = type . resolveType ( scope ) ; <END_BUG> checkModifiers ( ) ; if ( variableType != null ) { if ( variableType == ( VoidBinding ) ) { scope . problemReporter ( ) . variableTypeCannotBeVoid ( this ) ; return ; } if ( ( variableType . isArrayType ( ) ) && ( ( ( ( ArrayBinding ) ( variableType ) ) . leafComponentType ) == ( VoidBinding ) ) ) { scope . problemReporter ( ) . variableTypeCannotBeVoidArray ( this ) ; return ; } } Binding existingVariable = scope . getBinding ( name , Binding . VARIABLE , this , false ) ; boolean shouldInsertInScope = true ; if ( ( existingVariable != null ) && ( existingVariable . isValidBinding ( ) ) ) { if ( ( existingVariable instanceof LocalVariableBinding ) && ( ( this . hiddenVariableDepth ) == 0 ) ) { shouldInsertInScope = false ; scope . problemReporter ( ) . redefineLocal ( this ) ; } else { scope . problemReporter ( ) . localVariableHiding ( this , existingVariable , false ) ; } } if ( shouldInsertInScope ) { if ( ( ( ( modifiers ) & ( AccFinal ) ) != 0 ) && ( ( this . initialization ) == null ) ) { modifiers |= AccBlankFinal ; } binding = new LocalVariableBinding ( this , variableType , modifiers , false ) ; scope . addLocalVariable ( binding ) ; binding . setConstant ( NotAConstant ) ; } if ( variableType == null ) { if ( ( initialization ) != null ) initialization . resolveType ( scope ) ; return ; } if ( ( initialization ) != null ) { if ( ( initialization ) instanceof ArrayInitializer ) { TypeBinding initializationType = initialization . resolveTypeExpecting ( scope , variableType ) ; if ( initializationType != null ) { ( ( ArrayInitializer ) ( initialization ) ) . binding = ( ( ArrayBinding ) ( initializationType ) ) ; initialization . computeConversion ( scope , variableType , initializationType ) ; } } else { this . initialization . setExpectedType ( variableType ) ; TypeBinding initializationType = this . initialization . resolveType ( scope ) ; if ( initializationType != null ) { if ( ( ( initialization . isConstantValueOfTypeAssignableToType ( initializationType , variableType ) ) || ( ( variableType . isBaseType ( ) ) && ( BaseTypeBinding . isWidening ( variableType . id , initializationType . id ) ) ) ) || ( initializationType . isCompatibleWith ( variableType ) ) ) { this . initialization . computeConversion ( scope , variableType , initializationType ) ; if ( initializationType . needsUncheckedConversion ( variableType ) ) { scope . problemReporter ( ) . unsafeRawConversion ( this . initialization , initializationType , variableType ) ; } } else { scope . problemReporter ( ) . typeMismatchError ( initializationType , variableType , this ) ; } } } if ( ( binding ) != null ) { binding . setConstant ( ( binding . isFinal ( ) ? initialization . constant . castTo ( ( ( ( variableType . id ) << 4 ) + ( initialization . constant . typeID ( ) ) ) ) : NotAConstant ) ) ; } } } public void traverse ( ASTVisitor visitor , BlockScope scope ) { } }

Fix:
TypeBinding variableType = type . resolveType ( scope , true ) ;