Object (@Nullable Object lhs, @Nullable Object rhs) { if (lhs instanceof String && rhs instanceof String) { return (String)lhs + rhs; } else if (lhs instanceof List && rhs instanceof List) { return ContainerUtil.concat((List)lhs, (List)rhs); } else if (lhs instanceof Number && rhs instanceof Number) { final BigInteger first = toBigInteger((Number)lhs); final BigInteger second = toBigInteger((Number)rhs); return fromBigInteger(first.add(second)); } return null; }