From 3feffd43173c34e8d41ff7be64f7a2d1008b4b01 Mon Sep 17 00:00:00 2001 From: Maksim Pelevin Date: Mon, 26 Sep 2022 11:41:01 +0300 Subject: [PATCH 1/2] Codegen unable to properly instantiate public inner classes #761 --- .../org/utbot/fuzzer/providers/ObjectModelProvider.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) 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 -> From f7f80e069a844992216a190bd751e62339f0e173 Mon Sep 17 00:00:00 2001 From: Maksim Pelevin Date: Mon, 26 Sep 2022 12:00:50 +0300 Subject: [PATCH 2/2] Test added --- .../plugin/api/samples/WithInnerClass.java | 19 +++++++++++++++ .../framework/plugin/api/ModelProviderTest.kt | 24 +++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 utbot-fuzzers/src/test/java/org/utbot/framework/plugin/api/samples/WithInnerClass.java 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 }