Buggy code:
class ASTConverter { private AST ast ; char [ ] compilationUnitSource ; Scanner scanner ; private boolean resolveBindings ; private Set pendingThisExpressionScopeResolution ; private Set pendingNameScopeResolution ; private IProgressMonitor monitor ; private boolean insideComments ; private Comment [ ] commentsTable ; public ASTConverter ( Map options , boolean resolveBindings , IProgressMonitor monitor ) { } public void setAST ( AST ast ) { } public TypeDeclaration convert ( ASTNode [ ] nodes ) { } public CompilationUnit convert ( CompilationUnitDeclaration unit , char [ ] source ) { } void buildCommentsTable ( CompilationUnit compilationUnit , int [ ] [ ] comments ) { } public PackageDeclaration convertPackage ( CompilationUnitDeclaration compilationUnitDeclaration ) { } public ImportDeclaration convertImport ( ImportReference importReference ) { } public TypeDeclaration convert ( org . eclipse . jdt . internal . compiler . ast . TypeDeclaration typeDeclaration ) { } private void buildBodyDeclarations ( org . eclipse . jdt . internal . compiler . ast . TypeDeclaration typeDeclaration , TypeDeclaration typeDecl ) { } private void checkAndAddMultipleFieldDeclaration ( FieldDeclaration [ ] fields , int index , List bodyDeclarations ) { } private void checkAndAddMultipleLocalDeclaration ( Statement [ ] stmts , int index , List blockStatements ) { } private void checkCanceled ( ) { } public Name convert ( TypeReference typeReference ) { } public SimpleName convert ( SingleNameReference nameReference ) { } public Name convert ( QualifiedNameReference nameReference ) { } private QualifiedName setQualifiedNameNameAndSourceRanges ( char [ ] [ ] typeName , long [ ] positions , ASTNode node ) { } public Expression convert ( ThisReference reference ) { } public ThisExpression convert ( QualifiedThisReference reference ) { } public Name convert ( QualifiedSuperReference reference ) { } public ArrayAccess convert ( ArrayReference reference ) { } public Expression convert ( FieldReference reference ) { } public Expression convert ( Reference reference ) { } public Name convert ( NameReference reference ) { } private void completeRecord ( ArrayType arrayType , ASTNode astNode ) { } public Type convertType ( TypeReference typeReference ) { } public MethodDeclaration convert ( AbstractMethodDeclaration methodDeclaration ) { } 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 ) { } private void buildBodyDeclarations ( org . eclipse . jdt . internal . compiler . ast . TypeDeclaration expression , AnonymousClassDeclaration anonymousClassDeclaration ) { } public ArrayCreation convert ( ArrayAllocationExpression expression ) { } public SingleVariableDeclaration convert ( Argument argument ) { } public ArrayInitializer convert ( org . eclipse . jdt . internal . compiler . ast . ArrayInitializer expression ) { } public Expression convert ( QualifiedAllocationExpression allocation ) { if ( ( allocation . anonymousType ) != null ) { ClassInstanceCreation classInstanceCreation = this . ast . newClassInstanceCreation ( ) ; classInstanceCreation . setName ( convert ( allocation . type ) ) ; if ( ( allocation . enclosingInstance ) != null ) { classInstanceCreation . setExpression ( convert ( allocation . enclosingInstance ) ) ; } int declarationSourceStart = allocation . sourceStart ; classInstanceCreation . setSourceRange ( declarationSourceStart , ( ( ( allocation . anonymousType . bodyEnd ) - declarationSourceStart ) + 1 ) ) ; org . eclipse . jdt . internal . compiler . ast . Expression [ ] arguments = allocation . arguments ; if ( arguments != null ) { int length = arguments . length ; for ( int i = 0 ; i < length ; i ++ ) { classInstanceCreation . arguments ( ) . add ( convert ( arguments [ i ] ) ) ; } } AnonymousClassDeclaration anonymousClassDeclaration = this . ast . newAnonymousClassDeclaration ( ) ; <START_BUG> int start = retrieveStartBlockPosition ( declarationSourceStart , allocation . anonymousType . bodyEnd ) ; <END_BUG> anonymousClassDeclaration . setSourceRange ( start , ( ( ( allocation . anonymousType . bodyEnd ) - start ) + 1 ) ) ; classInstanceCreation . setAnonymousClassDeclaration ( anonymousClassDeclaration ) ; buildBodyDeclarations ( allocation . anonymousType , anonymousClassDeclaration ) ; if ( this . resolveBindings ) { recordNodes ( classInstanceCreation , allocation . anonymousType ) ; recordNodes ( anonymousClassDeclaration , allocation . anonymousType ) ; anonymousClassDeclaration . resolveBinding ( ) ; } return classInstanceCreation ; } else { ClassInstanceCreation classInstanceCreation = this . ast . newClassInstanceCreation ( ) ; classInstanceCreation . setExpression ( convert ( allocation . enclosingInstance ) ) ; classInstanceCreation . setName ( convert ( allocation . type ) ) ; classInstanceCreation . setSourceRange ( allocation . sourceStart , ( ( ( allocation . sourceEnd ) - ( allocation . sourceStart ) ) + 1 ) ) ; org . eclipse . jdt . internal . compiler . ast . Expression [ ] arguments = allocation . arguments ; if ( arguments != null ) { int length = arguments . length ; for ( int i = 0 ; i < length ; i ++ ) { Expression argument = convert ( arguments [ i ] ) ; if ( this . resolveBindings ) { recordNodes ( argument , arguments [ i ] ) ; } classInstanceCreation . arguments ( ) . add ( argument ) ; } } if ( this . resolveBindings ) { recordNodes ( classInstanceCreation , allocation ) ; } removeTrailingCommentFromExpressionEndingWithAParen ( classInstanceCreation ) ; return classInstanceCreation ; } } public Assignment convert ( org . eclipse . jdt . internal . compiler . ast . Assignment expression ) { } public Assignment convert ( CompoundAssignment expression ) { } public PrefixExpression convert ( org . eclipse . jdt . internal . compiler . ast . PrefixExpression expression ) { } public PostfixExpression convert ( org . eclipse . jdt . internal . compiler . ast . PostfixExpression expression ) { }

Fix:
int start = retrieveStartBlockPosition ( allocation . anonymousType . sourceEnd , allocation . anonymousType . bodyEnd ) ;