Buggy code:
public class ConstructorDeclaration extends AbstractMethodDeclaration { public ExplicitConstructorCall constructorCall ; public static final char [ ] ConstantPoolName = "<init>" . toCharArray ( ) ; public boolean isDefaultConstructor = false ; public ConstructorDeclaration ( CompilationResult compilationResult ) { } public void analyseCode ( ClassScope classScope , InitializationFlowContext initializerFlowContext , FlowInfo flowInfo ) { if ( ignoreFurtherInvestigation ) return ; if ( isRecursive ( null ) ) { this . scope . problemReporter ( ) . recursiveConstructorInvocation ( this . constructorCall ) ; } try { ExceptionHandlingFlowContext constructorContext = new ExceptionHandlingFlowContext ( initializerFlowContext . parent , this , binding . thrownExceptions , scope , DeadEnd ) ; initializerFlowContext . checkInitializerExceptions ( scope , constructorContext , flowInfo ) ; if ( binding . declaringClass . isAnonymousType ( ) ) { ArrayList computedExceptions = constructorContext . extendedExceptions ; if ( computedExceptions != null ) { int size ; if ( ( size = computedExceptions . size ( ) ) > 0 ) { ReferenceBinding [ ] actuallyThrownExceptions ; computedExceptions . toArray ( ( actuallyThrownExceptions = new ReferenceBinding [ size ] ) ) ; binding . thrownExceptions = actuallyThrownExceptions ; } } } if ( ( constructorCall ) != null ) { if ( ( constructorCall . accessMode ) == ( ExplicitConstructorCall . This ) ) { FieldBinding [ ] fields = binding . declaringClass . fields ( ) ; for ( int i = 0 , count = fields . length ; i < count ; i ++ ) { FieldBinding field ; if ( ! ( ( field = fields [ i ] ) . isStatic ( ) ) ) { flowInfo . markAsDefinitelyAssigned ( field ) ; } } } flowInfo = constructorCall . analyseCode ( scope , constructorContext , flowInfo ) ; } if ( ( statements ) != null ) { boolean didAlreadyComplain = false ; for ( int i = 0 , count = statements . length ; i < count ; i ++ ) { Statement stat ; if ( ! ( flowInfo . complainIfUnreachable ( ( stat = statements [ i ] ) , scope , didAlreadyComplain ) ) ) { flowInfo = stat . analyseCode ( scope , constructorContext , flowInfo ) ; } else { didAlreadyComplain = true ; } } } needFreeReturn = ! ( ( flowInfo == ( DeadEnd ) ) || ( flowInfo . isFakeReachable ( ) ) ) ; if ( ( ( constructorCall ) != null ) && ( ( constructorCall . accessMode ) != ( ExplicitConstructorCall . This ) ) ) { <START_BUG> flowInfo = flowInfo . mergedWith ( initializerFlowContext . initsOnReturn ) ; <END_BUG> FieldBinding [ ] fields = binding . declaringClass . fields ( ) ; for ( int i = 0 , count = fields . length ; i < count ; i ++ ) { FieldBinding field ; if ( ( ( ! ( ( field = fields [ i ] ) . isStatic ( ) ) ) && ( field . isFinal ( ) ) ) && ( ! ( flowInfo . isDefinitelyAssigned ( fields [ i ] ) ) ) ) { scope . problemReporter ( ) . uninitializedBlankFinalField ( field , ( isDefaultConstructor ? ( ( AstNode ) ( scope . referenceType ( ) ) ) : this ) ) ; } } } } catch ( org . eclipse . jdt . internal . compiler . problem . AbortMethod e ) { this . ignoreFurtherInvestigation = true ; } } public void generateCode ( ClassScope classScope , ClassFile classFile ) { } public void generateSyntheticFieldInitializationsIfNecessary ( MethodScope scope , CodeStream codeStream , ReferenceBinding declaringClass , boolean addNullCheckForEnclosingInstance ) { } private void internalGenerateCode ( ClassScope classScope , ClassFile classFile ) { } public boolean isConstructor ( ) { } public boolean isDefaultConstructor ( ) { } public boolean isInitializationMethod ( ) { } public boolean isRecursive ( ArrayList visited ) { } public void parseStatements ( Parser parser , CompilationUnitDeclaration unit ) { } public void resolveStatements ( ClassScope upperScope ) { } public String toStringStatements ( int tab ) { } public void traverse ( IAbstractSyntaxTreeVisitor visitor , ClassScope classScope ) { } }

Fix:
flowInfo = flowInfo . mergedWith ( constructorContext . initsOnReturn ) ;