The catenation() method calls itself with the same parameters; that nested call will call the same method again, which will call it again, which will call it again.... until your machine stack overflows. I'm not sure whether you simply forgot to implement this method, or have an implementation in mind here which simply isn't working (do you mean to call, for example, addAll() instead?) but this method is definitely your problem. The stack trace should reflect this.

Apart from isCurrent() and getCurrent() always calling the other one, there is another mistake. catenation calls itself without modifying the arguments. Calling this method will also lead to a StackOverflowError.