Buggy code:
public class SourceElementParser extends CommentRecorderParser { ISourceElementRequestor requestor ; int fieldCount ; ISourceType sourceType ; boolean reportReferenceInfo ; char [ ] [ ] typeNames ; char [ ] [ ] superTypeNames ; int nestedTypeIndex ; NameReference [ ] unknownRefs ; int unknownRefsCounter ; SourceElementParser . LocalDeclarationVisitor localDeclarationVisitor = null ; CompilerOptions options ; HashtableOfObjectToInt sourceEnds = new HashtableOfObjectToInt ( ) ; public class LocalDeclarationVisitor extends ASTVisitor { ArrayList declaringTypes ; public void pushDeclaringType ( TypeDeclaration declaringType ) { } public void popDeclaringType ( ) { } public TypeDeclaration peekDeclaringType ( ) { } public boolean visit ( TypeDeclaration typeDeclaration , BlockScope scope ) { } public boolean visit ( TypeDeclaration typeDeclaration , ClassScope scope ) { } } public SourceElementParser ( final ISourceElementRequestor requestor , IProblemFactory problemFactory , CompilerOptions options , boolean reportLocalDeclarations , boolean optimizeStringLiterals ) { } public void checkComment ( ) { if ( ( ! ( ( this . diet ) && ( ( this . dietInt ) == 0 ) ) ) && ( ( this . scanner . commentPtr ) >= 0 ) ) { flushCommentsDefinedPriorTo ( this . endStatementPosition ) ; } int lastComment = this . scanner . commentPtr ; if ( ( this . modifiersSourceStart ) >= 0 ) { while ( ( lastComment >= 0 ) && ( ( Math . abs ( this . scanner . commentStarts [ lastComment ] ) ) > ( this . modifiersSourceStart ) ) ) lastComment -- ; } if ( lastComment >= 0 ) { this . modifiersSourceStart = Math . abs ( this . scanner . commentStarts [ 0 ] ) ; while ( ( lastComment >= 0 ) && ( ( this . scanner . commentStops [ lastComment ] ) < 0 ) ) lastComment -- ; if ( ( lastComment >= 0 ) && ( ( this . javadocParser ) != null ) ) { int commentEnd = ( this . scanner . commentStops [ lastComment ] ) - 1 ; this . javadocParser . reportProblems = ( ( this . currentElement ) == null ) || ( commentEnd > ( this . lastJavadocEnd ) ) ; <START_BUG> if ( this . javadocParser . checkDeprecation ( this . scanner . commentStarts [ lastComment ] , commentEnd ) ) { <END_BUG> checkAndSetModifiers ( AccDeprecated ) ; } this . javadoc = this . javadocParser . docComment ; if ( ( currentElement ) == null ) this . lastJavadocEnd = commentEnd ; } } if ( ( ( this . reportReferenceInfo ) && ( this . javadocParser . checkDocComment ) ) && ( ( this . javadoc ) != null ) ) { TypeReference [ ] thrownExceptions = this . javadoc . exceptionReferences ; int throwsTagsNbre = ( thrownExceptions == null ) ? 0 : thrownExceptions . length ; for ( int i = 0 ; i < throwsTagsNbre ; i ++ ) { TypeReference typeRef = thrownExceptions [ i ] ; if ( typeRef instanceof JavadocSingleTypeReference ) { JavadocSingleTypeReference singleRef = ( ( JavadocSingleTypeReference ) ( typeRef ) ) ; this . requestor . acceptTypeReference ( singleRef . token , singleRef . sourceStart ) ; } else if ( typeRef instanceof JavadocQualifiedTypeReference ) { JavadocQualifiedTypeReference qualifiedRef = ( ( JavadocQualifiedTypeReference ) ( typeRef ) ) ; this . requestor . acceptTypeReference ( qualifiedRef . tokens , qualifiedRef . sourceStart , qualifiedRef . sourceEnd ) ; } } Expression [ ] references = this . javadoc . seeReferences ; int seeTagsNbre = ( references == null ) ? 0 : references . length ; for ( int i = 0 ; i < seeTagsNbre ; i ++ ) { Expression reference = references [ i ] ; acceptJavadocTypeReference ( reference ) ; if ( reference instanceof JavadocFieldReference ) { JavadocFieldReference fieldRef = ( ( JavadocFieldReference ) ( reference ) ) ; this . requestor . acceptFieldReference ( fieldRef . token , fieldRef . sourceStart ) ; if ( ( ( fieldRef . receiver ) != null ) && ( ! ( fieldRef . receiver . isThis ( ) ) ) ) { acceptJavadocTypeReference ( fieldRef . receiver ) ; } } else if ( reference instanceof JavadocMessageSend ) { JavadocMessageSend messageSend = ( ( JavadocMessageSend ) ( reference ) ) ; int argCount = ( ( messageSend . arguments ) == null ) ? 0 : messageSend . arguments . length ; this . requestor . acceptMethodReference ( messageSend . selector , argCount , messageSend . sourceStart ) ; this . requestor . acceptConstructorReference ( messageSend . selector , argCount , messageSend . sourceStart ) ; if ( ( ( messageSend . receiver ) != null ) && ( ! ( messageSend . receiver . isThis ( ) ) ) ) { acceptJavadocTypeReference ( messageSend . receiver ) ; } } else if ( reference instanceof JavadocAllocationExpression ) { JavadocAllocationExpression constructor = ( ( JavadocAllocationExpression ) ( reference ) ) ; int argCount = ( ( constructor . arguments ) == null ) ? 0 : constructor . arguments . length ; if ( ( constructor . type ) != null ) { char [ ] [ ] compoundName = constructor . type . getParameterizedTypeName ( ) ; this . requestor . acceptConstructorReference ( compoundName [ ( ( compoundName . length ) - 1 ) ] , argCount , constructor . sourceStart ) ; if ( ! ( constructor . type . isThis ( ) ) ) { acceptJavadocTypeReference ( constructor . type ) ; } } } } } } private void acceptJavadocTypeReference ( Expression expression ) { } protected void classInstanceCreation ( boolean alwaysQualified ) { } private long [ ] collectAnnotationPositions ( Annotation [ ] annotations ) { } protected void consumeAnnotationAsModifier ( ) { } protected void consumeClassInstanceCreationExpressionQualifiedWithTypeArguments ( ) { } protected void consumeClassInstanceCreationExpressionWithTypeArguments ( ) { } protected void consumeConstructorHeaderName ( ) { } protected void consumeConstructorHeaderNameWithTypeParameters ( ) { } protected void consumeEnumConstantWithClassBody ( ) { } protected void consumeEnumConstantNoClassBody ( ) { }

Fix:
if ( this . javadocParser . checkDeprecation ( lastComment ) ) {