Closed
Description
Description
Right now we are unable to properly assemble models if there are not nullable reference parameters in constructor -- such models are instantiated through reflection right now.
To Reproduce
Launch action on class Sample
from below:
data class Point(var x: Int, var y: Int)
class Sample(val y: Point) {
fun test(): Int {
if (y.x == 2)
return -1
return 0
}
}
Expected behavior
Tests with assembled models are generated.
Actual behavior
Classes are instantiated through reflection
Visual proofs (screenshots, logs, images)
@Test
fun testKek1() {
val s = (createInstance("nullability.Sample") as Sample)
val point = (createInstance("nullability.Point") as Point)
point.x = 2
setField(s, "nullability.Sample", "y", point)
val actual = kek(s)
assertEquals(-1, actual)
}
Environment
Symbolic execution 100%.
Additional context
Seems like the problem is that Kotlin compiler adds to constructor of Sample
instructions like INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkNotNullParameter (Ljava/lang/Object;Ljava/lang/String;)V
This leads to incorrect behavior of isAppropriate
and other methods in ConstructorAnalyzer
Metadata
Metadata
Assignees
Type
Projects
Status
Done