[jboss-jira] [JBoss JIRA] (DROOLS-858) NoSuchMethodError on JIT Compilation of non-primitive comparison
Sascha Dirbach (JIRA)
issues at jboss.org
Fri Jul 24 05:41:03 EDT 2015
Sascha Dirbach created DROOLS-858:
-------------------------------------
Summary: NoSuchMethodError on JIT Compilation of non-primitive comparison
Key: DROOLS-858
URL: https://issues.jboss.org/browse/DROOLS-858
Project: Drools
Issue Type: Feature Request
Components: core engine
Affects Versions: 6.3.0.Beta2
Reporter: Sascha Dirbach
Assignee: Mario Fusco
A LHS like this:
{code}
$map : Map()
$simpleTestObject : NonStringConstructorClass (something=="simpleTestObject")
Entry (
getKey() == $simpleTestObject
) from $map.entrySet()
{code}
fails at runtime with a NoSuchMethodError, when incompatible objects are compared (Map with object vs. custom Object) and the execution is jitted.
The generated evaluation method looks like this:
{code}
public boolean evaluate(InternalFactHandle paramInternalFactHandle, InternalWorkingMemory paramInternalWorkingMemory, LeftTuple paramLeftTuple)
{
LeftTuple localLeftTuple = paramLeftTuple;
NonStringConstructorClass localNonStringConstructorClass2 = (NonStringConstructorClass)this.declarations[0].getValue(paramInternalWorkingMemory, localLeftTuple.getHandle().getObject());
Object localObject = ((Map.Entry)paramInternalFactHandle.getObject()).getKey();
NonStringConstructorClass localNonStringConstructorClass1 = localNonStringConstructorClass2;
if (localObject != null)
{
if ((localObject instanceof NonStringConstructorClass)) {
localObject = (NonStringConstructorClass)localObject;
} else {
localObject = new NonStringConstructorClass(localObject.toString());
}
}
else
{
tmpTernaryOp = (localNonStringConstructorClass1 != null ? 0 : true;
break label123;
}
label123:
return localNonStringConstructorClass1 == null ? false : ((NonStringConstructorClass)localObject).equals(localNonStringConstructorClass1);
}
}
{code}
It seem that, a fallback for primitive types was included, by calling the constructor of an object with the object's toString() output:
{code}
localObject = new NonStringConstructorClass(localObject.toString());
{code}
At runtime this fails, if no such constructor exists.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
More information about the jboss-jira
mailing list