Buggy code:
public Expression convert ( Reference reference ) { } public Name convert ( NameReference reference ) { } public TypeDeclaration convert ( MemberTypeDeclaration typeDeclaration ) { } public Type convertType ( TypeReference typeReference ) { } public MethodDeclaration convert ( AbstractMethodDeclaration methodDeclaration ) { MethodDeclaration methodDecl = this . ast . newMethodDeclaration ( ) ; try { methodDecl . setModifiers ( ( ( methodDeclaration . modifiers ) & ( CompilerModifiers . AccJustFlag ) ) ) ; } catch ( IllegalArgumentException e ) { int legalModifiers = ( ( ( ( ( ( ( ( Modifier . PUBLIC ) | ( Modifier . PRIVATE ) ) | ( Modifier . PROTECTED ) ) | ( Modifier . STATIC ) ) | ( Modifier . FINAL ) ) | ( Modifier . SYNCHRONIZED ) ) | ( Modifier . NATIVE ) ) | ( Modifier . ABSTRACT ) ) | ( Modifier . STRICTFP ) ; methodDecl . setModifiers ( ( ( methodDeclaration . modifiers ) & legalModifiers ) ) ; methodDecl . setFlags ( ASTNode . MALFORMED ) ; } boolean isConstructor = methodDeclaration . isConstructor ( ) ; methodDecl . setConstructor ( isConstructor ) ; SimpleName methodName = this . ast . newSimpleName ( new String ( methodDeclaration . selector ) ) ; int start = methodDeclaration . sourceStart ; int end = retrieveIdentifierEndPosition ( start , methodDeclaration . sourceEnd ) ; methodName . setSourceRange ( start , ( ( end - start ) + 1 ) ) ; methodDecl . setName ( methodName ) ; TypeReference [ ] thrownExceptions = methodDeclaration . thrownExceptions ; if ( thrownExceptions != null ) { int thrownExceptionsLength = thrownExceptions . length ; for ( int i = 0 ; i < thrownExceptionsLength ; i ++ ) { methodDecl . thrownExceptions ( ) . add ( convert ( thrownExceptions [ i ] ) ) ; } } Argument [ ] parameters = methodDeclaration . arguments ; if ( parameters != null ) { int parametersLength = parameters . length ; for ( int i = 0 ; i < parametersLength ; i ++ ) { methodDecl . parameters ( ) . add ( convert ( parameters [ i ] ) ) ; } } ExplicitConstructorCall explicitConstructorCall = null ; if ( isConstructor ) { methodDecl . setReturnType ( this . ast . newPrimitiveType ( PrimitiveType . VOID ) ) ; ConstructorDeclaration constructorDeclaration = ( ( ConstructorDeclaration ) ( methodDeclaration ) ) ; explicitConstructorCall = constructorDeclaration . constructorCall ; } else { org . eclipse . jdt . internal . compiler . ast . MethodDeclaration method = ( ( org . eclipse . jdt . internal . compiler . ast . MethodDeclaration ) ( methodDeclaration ) ) ; TypeReference typeReference = method . returnType ; if ( typeReference != null ) { Type returnType = convertType ( typeReference ) ; int rightParenthesisPosition = retrieveEndOfRightParenthesisPosition ( end , method . bodyEnd ) ; int extraDimensions = retrieveExtraDimension ( rightParenthesisPosition , method . bodyEnd ) ; if ( extraDimensions != 0 ) { start = returnType . getStartPosition ( ) ; int dimensionsEnd = retrieveEndOfDimensionsPosition ( rightParenthesisPosition , method . bodyEnd ) ; returnType . setSourceRange ( start , ( ( ( method . sourceEnd ) - start ) + 1 ) ) ; methodDecl . setExtraDimensions ( extraDimensions ) ; } methodDecl . setReturnType ( returnType ) ; } } int declarationSourceStart = methodDeclaration . declarationSourceStart ; int declarationSourceEnd = methodDeclaration . bodyEnd ; methodDecl . setSourceRange ( declarationSourceStart , ( ( declarationSourceEnd - declarationSourceStart ) + 1 ) ) ; retrieveRightBraceOrSemiColonPosition ( methodDecl ) ; Statement [ ] statements = methodDeclaration . statements ; if ( ( statements != null ) || ( explicitConstructorCall != null ) ) { Block block = this . ast . newBlock ( ) ; start = retrieveStartBlockPosition ( methodDeclaration . sourceStart , declarationSourceEnd ) ; end = retrieveEndBlockPosition ( methodDeclaration . sourceStart , this . compilationUnitSource . length ) ; block . setSourceRange ( start , ( ( end - start ) + 1 ) ) ; <START_BUG> if ( explicitConstructorCall != null ) { <END_BUG> block . statements ( ) . add ( convert ( explicitConstructorCall ) ) ; } int statementsLength = ( statements == null ) ? 0 : statements . length ; for ( int i = 0 ; i < statementsLength ; i ++ ) { if ( ( statements [ i ] ) instanceof LocalDeclaration ) { checkAndAddMultipleLocalDeclaration ( statements , i , block . statements ( ) ) ; } else { block . statements ( ) . add ( convert ( statements [ i ] ) ) ; } } methodDecl . setBody ( block ) ; } else if ( ( ! ( methodDeclaration . isNative ( ) ) ) && ( ! ( methodDeclaration . isAbstract ( ) ) ) ) { start = retrieveStartBlockPosition ( methodDeclaration . sourceStart , declarationSourceEnd ) ; end = retrieveEndBlockPosition ( methodDeclaration . sourceStart , this . compilationUnitSource . length ) ; if ( ( start != ( - 1 ) ) && ( end != ( - 1 ) ) ) { Block block = this . ast . newBlock ( ) ; block . setSourceRange ( start , ( ( end - start ) + 1 ) ) ; methodDecl . setBody ( block ) ; } } setJavaDocComment ( methodDecl ) ; if ( this . resolveBindings ) { recordNodes ( methodDecl , methodDeclaration ) ; methodDecl . resolveBinding ( ) ; } return methodDecl ; } public Expression convert ( org . eclipse . jdt . internal . compiler . ast . Expression expression ) { } public ParenthesizedExpression convertToParenthesizedExpression ( org . eclipse . jdt . internal . compiler . ast . Expression expression ) { } public ClassInstanceCreation convert ( AllocationExpression expression ) { } public ClassInstanceCreation convert ( AnonymousLocalTypeDeclaration expression ) { } private void buildBodyDeclarations ( AnonymousLocalTypeDeclaration expression , AnonymousClassDeclaration anonymousClassDeclaration ) { }

Fix:
if ( ( explicitConstructorCall != null ) && ( ( explicitConstructorCall . accessMode ) != ( ExplicitConstructorCall . ImplicitSuper ) ) ) {