- public String internArgument(final String rawArgument) {
- if ("user".equals(rawArgument)) {
- return "user";
- } else if ("system".equals(rawArgument)) {
- return "system";
+ protected OrderedByStatement createEmptyDeclared(final StmtContext<Ordering, OrderedByStatement, ?> ctx) {
+ final Ordering argument = ctx.getArgument();
+ switch (argument) {
+ case SYSTEM:
+ return EMPTY_SYSTEM_DECL;
+ case USER:
+ return EMPTY_USER_DECL;
+ default:
+ throw new IllegalStateException("Unhandled argument " + argument);
+ }
+ }
+
+ @Override
+ protected OrderedByEffectiveStatement createEffective(final Current<Ordering, OrderedByStatement> stmt,
+ final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
+ return substatements.isEmpty() ? createEmptyEffective(stmt.declared())
+ : new RegularOrderedByEffectiveStatement(stmt.declared(), substatements);
+ }
+
+ private static @NonNull OrderedByEffectiveStatement createEmptyEffective(final OrderedByStatement declared) {
+ // Aggressively reuse effective instances which are backed by the corresponding empty declared instance, as this
+ // is the case unless there is a weird extension in use.
+ if (EMPTY_USER_DECL.equals(declared)) {
+ // Most likely to be seen (as system is the default)
+ return EMPTY_USER_EFF;
+ } else if (EMPTY_SYSTEM_DECL.equals(declared)) {
+ return EMPTY_SYSTEM_EFF;