private Collection<Selector> replaceFirstAppender( Selector selector, List<Selector> previousSelectors) { if (selector.getHead().isAppender()) { NestedSelectorAppender appender = (NestedSelectorAppender) selector.getHead(); Selector reminder = chopOffHead(selector); return joinAll( previousSelectors, reminder, appender.getLeadingCombinator(), isDirectlyAfterPreviousPart(reminder)); } // appender somewhere in the middle NestedSelectorAppender appender = selector.findFirstAppender(); if (appender == null) throw new BugHappened("This is very weird error and should not happen.", selector); Selector afterAppender = splitOn(selector, appender); List<Selector> partialResults = joinAll( selector, previousSelectors, appender.getLeadingCombinator(), appender.isDirectlyAfter()); // FIXME (now) last parameter should be nide and repats cold in 146 return joinAll(partialResults, afterAppender, null, isDirectlyAfterPreviousPart(afterAppender)); }