package jscl.text; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import javax.annotation.Nonnull; import javax.annotation.Nullable; public class ExceptionsPool { private static final int MAX_COUNT = 20; @Nonnull private final List<ParseException> list = new ArrayList<>(); @Nonnull public ParseException obtain(int position, @Nonnull String expression, @Nonnull String messageCode) { return obtain(position, expression, messageCode, Collections.emptyList()); } @Nonnull public ParseException obtain(int position, @Nonnull String expression, @Nonnull String messageCode, @Nullable Object[] messageArgs) { return obtain(position, expression, messageCode, messageArgs == null || messageArgs.length == 0 ? java.util.Collections.emptyList() : Arrays.asList(messageArgs)); } @Nonnull public ParseException obtain(int position, @Nonnull String expression, @Nonnull String messageCode, @Nonnull List<?> messagesArgs) { final ParseException exception = !list.isEmpty() ? list.remove(list.size() - 1) : new ParseException(); exception.set(position, expression, messageCode, messagesArgs); return exception; } public void release(@Nonnull ParseException e) { if (list.size() >= MAX_COUNT) { return; } list.add(e); } }