Buggy code:
case ( this . source [ this . currentPosition ] ) == 'u' ) { ( this . currentPosition ) ++ ; } if ( ( ( ( ( ( ( ( ( c1 = Character . getNumericValue ( this . source [ ( ( this . currentPosition ) ++ ) ] ) ) > 15 ) || ( c1 < 0 ) ) || ( ( c2 = Character . getNumericValue ( this . source [ ( ( this . currentPosition ) ++ ) ] ) ) > 15 ) ) || ( c2 < 0 ) ) || ( ( c3 = Character . getNumericValue ( this . source [ ( ( this . currentPosition ) ++ ) ] ) ) > 15 ) ) || ( c3 < 0 ) ) || ( ( c4 = Character . getNumericValue ( this . source [ ( ( this . currentPosition ) ++ ) ] ) ) > 15 ) ) || ( c4 < 0 ) ) { throw new InvalidInputException ( Scanner . INVALID_UNICODE_ESCAPE ) ; } else { this . currentCharacter = ( ( char ) ( ( ( ( ( ( c1 * 16 ) + c2 ) * 16 ) + c3 ) * 16 ) + c4 ) ) ; } } if ( ( this . currentCharacter ) == '\\' ) { if ( ( this . source [ this . currentPosition ] ) == '\\' ) ( this . currentPosition ) ++ ; } } if ( ( ( this . currentCharacter ) == '\r' ) && ( ( this . source . length ) > ( this . currentPosition ) ) ) { if ( ( this . source [ this . currentPosition ] ) == '\n' ) { ( this . currentPosition ) ++ ; this . currentCharacter = '\n' ; } else if ( ( ( this . source [ this . currentPosition ] ) == '\\' ) && ( ( this . source [ ( ( this . currentPosition ) + 1 ) ] ) == 'u' ) ) { isUnicode = true ; char unicodeChar ; int index = ( this . currentPosition ) + 1 ; index ++ ; while ( ( this . source [ index ] ) == 'u' ) { index ++ ; } int c1 = 0 ; int c2 = 0 ; int c3 = 0 ; int c4 = 0 ; if ( ( ( ( ( ( ( ( ( c1 = Character . getNumericValue ( this . source [ ( index ++ ) ] ) ) > 15 ) || ( c1 < 0 ) ) || ( ( c2 = Character . getNumericValue ( this . source [ ( index ++ ) ] ) ) > 15 ) ) || ( c2 < 0 ) ) || ( ( c3 = Character . getNumericValue ( this . source [ ( index ++ ) ] ) ) > 15 ) ) || ( c3 < 0 ) ) || ( ( c4 = Character . getNumericValue ( this . source [ ( index ++ ) ] ) ) > 15 ) ) || ( c4 < 0 ) ) { this . currentPosition = index ; throw new InvalidInputException ( Scanner . INVALID_UNICODE_ESCAPE ) ; } else { unicodeChar = ( ( char ) ( ( ( ( ( ( c1 * 16 ) + c2 ) * 16 ) + c3 ) * 16 ) + c4 ) ) ; } if ( unicodeChar == '\n' ) { this . currentPosition = index ; this . currentCharacter = '\n' ; } } } recordComment ( TerminalTokens . TokenNameCOMMENT_LINE ) ; if ( ( ( this . startPosition ) <= ( this . cursorLocation ) ) && ( ( this . cursorLocation ) < ( ( this . currentPosition ) - 1 ) ) ) { throw new InvalidCursorLocation ( InvalidCursorLocation . NO_COMPLETION_INSIDE_COMMENT ) ; } if ( ( this . taskTags ) != null ) checkTaskTag ( this . startPosition , this . currentPosition ) ; if ( ( ( this . currentCharacter ) == '\r' ) || ( ( this . currentCharacter ) == '\n' ) ) { if ( this . recordLineSeparator ) { if ( isUnicode ) { pushUnicodeLineSeparator ( ) ; } else { pushLineSeparator ( ) ; } } } if ( this . tokenizeComments ) { return TerminalTokens . TokenNameCOMMENT_LINE ; } } catch ( IndexOutOfBoundsException e ) { ( this . currentPosition ) -- ; recordComment ( TerminalTokens . TokenNameCOMMENT_LINE ) ; if ( ( this . taskTags ) != null ) checkTaskTag ( this . startPosition , this . currentPosition ) ; if ( this . tokenizeComments ) { return TerminalTokens . TokenNameCOMMENT_LINE ; } else { ( this . currentPosition ) ++ ; } } break ; } if ( test > 0 ) { try { boolean isJavadoc = false ; boolean star = false ; boolean isUnicode = false ; this . unicodeAsBackSlash = false ; if ( ( ( this . currentCharacter = this . source [ ( ( this . currentPosition ) ++ ) ] ) == '\\' ) && ( ( this . source [ this . currentPosition ] ) == 'u' ) ) { getNextUnicodeChar ( ) ; isUnicode = true ; } else { isUnicode = false ; if ( ( this . withoutUnicodePtr ) != 0 ) { this . unicodeStore ( ) ; } } if ( ( this . currentCharacter ) == '*' ) { isJavadoc = true ; star = true ; } if ( ( ( this . currentCharacter ) == '\r' ) || ( ( this . currentCharacter ) == '\n' ) ) { if ( this . recordLineSeparator ) { if ( ! isUnicode ) { pushLineSeparator ( ) ; } } } isUnicode = false ; if ( ( ( this . currentCharacter = this . source [ ( ( this . currentPosition ) ++ ) ] ) == '\\' ) && ( ( this . source [ this . currentPosition ] ) == 'u' ) ) { getNextUnicodeChar ( ) ; isUnicode = true ; } else { isUnicode = false ; } if ( ( this . currentCharacter ) == '\\' ) { if ( ( this . source [ this . currentPosition ] ) == '\\' ) ( this . currentPosition ) ++ ; } if ( ( this . currentCharacter ) == '//' ) { isJavadoc = false ; } while ( ( ( this . currentCharacter ) != '//' ) || ( ! star ) ) { if ( ( ( this . currentCharacter ) == '\r' ) || ( ( this . currentCharacter ) == '\n' ) ) { if ( this . recordLineSeparator ) { if ( ! isUnicode ) { pushLineSeparator ( ) ; } } } star = ( this . currentCharacter ) == '*' ; if ( ( ( this . currentCharacter = this . source [ ( ( this . currentPosition ) ++ ) ] ) == '\\' ) && ( ( this . source [ this . currentPosition ] ) == 'u' ) ) { getNextUnicodeChar ( ) ; isUnicode = true ; } else { isUnicode = false ; } if ( ( this . currentCharacter ) == '\\' ) { if ( ( this . source [ this . currentPosition ] ) == '\\' ) ( this . currentPosition ) ++ ; } } int token = ( isJavadoc ) ? TerminalTokens . TokenNameCOMMENT_JAVADOC : TerminalTokens . TokenNameCOMMENT_BLOCK ; recordComment ( token ) ; <START_BUG> if ( ( ( this . startPosition ) <= ( this . cursorLocation ) ) && ( ( this . cursorLocation ) < ( ( this . currentPosition ) - 1 ) ) ) { <END_BUG>

Fix:
if ( ( ( ! isJavadoc ) && ( ( this . startPosition ) <= ( this . cursorLocation ) ) ) && ( ( this . cursorLocation ) < ( ( this . currentPosition ) - 1 ) ) ) {