Skip to content

Commit 8fa3bb5

Browse files
authored
Codegen unable to properly instantiate public inner classes #761 (#1009)
1 parent ef67673 commit 8fa3bb5

File tree

3 files changed

+48
-2
lines changed

3 files changed

+48
-2
lines changed

utbot-fuzzers/src/main/kotlin/org/utbot/fuzzer/providers/ObjectModelProvider.kt

+5-2
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,11 @@ class ObjectModelProvider(
4848
parameterIndex: Int,
4949
classId: ClassId,
5050
): Sequence<ModelConstructor> = sequence {
51-
if (unwantedConstructorsClasses.contains(classId) ||
52-
classId.isPrimitiveWrapper || classId.isEnum || classId.isAbstract
51+
if (unwantedConstructorsClasses.contains(classId)
52+
|| classId.isPrimitiveWrapper
53+
|| classId.isEnum
54+
|| classId.isAbstract
55+
|| (classId.isInner && !classId.isStatic)
5356
) return@sequence
5457

5558
val constructors = collectConstructors(classId) { javaConstructor ->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.utbot.framework.plugin.api.samples;
2+
3+
public class WithInnerClass {
4+
public class NonStatic {
5+
public int x;
6+
public NonStatic(int x) { this.x = x; }
7+
}
8+
int f(NonStatic b) {
9+
return b.x * b.x;
10+
}
11+
12+
public static class Static {
13+
public int x;
14+
public Static(int x) { this.x = x; }
15+
}
16+
int g(Static b) {
17+
return b.x * b.x;
18+
}
19+
}

utbot-fuzzers/src/test/kotlin/org/utbot/framework/plugin/api/ModelProviderTest.kt

+24
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import org.utbot.framework.plugin.api.samples.FieldSetterClass
2626
import org.utbot.framework.plugin.api.samples.OuterClassWithEnums
2727
import org.utbot.framework.plugin.api.samples.PackagePrivateFieldAndClass
2828
import org.utbot.framework.plugin.api.samples.SampleEnum
29+
import org.utbot.framework.plugin.api.samples.WithInnerClass
2930
import org.utbot.framework.plugin.api.util.executableId
3031
import org.utbot.framework.plugin.api.util.primitiveByWrapper
3132
import org.utbot.framework.plugin.api.util.primitiveWrappers
@@ -561,6 +562,29 @@ class ModelProviderTest {
561562
}
562563
}
563564

565+
@Test
566+
fun `no models are created for inner non-static class`() {
567+
withUtContext(UtContext(this::class.java.classLoader)) {
568+
val result = collect(
569+
ObjectModelProvider(TestIdentityPreservingIdGenerator),
570+
parameters = listOf(WithInnerClass.NonStatic::class.id)
571+
)
572+
assertEquals(0, result.size)
573+
}
574+
}
575+
576+
@Test
577+
fun `some models are created for inner static class`() {
578+
withUtContext(UtContext(this::class.java.classLoader)) {
579+
val result = collect(
580+
ObjectModelProvider(TestIdentityPreservingIdGenerator),
581+
parameters = listOf(WithInnerClass.Static::class.id)
582+
)
583+
assertEquals(1, result.size)
584+
assertTrue(result[0]!!.isNotEmpty())
585+
}
586+
}
587+
564588
private enum class OneTwoThree {
565589
ONE, TWO, THREE
566590
}

0 commit comments

Comments
 (0)