Martin Häusler created TINKERPOP-3155:
-----------------------------------------
Summary: Operator.addAll checks for instanceof on the wrong
parameter
Key: TINKERPOP-3155
URL: https://issues.apache.org/jira/browse/TINKERPOP-3155
Project: TinkerPop
Issue Type: Bug
Reporter: Martin Häusler
Hi,
I was experimenting with "sack(...)" today and noticed a weirdness in the
gremlin source code for Operator. Here's the "addAll" literal, as defined in
the gremlin source code:
{code:java}
addAll {
public Object apply(final Object a, final Object b) {
if (null == a || null == b) {
if (null == a && null == b)
return null;
else
return null == b ? a : b;
}
if (a instanceof Map && b instanceof Map)
((Map<?,?>) a).putAll((Map) b);
else if (a instanceof Collection && a instanceof Collection)
((Collection<?>) a).addAll((Collection) b);
else
throw new IllegalArgumentException(String.format("Objects must be
both of Map or Collection: a=%s b=%s",
a.getClass().getSimpleName(),
b.getClass().getSimpleName()));
return a;
}
}, {code}
Note the line
{code:java}
else if (a instanceof Collection && a instanceof Collection) {code}
That's weird. We're checking twice if "a" is a Collection. Not only is that
pointless, but it also ignores parameter b. Shouldn't the second part of the
condition be:
{code:java}
b instanceof Collection{code}
... since we're downcasting b into a Collection afterwards?
--
This message was sent by Atlassian Jira
(v8.20.10#820010)