package io.dico.dicore.event; import io.dico.dicore.InterfaceChain; public interface ChainedListener extends InterfaceChain, ChainedListener>, SimpleListener { @Override default ChainedListener getEmptyInstance() { return ChainedListeners.empty(); } @Override default ChainedListener withElement(SimpleListener element) { if (element == null) { return this; } int count = getElementCount() + 1; return new ChainedListener() { @Override public void accept(T event) { try { ChainedListener.this.accept(event); } finally { element.accept(event); } } @Override public ChainedListener withoutLastNode() { return ChainedListener.this; } @Override public SimpleListener getDelegateOfLastNode() { return element; } @Override public int getElementCount() { return count; } }; } }