diff --git a/utbot-fuzzers/src/main/kotlin/org/utbot/fuzzer/providers/ObjectModelProvider.kt b/utbot-fuzzers/src/main/kotlin/org/utbot/fuzzer/providers/ObjectModelProvider.kt index d80261818b..3a3fef826c 100644 --- a/utbot-fuzzers/src/main/kotlin/org/utbot/fuzzer/providers/ObjectModelProvider.kt +++ b/utbot-fuzzers/src/main/kotlin/org/utbot/fuzzer/providers/ObjectModelProvider.kt @@ -48,8 +48,11 @@ class ObjectModelProvider( parameterIndex: Int, classId: ClassId, ): Sequence = sequence { - if (unwantedConstructorsClasses.contains(classId) || - classId.isPrimitiveWrapper || classId.isEnum || classId.isAbstract + if (unwantedConstructorsClasses.contains(classId) + || classId.isPrimitiveWrapper + || classId.isEnum + || classId.isAbstract + || (classId.isInner && !classId.isStatic) ) return@sequence val constructors = collectConstructors(classId) { javaConstructor -> diff --git a/utbot-fuzzers/src/test/java/org/utbot/framework/plugin/api/samples/WithInnerClass.java b/utbot-fuzzers/src/test/java/org/utbot/framework/plugin/api/samples/WithInnerClass.java new file mode 100644 index 0000000000..49da2e8fda --- /dev/null +++ b/utbot-fuzzers/src/test/java/org/utbot/framework/plugin/api/samples/WithInnerClass.java @@ -0,0 +1,19 @@ +package org.utbot.framework.plugin.api.samples; + +public class WithInnerClass { + public class NonStatic { + public int x; + public NonStatic(int x) { this.x = x; } + } + int f(NonStatic b) { + return b.x * b.x; + } + + public static class Static { + public int x; + public Static(int x) { this.x = x; } + } + int g(Static b) { + return b.x * b.x; + } +} diff --git a/utbot-fuzzers/src/test/kotlin/org/utbot/framework/plugin/api/ModelProviderTest.kt b/utbot-fuzzers/src/test/kotlin/org/utbot/framework/plugin/api/ModelProviderTest.kt index bb96795bd0..f44db5063d 100644 --- a/utbot-fuzzers/src/test/kotlin/org/utbot/framework/plugin/api/ModelProviderTest.kt +++ b/utbot-fuzzers/src/test/kotlin/org/utbot/framework/plugin/api/ModelProviderTest.kt @@ -26,6 +26,7 @@ import org.utbot.framework.plugin.api.samples.FieldSetterClass import org.utbot.framework.plugin.api.samples.OuterClassWithEnums import org.utbot.framework.plugin.api.samples.PackagePrivateFieldAndClass import org.utbot.framework.plugin.api.samples.SampleEnum +import org.utbot.framework.plugin.api.samples.WithInnerClass import org.utbot.framework.plugin.api.util.executableId import org.utbot.framework.plugin.api.util.primitiveByWrapper import org.utbot.framework.plugin.api.util.primitiveWrappers @@ -561,6 +562,29 @@ class ModelProviderTest { } } + @Test + fun `no models are created for inner non-static class`() { + withUtContext(UtContext(this::class.java.classLoader)) { + val result = collect( + ObjectModelProvider(TestIdentityPreservingIdGenerator), + parameters = listOf(WithInnerClass.NonStatic::class.id) + ) + assertEquals(0, result.size) + } + } + + @Test + fun `some models are created for inner static class`() { + withUtContext(UtContext(this::class.java.classLoader)) { + val result = collect( + ObjectModelProvider(TestIdentityPreservingIdGenerator), + parameters = listOf(WithInnerClass.Static::class.id) + ) + assertEquals(1, result.size) + assertTrue(result[0]!!.isNotEmpty()) + } + } + private enum class OneTwoThree { ONE, TWO, THREE }