Skip to content

Commit 1d48789

Browse files
committed
Workaround: run concrete execution for invokedynamic
1 parent 65d95c1 commit 1d48789

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

utbot-framework/src/main/kotlin/org/utbot/engine/UtBotSymbolicEngine.kt

+10-1
Original file line numberDiff line numberDiff line change
@@ -2471,7 +2471,7 @@ class UtBotSymbolicEngine(
24712471
is JInterfaceInvokeExpr -> virtualAndInterfaceInvoke(invokeExpr.base, invokeExpr.methodRef, invokeExpr.args)
24722472
is JVirtualInvokeExpr -> virtualAndInterfaceInvoke(invokeExpr.base, invokeExpr.methodRef, invokeExpr.args)
24732473
is JSpecialInvokeExpr -> specialInvoke(invokeExpr)
2474-
is JDynamicInvokeExpr -> TODO("$invokeExpr")
2474+
is JDynamicInvokeExpr -> dynamicInvoke(invokeExpr)
24752475
else -> error("Unknown class ${invokeExpr::class}")
24762476
}
24772477

@@ -2731,6 +2731,15 @@ class UtBotSymbolicEngine(
27312731
return commonInvokePart(invocation)
27322732
}
27332733

2734+
private fun dynamicInvoke(invokeExpr: JDynamicInvokeExpr): List<MethodResult> {
2735+
workaround(HACK) {
2736+
// The engine does not yet support JDynamicInvokeExpr, so switch to concrete execution if we encounter it
2737+
statesForConcreteExecution += environment.state
2738+
queuedSymbolicStateUpdates += UtFalse.asHardConstraint()
2739+
return emptyList()
2740+
}
2741+
}
2742+
27342743
/**
27352744
* Runs common invocation part for object wrapper or object instance.
27362745
*

0 commit comments

Comments
 (0)