Buggy code:
switch ( this . currentTokenType ) { case TerminalTokens . TokenNameRBRACE : nextCharacter = '}' ; break ; case TerminalTokens . TokenNameMULTIPLY : nextCharacter = '*' ; break ; default : nextCharacter = this . scanner . currentCharacter ; } consumeToken ( ) ; } switch ( nextCharacter ) { case '@' : if ( ( ! ( this . lineStarted ) ) || ( previousChar == '{' ) ) { if ( this . inlineTagStarted ) { this . inlineTagStarted = false ; if ( this . reportProblems ) { int end = ( previousPosition < invalidInlineTagLineEnd ) ? previousPosition : invalidInlineTagLineEnd ; this . sourceParser . problemReporter ( ) . javadocUnterminatedInlineTag ( this . inlineTagStart , end ) ; } validComment = false ; int textEndPosition = previousPosition ; if ( isFormatterParser && ( ScannerHelper . isWhitespace ( previousChar ) ) ) { textEndPosition = this . spacePosition ; } if ( ( ( this . textStart ) != ( - 1 ) ) && ( ( this . textStart ) < textEndPosition ) ) { if ( pushText ) pushText ( this . textStart , textEndPosition ) ; } if ( isDomParser || isFormatterParser ) { refreshInlineTagPosition ( textEndPosition ) ; } } if ( previousChar == '{' ) { if ( ( this . textStart ) != ( - 1 ) ) { int textEndPosition = this . inlineTagStart ; if ( isFormatterParser && ( ( this . spacePosition ) == ( ( this . inlineTagStart ) - 1 ) ) ) { textEndPosition = this . spacePosition ; } if ( ( this . textStart ) < textEndPosition ) { if ( pushText ) pushText ( this . textStart , textEndPosition ) ; } } this . inlineTagStarted = true ; invalidInlineTagLineEnd = this . lineEnd ; } else if ( ( ( this . textStart ) != ( - 1 ) ) && ( ( this . textStart ) < invalidTagLineEnd ) ) { int textEndPosition = invalidTagLineEnd ; if ( isFormatterParser && ( ScannerHelper . isWhitespace ( previousChar ) ) ) { textEndPosition = this . spacePosition ; } if ( pushText ) pushText ( this . textStart , textEndPosition ) ; } this . scanner . resetTo ( this . index , this . javadocEnd ) ; this . currentTokenType = - 1 ; try { if ( ! ( parseTag ( previousPosition ) ) ) { validComment = false ; if ( isDomParser ) { createTag ( ) ; } this . textStart = ( this . tagSourceEnd ) + 1 ; invalidTagLineEnd = this . lineEnd ; } } catch ( InvalidInputException e ) { consumeToken ( ) ; } } else if ( ( verifText && ( ( this . tagValue ) == ( JavadocTagConstants . TAG_RETURN_VALUE ) ) ) && ( ( this . returnStatement ) != null ) ) { refreshReturnStatement ( ) ; } this . lineStarted = true ; break ; case '\r' : case '\n' : if ( this . lineStarted ) { int textEndPosition = previousPosition ; if ( isFormatterParser ) { if ( ScannerHelper . isWhitespace ( previousChar ) ) { textEndPosition = this . spacePosition ; } else { this . spacePosition = previousPosition ; } } if ( ( ( this . textStart ) != ( - 1 ) ) && ( ( this . textStart ) < textEndPosition ) ) { if ( pushText ) pushText ( this . textStart , textEndPosition ) ; } } this . lineStarted = false ; this . textStart = - 1 ; break ; case '}' : if ( ( verifText && ( ( this . tagValue ) == ( JavadocTagConstants . TAG_RETURN_VALUE ) ) ) && ( ( this . returnStatement ) != null ) ) { refreshReturnStatement ( ) ; } if ( this . inlineTagStarted ) { if ( pushText ) { int textEndPosition = previousPosition ; if ( isFormatterParser && ( ScannerHelper . isWhitespace ( previousChar ) ) ) { textEndPosition = this . spacePosition ; } if ( ( ( this . lineStarted ) && ( ( this . textStart ) != ( - 1 ) ) ) && ( ( this . textStart ) < textEndPosition ) ) { pushText ( this . textStart , textEndPosition ) ; } <START_BUG> refreshInlineTagPosition ( textEndPosition ) ; <END_BUG> } if ( ! isFormatterParser ) this . textStart = this . index ; this . inlineTagStarted = false ; } else { if ( ! ( this . lineStarted ) ) { this . textStart = previousPosition ; } } this . lineStarted = true ; break ; case '{' : if ( ( verifText && ( ( this . tagValue ) == ( JavadocTagConstants . TAG_RETURN_VALUE ) ) ) && ( ( this . returnStatement ) != null ) ) { refreshReturnStatement ( ) ; } if ( this . inlineTagStarted ) { this . inlineTagStarted = false ; if ( this . reportProblems ) { int end = ( previousPosition < invalidInlineTagLineEnd ) ? previousPosition : invalidInlineTagLineEnd ; this . sourceParser . problemReporter ( ) . javadocUnterminatedInlineTag ( this . inlineTagStart , end ) ; } if ( pushText ) { int textEndPosition = previousPosition ; if ( isFormatterParser && ( ScannerHelper . isWhitespace ( previousChar ) ) ) { textEndPosition = this . spacePosition ; } if ( ( ( this . lineStarted ) && ( ( this . textStart ) != ( - 1 ) ) ) && ( ( this . textStart ) < textEndPosition ) ) { pushText ( this . textStart , textEndPosition ) ; } refreshInlineTagPosition ( textEndPosition ) ; } } if ( ! ( this . lineStarted ) ) { this . textStart = previousPosition ; } this . lineStarted = true ; this . inlineTagStart = previousPosition ; break ; case '*' : this . starPosition = previousPosition ; break ;

Fix:
refreshInlineTagPosition ( previousPosition ) ;