CachingTokenFilter could use a simple boolean isCached() method implemented as-such:
It's useful for the highlighting code to remove its wrapping of CachingTokenFilter if after handing-off to parts of its framework it turns out that it wasn't used.
Furthermore, use an ArrayList, not a LinkedList. ArrayList is leaner when the token count is high, and this class doesn't manipulate the list in a way that might favor LL.
A separate patch will come that actually uses this method.