Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 10 additions & 25 deletions src/main/java/org/scijava/parsington/Operators.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@
import static org.scijava.parsington.Operator.Associativity.LEFT;
import static org.scijava.parsington.Operator.Associativity.RIGHT;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -58,6 +56,8 @@
*/
public final class Operators {

private static final List<Operator> operatorList = new ArrayList<>();

// -- dot --

public static final Operator DOT = op(".", 2, LEFT, 16);
Expand Down Expand Up @@ -168,8 +168,7 @@ public final class Operators {
public static final Operator OR_ASSIGN = op("|=", 2, RIGHT, 0);
public static final Operator LEFT_SHIFT_ASSIGN = op("<<=", 2, RIGHT, 0);
public static final Operator RIGHT_SHIFT_ASSIGN = op(">>=", 2, RIGHT, 0);
public static final Operator UNSIGNED_RIGHT_SHIFT_ASSIGN = op(">>>=", 2,
RIGHT, 0);
public static final Operator UNSIGNED_RIGHT_SHIFT_ASSIGN = op(">>>=", 2, RIGHT, 0);

private Operators() {
// NB: Prevent instantiation of utility class.
Expand All @@ -182,39 +181,25 @@ private Operators() {
* {@link Operators} class, in declaration order.
*/
public static List<Operator> standardList() {
// Build the standard list from all available Operator constants.
final ArrayList<Operator> ops = new ArrayList<>();
for (final Field f : Operators.class.getFields()) {
if (!isOperator(f)) continue;
try {
ops.add((Operator) f.get(null));
}
catch (final IllegalAccessException exc) {
// This should never happen.
throw new IllegalStateException(exc);
}
}
return ops;
return new ArrayList<>(operatorList);
}

// -- Helper methods --

private static Operator op(final String symbol, final int arity,
final Associativity associativity, final double precedence)
{
return new Operator(symbol, arity, associativity, precedence);
Operator op = new Operator(symbol, arity, associativity, precedence);
operatorList.add(op);
return op;
}

private static Group group(final String leftSymbol,
final String rightSymbol, final double precedence)
{
return new Group(leftSymbol, rightSymbol, precedence);
}

private static boolean isOperator(final Field f) {
final int mods = f.getModifiers();
return Modifier.isStatic(mods) && Modifier.isFinal(mods) &&
Operator.class.isAssignableFrom(f.getType());
Group group = new Group(leftSymbol, rightSymbol, precedence);
operatorList.add(group);
return group;
}

}
Loading