From 57b27c5c738a8f5e0af39b429a9fce81c511227a Mon Sep 17 00:00:00 2001 From: IlyaMuravjov Date: Fri, 10 Mar 2023 17:51:23 +0300 Subject: [PATCH 1/2] Support regions without comments, e.g. mocking utils region for Spring --- .../codegen/domain/models/CgElement.kt | 3 ++- .../codegen/renderer/CgAbstractRenderer.kt | 11 ++++++---- .../codegen/renderer/CgKotlinRenderer.kt | 21 +++---------------- .../tree/CgSpringTestClassConstructor.kt | 6 +++--- 4 files changed, 15 insertions(+), 26 deletions(-) diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgElement.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgElement.kt index 2d0d82a431..e049f21f3a 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgElement.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgElement.kt @@ -164,7 +164,8 @@ class CgClassBody( * A class representing the IntelliJ IDEA's regions. * A region is a part of code between the special starting and ending comments. * - * [header] The header of the region. + * @property header The header of the region, + * no ///region and ///endregion comments are generated if [header] is `null` */ sealed class CgRegion : CgElement { abstract val header: String? diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgAbstractRenderer.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgAbstractRenderer.kt index 39c41e3df0..0f0917cc5c 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgAbstractRenderer.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgAbstractRenderer.kt @@ -190,9 +190,10 @@ abstract class CgAbstractRenderer( private fun CgRegion<*>.render(printLineAfterContentEnd: Boolean = false) { if (content.isEmpty() || isInterrupted) return - print(regionStart) - header?.let { print(" $it") } - println() + header?.let { + print(regionStart) + println(" $it") + } if (this is CgTestMethodCluster) description?.accept(this@CgAbstractRenderer) @@ -208,7 +209,9 @@ abstract class CgAbstractRenderer( if (printLineAfterContentEnd) println() - println(regionEnd) + header?.let { + println(regionEnd) + } if (isLimitExceeded && !isInterrupted) { visit(CgSingleLineComment("Abrupt generation termination: file size exceeds configured limit (${FileUtil.byteCountToDisplaySize(UtSettings.maxTestFileSize.toLong())})")) diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt index 158cce48af..bbcebaf034 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt @@ -183,23 +183,6 @@ internal class CgKotlinRenderer(context: CgRendererContext, printer: CgPrinter = println("}") } - override fun visit(element: CgStaticsRegion) { - if (element.content.isEmpty()) return - - print(regionStart) - element.header?.let { print(" $it") } - println() - - for (item in element.content) { - println() - println("@JvmStatic") - item.accept(this) - } - - println(regionEnd) - } - - // Property access override fun visit(element: CgFieldAccess) { @@ -413,6 +396,8 @@ internal class CgKotlinRenderer(context: CgRendererContext, printer: CgPrinter = override fun renderMethodSignature(element: CgParameterizedTestDataProviderMethod) { val returnType = getKotlinClassString(element.returnType) + println() + println("@JvmStatic") println("fun ${element.name}(): $returnType") } @@ -654,4 +639,4 @@ internal class CgKotlinRenderer(context: CgRendererContext, printer: CgPrinter = print(">") } } -} \ No newline at end of file +} diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgSpringTestClassConstructor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgSpringTestClassConstructor.kt index cd3d751a1b..c63241a4ae 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgSpringTestClassConstructor.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgSpringTestClassConstructor.kt @@ -123,10 +123,10 @@ class CgSpringTestClassConstructor(context: CgContext): CgAbstractTestClassConst ) val methodCluster = CgMethodsCluster( - "Test run utility methods", - listOf(CgSimpleRegion("Mocking utils", listOf(beforeMethod, afterMethod))) + header = null, + listOf(CgSimpleRegion(header = null, listOf(beforeMethod, afterMethod))) ) return mockitoCloseableField to methodCluster } -} \ No newline at end of file +} From 16aafd95d55271a3c4401abff019207a959f948f Mon Sep 17 00:00:00 2001 From: IlyaMuravjov Date: Mon, 13 Mar 2023 10:48:38 +0300 Subject: [PATCH 2/2] Move @JvmStatic printing to visit(CgParameterizedTestDataProviderMethod) --- .../utbot/framework/codegen/renderer/CgKotlinRenderer.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt index bbcebaf034..3dcb3f7f91 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt @@ -366,6 +366,12 @@ internal class CgKotlinRenderer(context: CgRendererContext, printer: CgPrinter = print(")") } + override fun visit(element: CgParameterizedTestDataProviderMethod) { + println() + println("@JvmStatic") + super.visit(element) + } + override fun renderRegularImport(regularImport: RegularImport) { val escapedImport = getEscapedImportRendering(regularImport) println("import $escapedImport$statementEnding") @@ -396,8 +402,6 @@ internal class CgKotlinRenderer(context: CgRendererContext, printer: CgPrinter = override fun renderMethodSignature(element: CgParameterizedTestDataProviderMethod) { val returnType = getKotlinClassString(element.returnType) - println() - println("@JvmStatic") println("fun ${element.name}(): $returnType") }