Buggy code:
public class TryStatement extends SubRoutineStatement { public Block tryBlock ; public Block [ ] catchBlocks ; public Argument [ ] catchArguments ; public Block finallyBlock ; BlockScope scope ; private boolean isSubRoutineEscaping = false ; public UnconditionalFlowInfo subRoutineInits ; ReferenceBinding [ ] caughtExceptionTypes ; boolean tryBlockExit ; boolean [ ] catchExits ; public int [ ] preserveExceptionHandler ; Label subRoutineStartLabel ; public LocalVariableBinding anyExceptionVariable ; public LocalVariableBinding returnAddressVariable ; public LocalVariableBinding secretReturnValue ; public static final char [ ] SecretReturnName = "<seq2seq4repair_space>returnAddress" . toCharArray ( ) ; public static final char [ ] SecretAnyHandlerName = "<seq2seq4repair_space>anyExceptionHandler" . toCharArray ( ) ; public static final char [ ] SecretLocalDeclarationName = "<seq2seq4repair_space>returnValue" . toCharArray ( ) ; int preTryInitStateIndex = - 1 ; int mergedInitStateIndex = - 1 ; public FlowInfo analyseCode ( BlockScope currentScope , FlowContext flowContext , FlowInfo flowInfo ) { } public boolean isSubRoutineEscaping ( ) { } public void generateCode ( BlockScope currentScope , CodeStream codeStream ) { } public void generateSubRoutineInvocation ( BlockScope currentScope , CodeStream codeStream ) { } public StringBuffer printStatement ( int indent , StringBuffer output ) { } public void resetStateForCodeGeneration ( ) { } public void resolve ( BlockScope upperScope ) { this . scope = new BlockScope ( upperScope ) ; BlockScope tryScope = new BlockScope ( scope ) ; BlockScope finallyScope = null ; if ( ( finallyBlock ) != null ) { if ( finallyBlock . isEmptyBlock ( ) ) { if ( ( ( finallyBlock . bits ) & ( UndocumentedEmptyBlockMASK ) ) != 0 ) { <START_BUG> scope . problemReporter ( ) . undocumentedEmptyBlock ( finallyBlock ) ; <END_BUG> } } else { finallyScope = new BlockScope ( scope , false ) ; MethodScope methodScope = scope . methodScope ( ) ; this . returnAddressVariable = new LocalVariableBinding ( TryStatement . SecretReturnName , upperScope . getJavaLangObject ( ) , AccDefault , false ) ; finallyScope . addLocalVariable ( returnAddressVariable ) ; this . returnAddressVariable . constant = NotAConstant ; this . subRoutineStartLabel = new Label ( ) ; this . anyExceptionVariable = new LocalVariableBinding ( TryStatement . SecretAnyHandlerName , scope . getJavaLangThrowable ( ) , AccDefault , false ) ; finallyScope . addLocalVariable ( this . anyExceptionVariable ) ; this . anyExceptionVariable . constant = NotAConstant ; if ( ! ( methodScope . isInsideInitializer ( ) ) ) { MethodBinding methodBinding = ( ( AbstractMethodDeclaration ) ( methodScope . referenceContext ) ) . binding ; if ( methodBinding != null ) { TypeBinding methodReturnType = methodBinding . returnType ; if ( ( methodReturnType . id ) != ( TypeIds . T_void ) ) { this . secretReturnValue = new LocalVariableBinding ( TryStatement . SecretLocalDeclarationName , methodReturnType , AccDefault , false ) ; finallyScope . addLocalVariable ( this . secretReturnValue ) ; this . secretReturnValue . constant = NotAConstant ; } } } finallyBlock . resolveUsing ( finallyScope ) ; finallyScope . shiftScopes = new BlockScope [ ( catchArguments ) == null ? 1 : ( catchArguments . length ) + 1 ] ; finallyScope . shiftScopes [ 0 ] = tryScope ; } } this . tryBlock . resolveUsing ( tryScope ) ; if ( ( this . catchBlocks ) != null ) { int length = this . catchArguments . length ; TypeBinding [ ] argumentTypes = new TypeBinding [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { BlockScope catchScope = new BlockScope ( scope ) ; if ( finallyScope != null ) { finallyScope . shiftScopes [ ( i + 1 ) ] = catchScope ; } if ( ( argumentTypes [ i ] = catchArguments [ i ] . resolveForCatch ( catchScope ) ) == null ) return ; catchBlocks [ i ] . resolveUsing ( catchScope ) ; } this . caughtExceptionTypes = new ReferenceBinding [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { caughtExceptionTypes [ i ] = ( ( ReferenceBinding ) ( argumentTypes [ i ] ) ) ; for ( int j = 0 ; j < i ; j ++ ) { if ( caughtExceptionTypes [ i ] . isCompatibleWith ( argumentTypes [ j ] ) ) { scope . problemReporter ( ) . wrongSequenceOfExceptionTypesError ( this , i , j ) ; } } } } else { caughtExceptionTypes = new ReferenceBinding [ 0 ] ; } if ( finallyScope != null ) { this . scope . addSubscope ( finallyScope ) ; } } public void traverse ( IAbstractSyntaxTreeVisitor visitor , BlockScope blockScope ) { } }

Fix:
scope . problemReporter ( ) . undocumentedEmptyBlock ( finallyBlock . sourceStart , finallyBlock . sourceEnd ) ;