From 1c89bdfed6d9c1ea82a9351a4b065e11b8929c49 Mon Sep 17 00:00:00 2001 From: Egor Kulikov Date: Mon, 14 Nov 2022 16:33:39 +0300 Subject: [PATCH 1/2] Restructuralize code generator --- docs/UtUtilsClass.md | 2 +- .../python/PythonGenerateTestsCommand.kt | 2 +- .../utbot/cli/GenerateTestsAbstractCommand.kt | 12 +- .../examples/manual/UtBotJavaApiTest.java | 6 +- .../assemble/AssembleModelGeneratorTests.kt | 2 +- .../org/utbot/external/api/UtBotJavaApi.kt | 12 +- .../assemble/AssembleModelGenerator.kt | 2 +- .../utbot/framework/codegen/CodeGenerator.kt | 116 ++++++++ .../org/utbot/framework/codegen/Keywords.kt | 36 --- .../framework/codegen/{ => domain}/Domain.kt | 11 +- .../builtin/MockitoBuiltins.kt | 3 +- .../builtin/ReflectionBuiltins.kt | 11 +- .../builtin/UtilMethodBuiltins.kt | 18 +- .../context/CgContext.kt | 55 ++-- .../context}/TestClassContext.kt | 10 +- .../tree => domain/models}/CgElement.kt | 24 +- .../models}/CgMethodTestSet.kt | 3 +- .../models}/TestClassModel.kt | 2 +- .../framework/codegen/model/CodeGenerator.kt | 268 ------------------ .../codegen/model/util/ClassNameUtil.kt | 10 - .../framework/codegen/model/util/TreeUtil.kt | 22 -- .../codegen/model/visitor/CgVisitor.kt | 263 ----------------- .../CgAbstractRenderer.kt | 158 +++++------ .../visitor => renderer}/CgJavaRenderer.kt | 74 +++-- .../visitor => renderer}/CgKotlinRenderer.kt | 83 +++--- .../{model/util => renderer}/CgPrinter.kt | 6 +- .../visitor => renderer}/CgRendererContext.kt | 16 +- .../framework/codegen/renderer/CgVisitor.kt | 263 +++++++++++++++++ .../UtilMethodRenderer.kt} | 12 +- .../tree => reports}/TestsGenerationReport.kt | 18 +- .../name => services}/CgNameGenerator.kt | 10 +- .../access}/CgCallableAccessManager.kt | 77 +++-- .../access}/CgFieldStateManager.kt | 46 +-- .../framework}/MockFrameworkManager.kt | 100 ++++--- .../framework}/TestFrameworkManager.kt | 71 ++--- .../services/language}/CgLanguageAssistant.kt | 36 +-- .../language}/JavaCgLanguageAssistant.kt | 12 +- .../codegen/services/language/KeywordsUtil.kt | 4 + .../language/KotlinCgLanguageAssistant.kt | 47 +++ .../language/LanguageTestFrameworkManager.kt | 12 + .../codegen/{model => }/tree/Builders.kt | 52 +++- .../tree/CgMethodConstructor.kt | 138 +++++---- .../util => tree}/CgStatementConstructor.kt | 100 +++---- .../tree/CgTestClassConstructor.kt | 2 +- .../tree/CgVariableConstructor.kt | 72 +++-- .../util => tree}/ConstructorUtils.kt | 32 +-- .../util => tree}/DeclarationUtils.kt | 2 +- .../ututils}/CgUtilClassConstructor.kt | 24 +- .../codegen/tree/ututils/UtilClassKind.kt | 149 ++++++++++ .../codegen/{model => }/util/ClassIdUtil.kt | 2 +- .../codegen/{model => }/util/DslUtil.kt | 37 ++- .../{model => }/util/ExecutableIdUtil.kt | 2 +- .../codegen/{model => }/util/FieldIdUtil.kt | 4 +- .../plugin/api/JVMTestFrameworkManager.kt | 15 +- .../plugin/api/KotlinCgLanguageAssistant.kt | 32 --- .../api/LanguageTestFrameworkManager.kt | 12 - .../framework/plugin/api/TestCaseGenerator.kt | 2 +- .../api/utils}/DependencyPatterns.kt | 10 +- .../api/utils}/DependencyUtils.kt | 2 +- .../GenerateTestsAndSarifReportFacade.kt | 6 +- .../plugin/sarif/SarifExtensionProvider.kt | 9 +- .../org/utbot/framework/process/EngineMain.kt | 9 +- .../util/ImplicitlyDeclaredMethods.kt | 4 +- .../extension/SarifGradleExtensionProvider.kt | 6 +- .../SarifGradleExtensionProviderTest.kt | 9 +- .../language/python/PythonTestsModel.kt | 4 +- .../generator/CodeGenerationController.kt | 15 +- .../plugin/models/GenerateTestsModel.kt | 12 +- .../intellij/plugin/process/EngineProcess.kt | 9 +- .../intellij/plugin/settings/Settings.kt | 22 +- .../plugin/settings/SettingsWindow.kt | 6 +- .../plugin/ui/GenerateTestsDialogWindow.kt | 24 +- .../plugin/ui/utils/LibraryMatcher.kt | 8 +- .../org/utbot/contest/ClassUnderTest.kt | 10 +- .../main/kotlin/org/utbot/contest/Contest.kt | 8 +- .../SarifMavenConfigurationProvider.kt | 6 +- .../SarifMavenConfigurationProviderTest.kt | 4 +- .../python/PythonTestGenerationProcessor.kt | 4 +- .../codegen/PythonCgLanguageAssistant.kt | 12 +- .../codegen/PythonTestFrameworkManager.kt | 4 +- .../codegen/model/PythonCodeGenerator.kt | 29 +- .../framework/codegen/model/PythonDomain.kt | 2 +- .../framework/codegen/model/PythonImports.kt | 2 + .../constructor/name/PythonCgNameGenerator.kt | 8 +- .../tree/PythonCgCallableAccessManager.kt | 19 +- .../tree/PythonCgMethodConstructor.kt | 14 +- .../tree/PythonCgStatementConstructor.kt | 51 +++- .../tree/PythonCgTestClassConstructor.kt | 10 +- .../tree/PythonCgVariableConstructor.kt | 14 +- .../tree/PythonTestFrameworkManager.kt | 16 +- .../constructor/util/ConstructorUtils.kt | 2 +- .../constructor/visitor/CgPythonRenderer.kt | 57 +++- .../constructor/visitor/CgPythonVisitor.kt | 2 +- .../codegen/model/tree/CgPythonElement.kt | 9 +- .../kotlin/org/utbot/testing/CheckersUtil.kt | 18 +- .../testing/CodeGenerationIntegrationTest.kt | 2 +- .../utbot/testing/CompilationAndRunUtils.kt | 4 +- .../testing/TestCodeGeneratorPipeline.kt | 16 +- 98 files changed, 1585 insertions(+), 1505 deletions(-) create mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/codegen/CodeGenerator.kt delete mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Keywords.kt rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{ => domain}/Domain.kt (98%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor => domain}/builtin/MockitoBuiltins.kt (97%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor => domain}/builtin/ReflectionBuiltins.kt (90%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor => domain}/builtin/UtilMethodBuiltins.kt (95%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor => domain}/context/CgContext.kt (92%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor => domain/context}/TestClassContext.kt (81%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/tree => domain/models}/CgElement.kt (97%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor => domain/models}/CgMethodTestSet.kt (98%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor => domain/models}/TestClassModel.kt (97%) delete mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassNameUtil.kt delete mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/TreeUtil.kt delete mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgVisitor.kt rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/visitor => renderer}/CgAbstractRenderer.kt (84%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/visitor => renderer}/CgJavaRenderer.kt (83%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/visitor => renderer}/CgKotlinRenderer.kt (89%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/util => renderer}/CgPrinter.kt (93%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/visitor => renderer}/CgRendererContext.kt (79%) create mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgVisitor.kt rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/visitor/UtilMethods.kt => renderer/UtilMethodRenderer.kt} (99%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor/tree => reports}/TestsGenerationReport.kt (85%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor/name => services}/CgNameGenerator.kt (95%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor/tree => services/access}/CgCallableAccessManager.kt (91%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor/tree => services/access}/CgFieldStateManager.kt (86%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor/tree => services/framework}/MockFrameworkManager.kt (81%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor/tree => services/framework}/TestFrameworkManager.kt (91%) rename utbot-framework/src/main/kotlin/org/utbot/framework/{plugin/api => codegen/services/language}/CgLanguageAssistant.kt (56%) rename utbot-framework/src/main/kotlin/org/utbot/framework/{plugin/api => codegen/services/language}/JavaCgLanguageAssistant.kt (76%) create mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/KeywordsUtil.kt create mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/KotlinCgLanguageAssistant.kt create mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/LanguageTestFrameworkManager.kt rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model => }/tree/Builders.kt (75%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor => }/tree/CgMethodConstructor.kt (94%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor/util => tree}/CgStatementConstructor.kt (85%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor => }/tree/CgTestClassConstructor.kt (99%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor => }/tree/CgVariableConstructor.kt (89%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor/util => tree}/ConstructorUtils.kt (94%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor/util => tree}/DeclarationUtils.kt (89%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model/constructor/tree => tree/ututils}/CgUtilClassConstructor.kt (61%) create mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/ututils/UtilClassKind.kt rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model => }/util/ClassIdUtil.kt (97%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model => }/util/DslUtil.kt (73%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model => }/util/ExecutableIdUtil.kt (93%) rename utbot-framework/src/main/kotlin/org/utbot/framework/codegen/{model => }/util/FieldIdUtil.kt (96%) delete mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/KotlinCgLanguageAssistant.kt delete mode 100644 utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/LanguageTestFrameworkManager.kt rename utbot-framework/src/main/kotlin/org/utbot/framework/{codegen/model/util => plugin/api/utils}/DependencyPatterns.kt (93%) rename utbot-framework/src/main/kotlin/org/utbot/framework/{codegen/model/util => plugin/api/utils}/DependencyUtils.kt (98%) diff --git a/docs/UtUtilsClass.md b/docs/UtUtilsClass.md index 92cd801189..63279678a2 100644 --- a/docs/UtUtilsClass.md +++ b/docs/UtUtilsClass.md @@ -25,7 +25,7 @@ As one can see, the comment mentions two characteristics of the `UtUtils` class: If the generated tests require additional _utility methods_, the existing `UtUtils` class is upgraded and gets a new version number, which should be defined here: -`org.utbot.framework.codegen.model.constructor.builtin.UtilClassFileMethodProvider.UTIL_CLASS_VERSION` +`org.utbot.framework.codegen.domain.builtin.UtilClassFileMethodProvider.UTIL_CLASS_VERSION` _2. Mockito support_ diff --git a/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonGenerateTestsCommand.kt b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonGenerateTestsCommand.kt index 23495af577..4ef3442a66 100644 --- a/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonGenerateTestsCommand.kt +++ b/utbot-cli-python/src/main/kotlin/org/utbot/cli/language/python/PythonGenerateTestsCommand.kt @@ -6,7 +6,7 @@ import com.github.ajalt.clikt.parameters.options.* import com.github.ajalt.clikt.parameters.types.choice import com.github.ajalt.clikt.parameters.types.long import mu.KotlinLogging -import org.utbot.framework.codegen.TestFramework +import org.utbot.framework.codegen.domain.TestFramework import org.utbot.python.PythonMethod import org.utbot.python.PythonTestGenerationProcessor import org.utbot.python.PythonTestGenerationProcessor.processTestGeneration diff --git a/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsAbstractCommand.kt b/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsAbstractCommand.kt index 5a81242b8c..35cc1df6e6 100644 --- a/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsAbstractCommand.kt +++ b/utbot-cli/src/main/kotlin/org/utbot/cli/GenerateTestsAbstractCommand.kt @@ -16,12 +16,12 @@ import org.utbot.common.PathUtil.toURL import org.utbot.common.toPath import org.utbot.engine.Mocker import org.utbot.framework.UtSettings -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.MockitoStaticMocking -import org.utbot.framework.codegen.NoStaticMocking -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.model.CodeGenerator -import org.utbot.framework.codegen.testFrameworkByName +import org.utbot.framework.codegen.CodeGenerator +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.MockitoStaticMocking +import org.utbot.framework.codegen.domain.NoStaticMocking +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.testFrameworkByName import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.ExecutableId diff --git a/utbot-framework-test/src/test/java/org/utbot/examples/manual/UtBotJavaApiTest.java b/utbot-framework-test/src/test/java/org/utbot/examples/manual/UtBotJavaApiTest.java index b04512aafc..73cde6f544 100644 --- a/utbot-framework-test/src/test/java/org/utbot/examples/manual/UtBotJavaApiTest.java +++ b/utbot-framework-test/src/test/java/org/utbot/examples/manual/UtBotJavaApiTest.java @@ -20,9 +20,9 @@ import org.utbot.external.api.TestMethodInfo; import org.utbot.external.api.UtBotJavaApi; import org.utbot.external.api.UtModelFactory; -import org.utbot.framework.codegen.ForceStaticMocking; -import org.utbot.framework.codegen.Junit4; -import org.utbot.framework.codegen.MockitoStaticMocking; +import org.utbot.framework.codegen.domain.ForceStaticMocking; +import org.utbot.framework.codegen.domain.Junit4; +import org.utbot.framework.codegen.domain.MockitoStaticMocking; import org.utbot.framework.plugin.api.*; import org.utbot.framework.plugin.api.util.UtContext; import org.utbot.framework.plugin.services.JdkInfoDefaultProvider; diff --git a/utbot-framework-test/src/test/kotlin/org/utbot/framework/assemble/AssembleModelGeneratorTests.kt b/utbot-framework-test/src/test/kotlin/org/utbot/framework/assemble/AssembleModelGeneratorTests.kt index 7a252bb33e..6adb3b35f0 100644 --- a/utbot-framework-test/src/test/kotlin/org/utbot/framework/assemble/AssembleModelGeneratorTests.kt +++ b/utbot-framework-test/src/test/kotlin/org/utbot/framework/assemble/AssembleModelGeneratorTests.kt @@ -37,6 +37,7 @@ import org.utbot.examples.assemble.DefaultFieldWithDirectAccessor import org.utbot.examples.assemble.DefaultFieldWithSetter import org.utbot.examples.assemble.DefaultPackagePrivateField import org.utbot.examples.assemble.StaticField +import org.utbot.framework.codegen.tree.arrayTypeOf import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.ExecutableId import org.utbot.framework.plugin.api.FieldId @@ -58,7 +59,6 @@ import org.utbot.framework.util.SootUtils import org.utbot.framework.util.instanceCounter import org.utbot.framework.util.modelIdCounter import kotlin.reflect.full.functions -import org.utbot.framework.codegen.model.constructor.util.arrayTypeOf /** * Test classes must be located in the same folder as [AssembleTestUtils] class. diff --git a/utbot-framework/src/main/kotlin/org/utbot/external/api/UtBotJavaApi.kt b/utbot-framework/src/main/kotlin/org/utbot/external/api/UtBotJavaApi.kt index 4871fdfc84..ddbf6593bc 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/external/api/UtBotJavaApi.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/external/api/UtBotJavaApi.kt @@ -3,12 +3,12 @@ package org.utbot.external.api import org.utbot.common.FileUtil import org.utbot.common.nameOfPackage import org.utbot.framework.UtSettings -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.Junit5 -import org.utbot.framework.codegen.NoStaticMocking -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.model.CodeGenerator +import org.utbot.framework.codegen.CodeGenerator +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.NoStaticMocking +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework import org.utbot.framework.concrete.UtConcreteExecutionData import org.utbot.framework.concrete.UtConcreteExecutionResult import org.utbot.framework.concrete.UtExecutionInstrumentation diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/assemble/AssembleModelGenerator.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/assemble/AssembleModelGenerator.kt index dc9fc6b1ad..2afc9b96b4 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/assemble/AssembleModelGenerator.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/assemble/AssembleModelGenerator.kt @@ -5,7 +5,7 @@ import org.utbot.common.isPublic import org.utbot.engine.ResolvedExecution import org.utbot.engine.ResolvedModels import org.utbot.framework.UtSettings -import org.utbot.framework.codegen.model.util.isAccessibleFrom +import org.utbot.framework.codegen.util.isAccessibleFrom import org.utbot.framework.modifications.AnalysisMode.SettersAndDirectAccessors import org.utbot.framework.modifications.ConstructorAnalyzer import org.utbot.framework.modifications.ConstructorAssembleInfo diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/CodeGenerator.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/CodeGenerator.kt new file mode 100644 index 0000000000..59300b8fba --- /dev/null +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/CodeGenerator.kt @@ -0,0 +1,116 @@ +package org.utbot.framework.codegen + +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.HangingTestsTimeout +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.models.CgMethodTestSet +import org.utbot.framework.codegen.domain.models.TestClassModel +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.renderer.CgAbstractRenderer +import org.utbot.framework.codegen.reports.TestsGenerationReport +import org.utbot.framework.codegen.tree.CgTestClassConstructor +import org.utbot.framework.codegen.tree.ututils.UtilClassKind +import org.utbot.framework.codegen.services.language.CgLanguageAssistant +import org.utbot.framework.plugin.api.ClassId +import org.utbot.framework.plugin.api.CodegenLanguage +import org.utbot.framework.plugin.api.ExecutableId +import org.utbot.framework.plugin.api.MockFramework +import org.utbot.framework.plugin.api.UtMethodTestSet + +open class CodeGenerator( + val classUnderTest: ClassId, + paramNames: MutableMap> = mutableMapOf(), + generateUtilClassFile: Boolean = false, + testFramework: TestFramework = TestFramework.defaultItem, + mockFramework: MockFramework = MockFramework.defaultItem, + staticsMocking: StaticsMocking = StaticsMocking.defaultItem, + forceStaticMocking: ForceStaticMocking = ForceStaticMocking.defaultItem, + generateWarningsForStaticMocking: Boolean = true, + codegenLanguage: CodegenLanguage = CodegenLanguage.defaultItem, + parameterizedTestSource: ParametrizedTestSource = ParametrizedTestSource.defaultItem, + runtimeExceptionTestsBehaviour: RuntimeExceptionTestsBehaviour = RuntimeExceptionTestsBehaviour.defaultItem, + hangingTestsTimeout: HangingTestsTimeout = HangingTestsTimeout(), + enableTestsTimeout: Boolean = true, + testClassPackageName: String = classUnderTest.packageName, +) { + + open var context: CgContext = CgContext( + classUnderTest = classUnderTest, + generateUtilClassFile = generateUtilClassFile, + paramNames = paramNames, + testFramework = testFramework, + mockFramework = mockFramework, + codegenLanguage = codegenLanguage, + cgLanguageAssistant = CgLanguageAssistant.getByCodegenLanguage(codegenLanguage), + parametrizedTestSource = parameterizedTestSource, + staticsMocking = staticsMocking, + forceStaticMocking = forceStaticMocking, + generateWarningsForStaticMocking = generateWarningsForStaticMocking, + runtimeExceptionTestsBehaviour = runtimeExceptionTestsBehaviour, + hangingTestsTimeout = hangingTestsTimeout, + enableTestsTimeout = enableTestsTimeout, + testClassPackageName = testClassPackageName + ) + + //TODO: we support custom test class name only in utbot-online, probably support them in plugin as well + fun generateAsString(testSets: Collection, testClassCustomName: String? = null): String = + generateAsStringWithTestReport(testSets, testClassCustomName).generatedCode + + //TODO: we support custom test class name only in utbot-online, probably support them in plugin as well + fun generateAsStringWithTestReport( + testSets: Collection, + testClassCustomName: String? = null, + ): CodeGeneratorResult { + val cgTestSets = testSets.map { CgMethodTestSet(it) }.toList() + return withCustomContext(testClassCustomName) { + context.withTestClassFileScope { + val astConstructor = CgTestClassConstructor(context) + val renderer = CgAbstractRenderer.makeRenderer(context) + val testClassModel = TestClassModel.fromTestSets(classUnderTest, cgTestSets) + + val testClassFile = astConstructor.construct(testClassModel) + testClassFile.accept(renderer) + + CodeGeneratorResult( + generatedCode = renderer.toString(), + utilClassKind = UtilClassKind.fromCgContextOrNull(context), + testsGenerationReport = testClassFile.testsGenerationReport + ) + } + } + } + + /** + * Wrapper function that configures context as needed for utbot-online: + * - turns on imports optimization in code generator + * - passes a custom test class name if there is one + */ + fun withCustomContext(testClassCustomName: String? = null, block: () -> R): R { + val prevContext = context + return try { + context = prevContext.copy( + shouldOptimizeImports = true, + testClassCustomName = testClassCustomName + ) + block() + } finally { + context = prevContext + } + } +} + +/** + * @property generatedCode the source code of the test class + * @property testsGenerationReport some info about test generation process + * @property utilClassKind the kind of util class if it is required, otherwise - null + */ +data class CodeGeneratorResult( + val generatedCode: String, + val testsGenerationReport: TestsGenerationReport, + // null if no util class needed, e.g. when we are generating utils directly into test class + val utilClassKind: UtilClassKind? = null, +) + diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Keywords.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Keywords.kt deleted file mode 100644 index 693c305156..0000000000 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Keywords.kt +++ /dev/null @@ -1,36 +0,0 @@ -package org.utbot.framework.codegen - -import org.utbot.framework.plugin.api.CgLanguageAssistant - -private val javaKeywords = setOf( - "abstract", "assert", "boolean", "break", "byte", "case", "catch", "char", "class", "const", - "continue", "default", "do", "double", "else", "enum", "extends", "final", "finally", "float", "for", "goto", - "if", "implements", "import", "instanceof", "int", "interface", "long", "native", "new", "package", "private", - "protected", "public", "return", "short", "static", "strictfp", "super", "switch", "synchronized", "this", - "throw", "throws", "transient", "try", "void", "volatile", "while", "null", "false", "true" -) - -private val kotlinHardKeywords = setOf( - "as", "as?", "break", "class", "continue", "do", "else", "false", "for", "fun", "if", "in", "!in", "interface", - "is", "!is", "null", "object", "package", "return", "super", "this", "throw", "true", "try", "typealias", "typeof", - "val", "var", "when", "while" -) - -@Suppress("unused") -private val kotlinSoftKeywords = setOf( - "by", "catch", "constructor", "delegate", "dynamic", "field", "file", "finally", "get", "import", "init", - "param", "property", "receiver", "set", "setparam", "value", "where" -) - -@Suppress("unused") -private val kotlinModifierKeywords = setOf( - "actual", "abstract", "annotation", "companion", "const", "crossinline", "data", "enum", "expect", "external", - "final", "infix", "inline", "inner", "internal", "lateinit", "noinline", "open", "operator", "out", "override", - "private", "protected", "public", "reified", "sealed", "suspend", "tailrec", "vararg" -) - -// For now, we check only hard keywords because others can be used as methods and variables identifiers -private val kotlinKeywords = kotlinHardKeywords - -fun isLanguageKeyword(word: String, codegenLanguageAssistant: CgLanguageAssistant): Boolean = - word in codegenLanguageAssistant.languageKeywords diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Domain.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/Domain.kt similarity index 98% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Domain.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/Domain.kt index e2d586a0d5..bfc721c52c 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/Domain.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/Domain.kt @@ -1,10 +1,10 @@ -package org.utbot.framework.codegen +package org.utbot.framework.codegen.domain import org.utbot.framework.DEFAULT_CONCRETE_EXECUTION_TIMEOUT_IN_CHILD_PROCESS_MS -import org.utbot.framework.codegen.model.constructor.builtin.mockitoClassId -import org.utbot.framework.codegen.model.constructor.builtin.ongoingStubbingClassId -import org.utbot.framework.codegen.model.constructor.util.argumentsClassId -import org.utbot.framework.codegen.model.tree.CgClassId +import org.utbot.framework.codegen.domain.builtin.mockitoClassId +import org.utbot.framework.codegen.domain.builtin.ongoingStubbingClassId +import org.utbot.framework.codegen.domain.models.CgClassId +import org.utbot.framework.codegen.tree.argumentsClassId import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodeGenerationSettingBox @@ -30,7 +30,6 @@ import org.utbot.framework.plugin.api.util.shortArrayClassId import org.utbot.framework.plugin.api.util.voidClassId import java.io.File import org.utbot.framework.plugin.api.util.longClassId -import org.utbot.framework.plugin.api.util.objectArrayClassId import org.utbot.framework.plugin.api.util.voidWrapperClassId data class TestClassFile(val packageName: String, val imports: List, val testClass: String) diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/builtin/MockitoBuiltins.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/builtin/MockitoBuiltins.kt similarity index 97% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/builtin/MockitoBuiltins.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/builtin/MockitoBuiltins.kt index 27e128d210..e1a7c5f9ff 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/builtin/MockitoBuiltins.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/builtin/MockitoBuiltins.kt @@ -1,7 +1,6 @@ -package org.utbot.framework.codegen.model.constructor.builtin +package org.utbot.framework.codegen.domain.builtin import org.utbot.framework.plugin.api.BuiltinClassId -import org.utbot.framework.plugin.api.MethodId import org.utbot.framework.plugin.api.util.booleanClassId import org.utbot.framework.plugin.api.util.builtinMethodId import org.utbot.framework.plugin.api.util.builtinStaticMethodId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/builtin/ReflectionBuiltins.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/builtin/ReflectionBuiltins.kt similarity index 90% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/builtin/ReflectionBuiltins.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/builtin/ReflectionBuiltins.kt index 0120e8d0fc..522049321e 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/builtin/ReflectionBuiltins.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/builtin/ReflectionBuiltins.kt @@ -1,4 +1,4 @@ -package org.utbot.framework.codegen.model.constructor.builtin +package org.utbot.framework.codegen.domain.builtin import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.MethodId @@ -19,15 +19,6 @@ import java.lang.reflect.InvocationTargetException //TODO: these methods are called builtins, but actually are just [MethodId] //may be fixed in https://github.com/UnitTestBot/UTBotJava/issues/138 -internal val reflectionBuiltins: Set - get() = setOf( - setAccessible, invoke, newInstance, getMethodId, forName, - getDeclaredMethod, getDeclaredConstructor, allocateInstance, - getClass, getDeclaredField, isEnumConstant, getFieldName, - equals, getSuperclass, setMethodId, newArrayInstance, - setArrayElement, getArrayElement, getTargetException, - ) - internal val setAccessible = methodId( classId = AccessibleObject::class.id, name = "setAccessible", diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/builtin/UtilMethodBuiltins.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/builtin/UtilMethodBuiltins.kt similarity index 95% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/builtin/UtilMethodBuiltins.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/builtin/UtilMethodBuiltins.kt index 74e1850dbd..d607fa4658 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/builtin/UtilMethodBuiltins.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/builtin/UtilMethodBuiltins.kt @@ -1,12 +1,12 @@ -package org.utbot.framework.codegen.model.constructor.builtin - -import org.utbot.framework.codegen.MockitoStaticMocking -import org.utbot.framework.codegen.model.UtilClassKind.Companion.PACKAGE_DELIMITER -import org.utbot.framework.codegen.model.UtilClassKind.Companion.UT_UTILS_BASE_PACKAGE_NAME -import org.utbot.framework.codegen.model.constructor.util.arrayTypeOf -import org.utbot.framework.codegen.model.constructor.util.utilMethodId -import org.utbot.framework.codegen.model.tree.CgClassId -import org.utbot.framework.codegen.model.visitor.utilMethodTextById +package org.utbot.framework.codegen.domain.builtin + +import org.utbot.framework.codegen.domain.MockitoStaticMocking +import org.utbot.framework.codegen.domain.models.CgClassId +import org.utbot.framework.codegen.renderer.utilMethodTextById +import org.utbot.framework.codegen.tree.arrayTypeOf +import org.utbot.framework.codegen.tree.utilMethodId +import org.utbot.framework.codegen.tree.ututils.UtilClassKind.Companion.PACKAGE_DELIMITER +import org.utbot.framework.codegen.tree.ututils.UtilClassKind.Companion.UT_UTILS_BASE_PACKAGE_NAME import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.BuiltinConstructorId import org.utbot.framework.plugin.api.ClassId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/context/CgContext.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/context/CgContext.kt similarity index 92% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/context/CgContext.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/context/CgContext.kt index ce461e3014..356d07270a 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/context/CgContext.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/context/CgContext.kt @@ -1,23 +1,20 @@ -package org.utbot.framework.codegen.model.constructor.context - -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.HangingTestsTimeout -import org.utbot.framework.codegen.Import -import org.utbot.framework.codegen.ParametrizedTestSource -import org.utbot.framework.codegen.RuntimeExceptionTestsBehaviour -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.model.constructor.tree.Block -import org.utbot.framework.codegen.model.constructor.util.EnvironmentFieldStateCache -import org.utbot.framework.codegen.model.constructor.util.importIfNeeded -import org.utbot.framework.codegen.model.tree.CgAnnotation -import org.utbot.framework.codegen.model.tree.CgExecutableCall -import org.utbot.framework.codegen.model.tree.CgStatement -import org.utbot.framework.codegen.model.tree.CgStatementExecutableCall -import org.utbot.framework.codegen.model.tree.CgTestMethod -import org.utbot.framework.codegen.model.tree.CgThisInstance -import org.utbot.framework.codegen.model.tree.CgValue -import org.utbot.framework.codegen.model.tree.CgVariable +package org.utbot.framework.codegen.domain.context + +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.HangingTestsTimeout +import org.utbot.framework.codegen.domain.Import +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.models.CgAnnotation +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgStatementExecutableCall +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgThisInstance +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable import java.util.IdentityHashMap import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.PersistentMap @@ -25,16 +22,18 @@ import kotlinx.collections.immutable.PersistentSet import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentMapOf import kotlinx.collections.immutable.persistentSetOf -import org.utbot.framework.codegen.model.constructor.CgMethodTestSet -import org.utbot.framework.codegen.model.constructor.builtin.TestClassUtilMethodProvider -import org.utbot.framework.codegen.model.constructor.builtin.UtilClassFileMethodProvider -import org.utbot.framework.codegen.model.constructor.builtin.UtilMethodProvider -import org.utbot.framework.codegen.model.constructor.TestClassContext -import org.utbot.framework.codegen.model.constructor.TestClassModel -import org.utbot.framework.codegen.model.tree.CgParameterKind +import org.utbot.framework.codegen.domain.models.CgMethodTestSet +import org.utbot.framework.codegen.domain.builtin.TestClassUtilMethodProvider +import org.utbot.framework.codegen.domain.builtin.UtilClassFileMethodProvider +import org.utbot.framework.codegen.domain.builtin.UtilMethodProvider +import org.utbot.framework.codegen.domain.models.TestClassModel +import org.utbot.framework.codegen.domain.models.CgParameterKind +import org.utbot.framework.codegen.services.access.Block +import org.utbot.framework.codegen.tree.EnvironmentFieldStateCache +import org.utbot.framework.codegen.tree.importIfNeeded import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.ClassId -import org.utbot.framework.plugin.api.CgLanguageAssistant +import org.utbot.framework.codegen.services.language.CgLanguageAssistant import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.ExecutableId import org.utbot.framework.plugin.api.FieldId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/TestClassContext.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/context/TestClassContext.kt similarity index 81% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/TestClassContext.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/context/TestClassContext.kt index 86ee8e9b28..00f223d102 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/TestClassContext.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/context/TestClassContext.kt @@ -1,10 +1,10 @@ -package org.utbot.framework.codegen.model.constructor +package org.utbot.framework.codegen.domain.context -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.tree.CgAnnotation -import org.utbot.framework.codegen.model.tree.CgMethod +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgAnnotation +import org.utbot.framework.codegen.domain.models.CgMethod import org.utbot.framework.plugin.api.ClassId -import org.utbot.framework.codegen.model.tree.CgClass +import org.utbot.framework.codegen.domain.models.CgClass /** * This class stores context information needed to build [CgClass]. diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/tree/CgElement.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgElement.kt similarity index 97% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/tree/CgElement.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgElement.kt index 6062bf4cda..0c32541cbd 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/tree/CgElement.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgElement.kt @@ -1,15 +1,13 @@ -package org.utbot.framework.codegen.model.tree +package org.utbot.framework.codegen.domain.models import org.utbot.common.WorkaroundReason import org.utbot.common.workaround -import org.utbot.framework.codegen.Import -import org.utbot.framework.codegen.model.constructor.tree.CgUtilClassConstructor -import org.utbot.framework.codegen.model.constructor.tree.TestsGenerationReport -import org.utbot.framework.codegen.model.util.CgExceptionHandler -import org.utbot.framework.codegen.model.visitor.CgRendererContext -import org.utbot.framework.codegen.model.visitor.CgVisitor -import org.utbot.framework.codegen.model.visitor.auxiliaryClassTextById -import org.utbot.framework.codegen.model.visitor.utilMethodTextById +import org.utbot.framework.codegen.domain.Import +import org.utbot.framework.codegen.renderer.CgRendererContext +import org.utbot.framework.codegen.renderer.CgVisitor +import org.utbot.framework.codegen.renderer.auxiliaryClassTextById +import org.utbot.framework.codegen.renderer.utilMethodTextById +import org.utbot.framework.codegen.reports.TestsGenerationReport import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.ConstructorId @@ -799,7 +797,8 @@ open class CgAllocateArray(type: ClassId, elementType: ClassId, val size: Int) : class CgAllocateInitializedArray(val initializer: CgArrayInitializer) : CgAllocateArray(initializer.arrayType, initializer.elementType, initializer.size) -class CgArrayInitializer(val arrayType: ClassId, val elementType: ClassId, val values: List) : CgExpression { +class CgArrayInitializer(val arrayType: ClassId, val elementType: ClassId, val values: List) : + CgExpression { val size: Int get() = values.size @@ -938,6 +937,11 @@ class CgThrowStatement( class CgEmptyLine : CgStatement +data class CgExceptionHandler( + val exception: CgVariable, + val statements: List +) + class CgClassId( name: String, elementClassId: ClassId? = null, diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/CgMethodTestSet.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgMethodTestSet.kt similarity index 98% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/CgMethodTestSet.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgMethodTestSet.kt index c55541c6f6..6bf8e4e32b 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/CgMethodTestSet.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/CgMethodTestSet.kt @@ -1,8 +1,7 @@ -package org.utbot.framework.codegen.model.constructor +package org.utbot.framework.codegen.domain.models import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.ExecutableId -import org.utbot.framework.plugin.api.FieldId import org.utbot.framework.plugin.api.UtClusterInfo import org.utbot.framework.plugin.api.UtExecution import org.utbot.framework.plugin.api.UtExecutionFailure diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/TestClassModel.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/TestClassModel.kt similarity index 97% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/TestClassModel.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/TestClassModel.kt index 1e261b917b..1786212e9d 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/TestClassModel.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/domain/models/TestClassModel.kt @@ -1,4 +1,4 @@ -package org.utbot.framework.codegen.model.constructor +package org.utbot.framework.codegen.domain.models import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.util.enclosingClass diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/CodeGenerator.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/CodeGenerator.kt index 7b4c14e0c8..e69de29bb2 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/CodeGenerator.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/CodeGenerator.kt @@ -1,268 +0,0 @@ -package org.utbot.framework.codegen.model - -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.HangingTestsTimeout -import org.utbot.framework.codegen.ParametrizedTestSource -import org.utbot.framework.codegen.RuntimeExceptionTestsBehaviour -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.model.constructor.builtin.TestClassUtilMethodProvider -import org.utbot.framework.codegen.model.constructor.builtin.UtilClassFileMethodProvider -import org.utbot.framework.codegen.model.constructor.CgMethodTestSet -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor -import org.utbot.framework.codegen.model.constructor.tree.CgUtilClassConstructor -import org.utbot.framework.codegen.model.constructor.tree.TestsGenerationReport -import org.utbot.framework.codegen.model.tree.CgClassFile -import org.utbot.framework.codegen.model.visitor.CgAbstractRenderer -import org.utbot.framework.plugin.api.ClassId -import org.utbot.framework.plugin.api.CgLanguageAssistant -import org.utbot.framework.plugin.api.CodegenLanguage -import org.utbot.framework.plugin.api.ExecutableId -import org.utbot.framework.plugin.api.MockFramework -import org.utbot.framework.plugin.api.UtMethodTestSet -import org.utbot.framework.codegen.model.constructor.TestClassModel -import org.utbot.framework.codegen.model.tree.CgDocRegularStmt -import org.utbot.framework.codegen.model.tree.CgDocumentationComment -import java.util.* - -open class CodeGenerator( - val classUnderTest: ClassId, - paramNames: MutableMap> = mutableMapOf(), - generateUtilClassFile: Boolean = false, - testFramework: TestFramework = TestFramework.defaultItem, - mockFramework: MockFramework = MockFramework.defaultItem, - staticsMocking: StaticsMocking = StaticsMocking.defaultItem, - forceStaticMocking: ForceStaticMocking = ForceStaticMocking.defaultItem, - generateWarningsForStaticMocking: Boolean = true, - codegenLanguage: CodegenLanguage = CodegenLanguage.defaultItem, - parameterizedTestSource: ParametrizedTestSource = ParametrizedTestSource.defaultItem, - runtimeExceptionTestsBehaviour: RuntimeExceptionTestsBehaviour = RuntimeExceptionTestsBehaviour.defaultItem, - hangingTestsTimeout: HangingTestsTimeout = HangingTestsTimeout(), - enableTestsTimeout: Boolean = true, - testClassPackageName: String = classUnderTest.packageName, -) { - - open var context: CgContext = CgContext( - classUnderTest = classUnderTest, - generateUtilClassFile = generateUtilClassFile, - paramNames = paramNames, - testFramework = testFramework, - mockFramework = mockFramework, - codegenLanguage = codegenLanguage, - cgLanguageAssistant = CgLanguageAssistant.getByCodegenLanguage(codegenLanguage), - parametrizedTestSource = parameterizedTestSource, - staticsMocking = staticsMocking, - forceStaticMocking = forceStaticMocking, - generateWarningsForStaticMocking = generateWarningsForStaticMocking, - runtimeExceptionTestsBehaviour = runtimeExceptionTestsBehaviour, - hangingTestsTimeout = hangingTestsTimeout, - enableTestsTimeout = enableTestsTimeout, - testClassPackageName = testClassPackageName - ) - - //TODO: we support custom test class name only in utbot-online, probably support them in plugin as well - fun generateAsString(testSets: Collection, testClassCustomName: String? = null): String = - generateAsStringWithTestReport(testSets, testClassCustomName).generatedCode - - //TODO: we support custom test class name only in utbot-online, probably support them in plugin as well - fun generateAsStringWithTestReport( - testSets: Collection, - testClassCustomName: String? = null, - ): CodeGeneratorResult { - val cgTestSets = testSets.map { CgMethodTestSet(it) }.toList() - return generateAsStringWithTestReport(cgTestSets, testClassCustomName) - } - - private fun generateAsStringWithTestReport( - cgTestSets: List, - testClassCustomName: String? = null, - ): CodeGeneratorResult = withCustomContext(testClassCustomName) { - context.withTestClassFileScope { - val testClassModel = TestClassModel.fromTestSets(classUnderTest, cgTestSets) - val cgClassConstructor = CgTestClassConstructor(context) - val testClassFile = cgClassConstructor.construct(testClassModel) - - CodeGeneratorResult( - generatedCode = renderClassFile(testClassFile), - utilClassKind = UtilClassKind.fromCgContextOrNull(context), - testsGenerationReport = cgClassConstructor.testsGenerationReport - ) - } - } - - /** - * Wrapper function that configures context as needed for utbot-online: - * - turns on imports optimization in code generator - * - passes a custom test class name if there is one - */ - fun withCustomContext(testClassCustomName: String? = null, block: () -> R): R { - val prevContext = context - return try { - context = prevContext.copy( - shouldOptimizeImports = true, - testClassCustomName = testClassCustomName - ) - block() - } finally { - context = prevContext - } - } - - fun renderClassFile(file: CgClassFile): String { - val renderer = CgAbstractRenderer.makeRenderer(context) - file.accept(renderer) - return renderer.toString() - } -} - -/** - * @property generatedCode the source code of the test class - * @property testsGenerationReport some info about test generation process - * @property utilClassKind the kind of util class if it is required, otherwise - null - */ -data class CodeGeneratorResult( - val generatedCode: String, - val testsGenerationReport: TestsGenerationReport, - // null if no util class needed, e.g. when we are generating utils directly into test class - val utilClassKind: UtilClassKind? = null, -) - -/** - * A kind of util class. See the description of each kind at their respective classes. - * @property utilMethodProvider a [UtilClassFileMethodProvider] containing information about - * utilities that come from a separately generated UtUtils class - * (as opposed to utils that are declared directly in the test class, for example). - * @property mockFrameworkUsed a flag indicating if a mock framework was used. - * For detailed description see [CgContextOwner.mockFrameworkUsed]. - * @property mockFramework a framework used to create mocks - * @property priority when we generate multiple test classes, they can require different [UtilClassKind]. - * We will generate an util class corresponding to the kind with the greatest priority. - * For example, one test class may not use mocks, but the other one does. - * Then we will generate an util class with mocks, because it has a greater priority (see [UtUtilsWithMockito]). - */ -sealed class UtilClassKind( - internal val utilMethodProvider: UtilClassFileMethodProvider, - internal val mockFrameworkUsed: Boolean, - internal val mockFramework: MockFramework = MockFramework.MOCKITO, - private val priority: Int -) : Comparable { - - /** - * Contains comments specifying the version and the kind of util class being generated and - */ - fun utilClassDocumentation(codegenLanguage: CodegenLanguage): CgDocumentationComment - = CgDocumentationComment( - listOf( - CgDocRegularStmt(utilClassKindCommentText), - CgDocRegularStmt("$UTIL_CLASS_VERSION_COMMENT_PREFIX${utilClassVersion(codegenLanguage)}"), - ) - ) - - /** - * The version of util class being generated. - * For more details see [UtilClassFileMethodProvider.UTIL_CLASS_VERSION]. - */ - fun utilClassVersion(codegenLanguage: CodegenLanguage): String - = UtilClassFileMethodProvider(codegenLanguage).UTIL_CLASS_VERSION - - /** - * The text of comment specifying the kind of util class. - * At the moment, there are two kinds: [RegularUtUtils] (without Mockito) and [UtUtilsWithMockito]. - * - * This comment is needed when the plugin decides whether to overwrite an existing util class or not. - * When making that decision, it is important to determine if the existing class uses mocks or not, - * and this comment will help do that. - */ - abstract val utilClassKindCommentText: String - - /** - * A kind of regular UtUtils class. "Regular" here means that this class does not use a mock framework. - */ - class RegularUtUtils(val codegenLanguage: CodegenLanguage) : - UtilClassKind( - UtilClassFileMethodProvider(codegenLanguage), - mockFrameworkUsed = false, - priority = 0, - ) { - override val utilClassKindCommentText: String - get() = "This is a regular UtUtils class (without mock framework usage)" - } - - /** - * A kind of UtUtils class that uses a mock framework. At the moment the framework is Mockito. - */ - class UtUtilsWithMockito(val codegenLanguage: CodegenLanguage) : - UtilClassKind(UtilClassFileMethodProvider(codegenLanguage), mockFrameworkUsed = true, priority = 1) { - override val utilClassKindCommentText: String - get() = "This is UtUtils class with Mockito support" - } - - override fun compareTo(other: UtilClassKind): Int { - return priority.compareTo(other.priority) - } - - /** - * Construct an util class file as a [CgClassFile] and render it. - * @return the text of the generated util class file. - */ - fun getUtilClassText(codegenLanguage: CodegenLanguage): String { - val utilClassFile = CgUtilClassConstructor.constructUtilsClassFile(this, codegenLanguage) - val renderer = CgAbstractRenderer.makeRenderer(this, codegenLanguage) - utilClassFile.accept(renderer) - return renderer.toString() - } - - companion object { - - /** - * Class UtUtils will contain a comment specifying the version of this util class - * (if we ever change util methods, then util class will be different, hence the update of its version). - * This is a prefix that will go before the version in the comment. - */ - const val UTIL_CLASS_VERSION_COMMENT_PREFIX = "UtUtils class version: " - - fun utilClassKindByCommentOrNull( - comment: String, - codegenLanguage: CodegenLanguage) - : UtilClassKind? { - return when (comment) { - RegularUtUtils(codegenLanguage).utilClassKindCommentText -> RegularUtUtils(codegenLanguage) - UtUtilsWithMockito(codegenLanguage).utilClassKindCommentText -> UtUtilsWithMockito(codegenLanguage) - else -> null - } - } - - /** - * Check if an util class is required, and if so, what kind. - * @return `null` if [CgContext.utilMethodProvider] is not [UtilClassFileMethodProvider], - * because it means that util methods will be taken from some other provider (e.g. [TestClassUtilMethodProvider]). - */ - internal fun fromCgContextOrNull(context: CgContext): UtilClassKind? { - if (context.requiredUtilMethods.isEmpty()) return null - if (!context.mockFrameworkUsed) { - return RegularUtUtils(context.codegenLanguage) - } - return when (context.mockFramework) { - MockFramework.MOCKITO -> UtUtilsWithMockito(context.codegenLanguage) - // in case we will add any other mock frameworks, newer Kotlin compiler versions - // will report a non-exhaustive 'when', so we will not forget to support them here as well - } - } - - const val UT_UTILS_BASE_PACKAGE_NAME = "org.utbot.runtime.utils" - const val UT_UTILS_INSTANCE_NAME = "UtUtils" - const val PACKAGE_DELIMITER = "." - - /** - * List of package name components of UtUtils class. - * See whole package name at [UT_UTILS_BASE_PACKAGE_NAME]. - */ - fun utilsPackageNames(codegenLanguage: CodegenLanguage): List - = UT_UTILS_BASE_PACKAGE_NAME.split(PACKAGE_DELIMITER) + codegenLanguage.name.lowercase(Locale.getDefault()) - - fun utilsPackageFullName(codegenLanguage: CodegenLanguage): String - = utilsPackageNames(codegenLanguage).joinToString { PACKAGE_DELIMITER } - } -} diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassNameUtil.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassNameUtil.kt deleted file mode 100644 index 35815952e7..0000000000 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassNameUtil.kt +++ /dev/null @@ -1,10 +0,0 @@ -package org.utbot.framework.codegen.model.util - -/** - * Creates a name of test class. - * We need the name in code and the name of test class file be similar. - * On this way we need to avoid symbols like '$'. - */ -fun createTestClassName(name: String): String = name - .substringAfterLast('.') - .replace('\$', '_') \ No newline at end of file diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/TreeUtil.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/TreeUtil.kt deleted file mode 100644 index dc25cfa77d..0000000000 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/TreeUtil.kt +++ /dev/null @@ -1,22 +0,0 @@ -package org.utbot.framework.codegen.model.util - -import org.utbot.framework.codegen.model.tree.CgStatement -import org.utbot.framework.codegen.model.tree.CgVariable - -data class CgExceptionHandler( - val exception: CgVariable, - val statements: List -) - -class CgExceptionHandlerBuilder { - lateinit var exception: CgVariable - lateinit var statements: List - - fun build(): CgExceptionHandler { - return CgExceptionHandler(exception, statements) - } -} - -fun buildExceptionHandler(init: CgExceptionHandlerBuilder.() -> Unit): CgExceptionHandler { - return CgExceptionHandlerBuilder().apply(init).build() -} diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgVisitor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgVisitor.kt deleted file mode 100644 index a2910032bf..0000000000 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgVisitor.kt +++ /dev/null @@ -1,263 +0,0 @@ -package org.utbot.framework.codegen.model.visitor - -import org.utbot.framework.codegen.model.tree.CgClassFile -import org.utbot.framework.codegen.model.tree.CgAbstractFieldAccess -import org.utbot.framework.codegen.model.tree.CgAbstractMultilineComment -import org.utbot.framework.codegen.model.tree.CgAllocateArray -import org.utbot.framework.codegen.model.tree.CgAllocateInitializedArray -import org.utbot.framework.codegen.model.tree.CgAnonymousFunction -import org.utbot.framework.codegen.model.tree.CgArrayAnnotationArgument -import org.utbot.framework.codegen.model.tree.CgArrayElementAccess -import org.utbot.framework.codegen.model.tree.CgArrayInitializer -import org.utbot.framework.codegen.model.tree.CgAssignment -import org.utbot.framework.codegen.model.tree.CgAuxiliaryClass -import org.utbot.framework.codegen.model.tree.CgBreakStatement -import org.utbot.framework.codegen.model.tree.CgComment -import org.utbot.framework.codegen.model.tree.CgCommentedAnnotation -import org.utbot.framework.codegen.model.tree.CgComparison -import org.utbot.framework.codegen.model.tree.CgConstructorCall -import org.utbot.framework.codegen.model.tree.CgContinueStatement -import org.utbot.framework.codegen.model.tree.CgDeclaration -import org.utbot.framework.codegen.model.tree.CgDecrement -import org.utbot.framework.codegen.model.tree.CgDoWhileLoop -import org.utbot.framework.codegen.model.tree.CgDocClassLinkStmt -import org.utbot.framework.codegen.model.tree.CgDocCodeStmt -import org.utbot.framework.codegen.model.tree.CgDocMethodLinkStmt -import org.utbot.framework.codegen.model.tree.CgDocPreTagStatement -import org.utbot.framework.codegen.model.tree.CgCustomTagStatement -import org.utbot.framework.codegen.model.tree.CgDocRegularStmt -import org.utbot.framework.codegen.model.tree.CgDocumentationComment -import org.utbot.framework.codegen.model.tree.CgElement -import org.utbot.framework.codegen.model.tree.CgEmptyLine -import org.utbot.framework.codegen.model.tree.CgEnumConstantAccess -import org.utbot.framework.codegen.model.tree.CgEqualTo -import org.utbot.framework.codegen.model.tree.CgErrorTestMethod -import org.utbot.framework.codegen.model.tree.CgErrorWrapper -import org.utbot.framework.codegen.model.tree.CgExecutableCall -import org.utbot.framework.codegen.model.tree.CgMethodsCluster -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgFieldAccess -import org.utbot.framework.codegen.model.tree.CgForEachLoop -import org.utbot.framework.codegen.model.tree.CgForLoop -import org.utbot.framework.codegen.model.tree.CgGetJavaClass -import org.utbot.framework.codegen.model.tree.CgGetKotlinClass -import org.utbot.framework.codegen.model.tree.CgGetLength -import org.utbot.framework.codegen.model.tree.CgGreaterThan -import org.utbot.framework.codegen.model.tree.CgIfStatement -import org.utbot.framework.codegen.model.tree.CgIncrement -import org.utbot.framework.codegen.model.tree.CgInnerBlock -import org.utbot.framework.codegen.model.tree.CgIsInstance -import org.utbot.framework.codegen.model.tree.CgLessThan -import org.utbot.framework.codegen.model.tree.CgLiteral -import org.utbot.framework.codegen.model.tree.CgLogicalAnd -import org.utbot.framework.codegen.model.tree.CgLogicalOr -import org.utbot.framework.codegen.model.tree.CgLoop -import org.utbot.framework.codegen.model.tree.CgMethod -import org.utbot.framework.codegen.model.tree.CgMethodCall -import org.utbot.framework.codegen.model.tree.CgMultilineComment -import org.utbot.framework.codegen.model.tree.CgMultipleArgsAnnotation -import org.utbot.framework.codegen.model.tree.CgNamedAnnotationArgument -import org.utbot.framework.codegen.model.tree.CgNonStaticRunnable -import org.utbot.framework.codegen.model.tree.CgNotNullAssertion -import org.utbot.framework.codegen.model.tree.CgParameterDeclaration -import org.utbot.framework.codegen.model.tree.CgParameterizedTestDataProviderMethod -import org.utbot.framework.codegen.model.tree.CgReturnStatement -import org.utbot.framework.codegen.model.tree.CgSimpleRegion -import org.utbot.framework.codegen.model.tree.CgSingleArgAnnotation -import org.utbot.framework.codegen.model.tree.CgSingleLineComment -import org.utbot.framework.codegen.model.tree.CgSpread -import org.utbot.framework.codegen.model.tree.CgStatement -import org.utbot.framework.codegen.model.tree.CgStatementExecutableCall -import org.utbot.framework.codegen.model.tree.CgStaticFieldAccess -import org.utbot.framework.codegen.model.tree.CgStaticRunnable -import org.utbot.framework.codegen.model.tree.CgStaticsRegion -import org.utbot.framework.codegen.model.tree.CgSwitchCase -import org.utbot.framework.codegen.model.tree.CgSwitchCaseLabel -import org.utbot.framework.codegen.model.tree.CgClass -import org.utbot.framework.codegen.model.tree.CgClassBody -import org.utbot.framework.codegen.model.tree.CgNestedClassesRegion -import org.utbot.framework.codegen.model.tree.CgTestMethod -import org.utbot.framework.codegen.model.tree.CgTestMethodCluster -import org.utbot.framework.codegen.model.tree.CgThisInstance -import org.utbot.framework.codegen.model.tree.CgThrowStatement -import org.utbot.framework.codegen.model.tree.CgTripleSlashMultilineComment -import org.utbot.framework.codegen.model.tree.CgTryCatch -import org.utbot.framework.codegen.model.tree.CgTypeCast -import org.utbot.framework.codegen.model.tree.CgUtilMethod -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.tree.CgWhileLoop - -interface CgVisitor { - fun visit(element: CgElement): R - - fun visit(element: CgClassFile): R - - fun visit(element: CgClass): R - - fun visit(element: CgClassBody): R - - fun visit(element: CgStaticsRegion): R - - fun visit(element: CgNestedClassesRegion<*>): R - fun visit(element: CgSimpleRegion<*>): R - fun visit(element: CgTestMethodCluster): R - fun visit(element: CgMethodsCluster): R - - fun visit(element: CgAuxiliaryClass): R - fun visit(element: CgUtilMethod): R - - // Methods - fun visit(element: CgMethod): R - fun visit(element: CgTestMethod): R - fun visit(element: CgErrorTestMethod): R - fun visit(element: CgParameterizedTestDataProviderMethod): R - - // Annotations - fun visit(element: CgCommentedAnnotation): R - fun visit(element: CgSingleArgAnnotation): R - fun visit(element: CgMultipleArgsAnnotation): R - fun visit(element: CgNamedAnnotationArgument): R - fun visit(element: CgArrayAnnotationArgument): R - - // Comments - fun visit(element: CgComment): R - fun visit(element: CgSingleLineComment): R - fun visit(element: CgAbstractMultilineComment): R - fun visit(element: CgTripleSlashMultilineComment): R - fun visit(element: CgMultilineComment): R - fun visit(element: CgDocumentationComment): R - - // Comment statements - fun visit(element: CgDocPreTagStatement): R - fun visit(element: CgCustomTagStatement): R - fun visit(element: CgDocCodeStmt): R - fun visit(element: CgDocRegularStmt): R - fun visit(element: CgDocClassLinkStmt): R - fun visit(element: CgDocMethodLinkStmt): R - - // Any block - // IMPORTANT: there is no line separator in the end by default - // because some blocks have it (like loops) but some do not (like try .. catch, if .. else etc) - fun visit(block: List, printNextLine: Boolean = false): R - - // Anonymous function (lambda) - fun visit(element: CgAnonymousFunction): R - - // Return statement - fun visit(element: CgReturnStatement): R - - // Array element access - fun visit(element: CgArrayElementAccess): R - - // Loop conditions - fun visit(element: CgComparison): R - fun visit(element: CgLessThan): R - fun visit(element: CgGreaterThan): R - fun visit(element: CgEqualTo): R - - // Increment and decrement - fun visit(element: CgIncrement): R - fun visit(element: CgDecrement): R - - fun visit(element: CgErrorWrapper): R - - // Try-catch - fun visit(element: CgTryCatch): R - - //Simple block - fun visit(element: CgInnerBlock): R - - // Loops - fun visit(element: CgLoop): R - fun visit(element: CgForLoop): R - fun visit(element: CgWhileLoop): R - fun visit(element: CgDoWhileLoop): R - - // Control statements - fun visit(element: CgBreakStatement): R - fun visit(element: CgContinueStatement): R - - // Variable declaration - fun visit(element: CgDeclaration): R - - // Variable assignment - fun visit(element: CgAssignment): R - - // Expressions - fun visit(element: CgExpression): R - - // Type cast - fun visit(element: CgTypeCast): R - - // isInstance check - fun visit(element: CgIsInstance): R - - // This instance - fun visit(element: CgThisInstance): R - - // Variables - fun visit(element: CgVariable): R - - // Not-null assertion - - fun visit(element: CgNotNullAssertion): R - - // Method parameters - fun visit(element: CgParameterDeclaration): R - - // Primitive and String literals - fun visit(element: CgLiteral): R - - // Non-static runnable like this::toString or (new Object())::toString etc - fun visit(element: CgNonStaticRunnable): R - // Static runnable like Random::nextRandomInt etc - fun visit(element: CgStaticRunnable): R - - // Array allocation - fun visit(element: CgAllocateArray): R - fun visit(element: CgAllocateInitializedArray): R - fun visit(element: CgArrayInitializer): R - - // Spread operator - fun visit(element: CgSpread): R - - // Enum constant - fun visit(element: CgEnumConstantAccess): R - - // Property access - fun visit(element: CgAbstractFieldAccess): R - fun visit(element: CgFieldAccess): R - fun visit(element: CgStaticFieldAccess): R - - // Conditional statement - - fun visit(element: CgIfStatement): R - fun visit(element: CgSwitchCaseLabel): R - fun visit(element: CgSwitchCase): R - - // Binary logical operators - - fun visit(element: CgLogicalAnd): R - fun visit(element: CgLogicalOr): R - - // Acquisition of array length, e.g. args.length - fun visit(element: CgGetLength): R - - // Acquisition of java or kotlin class, e.g. MyClass.class in Java, MyClass::class.java in Kotlin or MyClass::class for Kotlin classes - fun visit(element: CgGetJavaClass): R - fun visit(element: CgGetKotlinClass): R - - // Executable calls - fun visit(element: CgStatementExecutableCall): R - fun visit(element: CgExecutableCall): R - fun visit(element: CgConstructorCall): R - fun visit(element: CgMethodCall): R - - // Throw statement - fun visit(element: CgThrowStatement): R - - // Empty line - fun visit(element: CgEmptyLine): R - - fun visit(element: CgForEachLoop): R -} diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgAbstractRenderer.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgAbstractRenderer.kt similarity index 84% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgAbstractRenderer.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgAbstractRenderer.kt index 4750ff4f49..35a2379954 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgAbstractRenderer.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgAbstractRenderer.kt @@ -1,89 +1,87 @@ -package org.utbot.framework.codegen.model.visitor +package org.utbot.framework.codegen.renderer import org.apache.commons.text.StringEscapeUtils import org.utbot.common.FileUtil import org.utbot.common.WorkaroundReason.LONG_CODE_FRAGMENTS import org.utbot.common.workaround import org.utbot.framework.UtSettings -import org.utbot.framework.codegen.Import -import org.utbot.framework.codegen.RegularImport -import org.utbot.framework.codegen.StaticImport -import org.utbot.framework.codegen.model.UtilClassKind -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.tree.CgClassFile -import org.utbot.framework.codegen.model.tree.CgAbstractFieldAccess -import org.utbot.framework.codegen.model.tree.CgAbstractMultilineComment -import org.utbot.framework.codegen.model.tree.CgArrayElementAccess -import org.utbot.framework.codegen.model.tree.CgAssignment -import org.utbot.framework.codegen.model.tree.CgAuxiliaryClass -import org.utbot.framework.codegen.model.tree.CgBreakStatement -import org.utbot.framework.codegen.model.tree.CgClass -import org.utbot.framework.codegen.model.tree.CgComment -import org.utbot.framework.codegen.model.tree.CgCommentedAnnotation -import org.utbot.framework.codegen.model.tree.CgComparison -import org.utbot.framework.codegen.model.tree.CgContinueStatement -import org.utbot.framework.codegen.model.tree.CgCustomTagStatement -import org.utbot.framework.codegen.model.tree.CgDeclaration -import org.utbot.framework.codegen.model.tree.CgDecrement -import org.utbot.framework.codegen.model.tree.CgDoWhileLoop -import org.utbot.framework.codegen.model.tree.CgDocClassLinkStmt -import org.utbot.framework.codegen.model.tree.CgDocCodeStmt -import org.utbot.framework.codegen.model.tree.CgDocMethodLinkStmt -import org.utbot.framework.codegen.model.tree.CgDocPreTagStatement -import org.utbot.framework.codegen.model.tree.CgDocRegularStmt -import org.utbot.framework.codegen.model.tree.CgDocumentationComment -import org.utbot.framework.codegen.model.tree.CgElement -import org.utbot.framework.codegen.model.tree.CgEmptyLine -import org.utbot.framework.codegen.model.tree.CgEnumConstantAccess -import org.utbot.framework.codegen.model.tree.CgErrorTestMethod -import org.utbot.framework.codegen.model.tree.CgErrorWrapper -import org.utbot.framework.codegen.model.tree.CgExecutableCall -import org.utbot.framework.codegen.model.tree.CgMethodsCluster -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgFieldAccess -import org.utbot.framework.codegen.model.tree.CgForEachLoop -import org.utbot.framework.codegen.model.tree.CgForLoop -import org.utbot.framework.codegen.model.tree.CgGreaterThan -import org.utbot.framework.codegen.model.tree.CgIfStatement -import org.utbot.framework.codegen.model.tree.CgIncrement -import org.utbot.framework.codegen.model.tree.CgInnerBlock -import org.utbot.framework.codegen.model.tree.CgIsInstance -import org.utbot.framework.codegen.model.tree.CgLessThan -import org.utbot.framework.codegen.model.tree.CgLiteral -import org.utbot.framework.codegen.model.tree.CgLogicalAnd -import org.utbot.framework.codegen.model.tree.CgLogicalOr -import org.utbot.framework.codegen.model.tree.CgLoop -import org.utbot.framework.codegen.model.tree.CgMethod -import org.utbot.framework.codegen.model.tree.CgMethodCall -import org.utbot.framework.codegen.model.tree.CgMultilineComment -import org.utbot.framework.codegen.model.tree.CgMultipleArgsAnnotation -import org.utbot.framework.codegen.model.tree.CgNamedAnnotationArgument -import org.utbot.framework.codegen.model.tree.CgNestedClassesRegion -import org.utbot.framework.codegen.model.tree.CgNonStaticRunnable -import org.utbot.framework.codegen.model.tree.CgParameterDeclaration -import org.utbot.framework.codegen.model.tree.CgParameterizedTestDataProviderMethod -import org.utbot.framework.codegen.model.tree.CgRegion -import org.utbot.framework.codegen.model.tree.CgReturnStatement -import org.utbot.framework.codegen.model.tree.CgSimpleRegion -import org.utbot.framework.codegen.model.tree.CgSingleArgAnnotation -import org.utbot.framework.codegen.model.tree.CgSingleLineComment -import org.utbot.framework.codegen.model.tree.CgSpread -import org.utbot.framework.codegen.model.tree.CgStatement -import org.utbot.framework.codegen.model.tree.CgStatementExecutableCall -import org.utbot.framework.codegen.model.tree.CgStaticFieldAccess -import org.utbot.framework.codegen.model.tree.CgStaticRunnable -import org.utbot.framework.codegen.model.tree.CgStaticsRegion -import org.utbot.framework.codegen.model.tree.CgTestMethod -import org.utbot.framework.codegen.model.tree.CgTestMethodCluster -import org.utbot.framework.codegen.model.tree.CgThisInstance -import org.utbot.framework.codegen.model.tree.CgThrowStatement -import org.utbot.framework.codegen.model.tree.CgTripleSlashMultilineComment -import org.utbot.framework.codegen.model.tree.CgTryCatch -import org.utbot.framework.codegen.model.tree.CgUtilMethod -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.tree.CgWhileLoop -import org.utbot.framework.codegen.model.util.CgPrinter -import org.utbot.framework.codegen.model.util.CgPrinterImpl +import org.utbot.framework.codegen.domain.Import +import org.utbot.framework.codegen.domain.RegularImport +import org.utbot.framework.codegen.domain.StaticImport +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.models.CgClassFile +import org.utbot.framework.codegen.domain.models.CgAbstractFieldAccess +import org.utbot.framework.codegen.domain.models.CgAbstractMultilineComment +import org.utbot.framework.codegen.domain.models.CgArrayElementAccess +import org.utbot.framework.codegen.domain.models.CgAssignment +import org.utbot.framework.codegen.domain.models.CgAuxiliaryClass +import org.utbot.framework.codegen.domain.models.CgBreakStatement +import org.utbot.framework.codegen.domain.models.CgClass +import org.utbot.framework.codegen.domain.models.CgComment +import org.utbot.framework.codegen.domain.models.CgCommentedAnnotation +import org.utbot.framework.codegen.domain.models.CgComparison +import org.utbot.framework.codegen.domain.models.CgContinueStatement +import org.utbot.framework.codegen.domain.models.CgCustomTagStatement +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgDecrement +import org.utbot.framework.codegen.domain.models.CgDoWhileLoop +import org.utbot.framework.codegen.domain.models.CgDocClassLinkStmt +import org.utbot.framework.codegen.domain.models.CgDocCodeStmt +import org.utbot.framework.codegen.domain.models.CgDocMethodLinkStmt +import org.utbot.framework.codegen.domain.models.CgDocPreTagStatement +import org.utbot.framework.codegen.domain.models.CgDocRegularStmt +import org.utbot.framework.codegen.domain.models.CgDocumentationComment +import org.utbot.framework.codegen.domain.models.CgElement +import org.utbot.framework.codegen.domain.models.CgEmptyLine +import org.utbot.framework.codegen.domain.models.CgEnumConstantAccess +import org.utbot.framework.codegen.domain.models.CgErrorTestMethod +import org.utbot.framework.codegen.domain.models.CgErrorWrapper +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgMethodsCluster +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgFieldAccess +import org.utbot.framework.codegen.domain.models.CgForEachLoop +import org.utbot.framework.codegen.domain.models.CgForLoop +import org.utbot.framework.codegen.domain.models.CgGreaterThan +import org.utbot.framework.codegen.domain.models.CgIfStatement +import org.utbot.framework.codegen.domain.models.CgIncrement +import org.utbot.framework.codegen.domain.models.CgInnerBlock +import org.utbot.framework.codegen.domain.models.CgIsInstance +import org.utbot.framework.codegen.domain.models.CgLessThan +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgLogicalAnd +import org.utbot.framework.codegen.domain.models.CgLogicalOr +import org.utbot.framework.codegen.domain.models.CgLoop +import org.utbot.framework.codegen.domain.models.CgMethod +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgMultilineComment +import org.utbot.framework.codegen.domain.models.CgMultipleArgsAnnotation +import org.utbot.framework.codegen.domain.models.CgNamedAnnotationArgument +import org.utbot.framework.codegen.domain.models.CgNestedClassesRegion +import org.utbot.framework.codegen.domain.models.CgNonStaticRunnable +import org.utbot.framework.codegen.domain.models.CgParameterDeclaration +import org.utbot.framework.codegen.domain.models.CgParameterizedTestDataProviderMethod +import org.utbot.framework.codegen.domain.models.CgRegion +import org.utbot.framework.codegen.domain.models.CgReturnStatement +import org.utbot.framework.codegen.domain.models.CgSimpleRegion +import org.utbot.framework.codegen.domain.models.CgSingleArgAnnotation +import org.utbot.framework.codegen.domain.models.CgSingleLineComment +import org.utbot.framework.codegen.domain.models.CgSpread +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgStatementExecutableCall +import org.utbot.framework.codegen.domain.models.CgStaticFieldAccess +import org.utbot.framework.codegen.domain.models.CgStaticRunnable +import org.utbot.framework.codegen.domain.models.CgStaticsRegion +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgTestMethodCluster +import org.utbot.framework.codegen.domain.models.CgThisInstance +import org.utbot.framework.codegen.domain.models.CgThrowStatement +import org.utbot.framework.codegen.domain.models.CgTripleSlashMultilineComment +import org.utbot.framework.codegen.domain.models.CgTryCatch +import org.utbot.framework.codegen.domain.models.CgUtilMethod +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.domain.models.CgWhileLoop +import org.utbot.framework.codegen.tree.ututils.UtilClassKind import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.MethodId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgJavaRenderer.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgJavaRenderer.kt similarity index 83% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgJavaRenderer.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgJavaRenderer.kt index 7c1861377c..6e1ecefb7b 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgJavaRenderer.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgJavaRenderer.kt @@ -1,43 +1,41 @@ -package org.utbot.framework.codegen.model.visitor +package org.utbot.framework.codegen.renderer import org.apache.commons.text.StringEscapeUtils -import org.utbot.framework.codegen.RegularImport -import org.utbot.framework.codegen.StaticImport -import org.utbot.framework.codegen.model.tree.CgAllocateArray -import org.utbot.framework.codegen.model.tree.CgAllocateInitializedArray -import org.utbot.framework.codegen.model.tree.CgAnonymousFunction -import org.utbot.framework.codegen.model.tree.CgArrayAnnotationArgument -import org.utbot.framework.codegen.model.tree.CgArrayInitializer -import org.utbot.framework.codegen.model.tree.CgBreakStatement -import org.utbot.framework.codegen.model.tree.CgConstructorCall -import org.utbot.framework.codegen.model.tree.CgDeclaration -import org.utbot.framework.codegen.model.tree.CgEqualTo -import org.utbot.framework.codegen.model.tree.CgErrorTestMethod -import org.utbot.framework.codegen.model.tree.CgErrorWrapper -import org.utbot.framework.codegen.model.tree.CgExecutableCall -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgForLoop -import org.utbot.framework.codegen.model.tree.CgGetJavaClass -import org.utbot.framework.codegen.model.tree.CgGetKotlinClass -import org.utbot.framework.codegen.model.tree.CgGetLength -import org.utbot.framework.codegen.model.tree.CgInnerBlock -import org.utbot.framework.codegen.model.tree.CgMethod -import org.utbot.framework.codegen.model.tree.CgNotNullAssertion -import org.utbot.framework.codegen.model.tree.CgParameterDeclaration -import org.utbot.framework.codegen.model.tree.CgParameterizedTestDataProviderMethod -import org.utbot.framework.codegen.model.tree.CgReturnStatement -import org.utbot.framework.codegen.model.tree.CgStatement -import org.utbot.framework.codegen.model.tree.CgStatementExecutableCall -import org.utbot.framework.codegen.model.tree.CgSwitchCase -import org.utbot.framework.codegen.model.tree.CgSwitchCaseLabel -import org.utbot.framework.codegen.model.tree.CgClass -import org.utbot.framework.codegen.model.tree.CgClassBody -import org.utbot.framework.codegen.model.tree.CgTestMethod -import org.utbot.framework.codegen.model.tree.CgTypeCast -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.util.CgPrinter -import org.utbot.framework.codegen.model.util.CgPrinterImpl -import org.utbot.framework.codegen.model.util.nullLiteral +import org.utbot.framework.codegen.domain.RegularImport +import org.utbot.framework.codegen.domain.StaticImport +import org.utbot.framework.codegen.domain.models.CgAllocateArray +import org.utbot.framework.codegen.domain.models.CgAllocateInitializedArray +import org.utbot.framework.codegen.domain.models.CgAnonymousFunction +import org.utbot.framework.codegen.domain.models.CgArrayAnnotationArgument +import org.utbot.framework.codegen.domain.models.CgArrayInitializer +import org.utbot.framework.codegen.domain.models.CgBreakStatement +import org.utbot.framework.codegen.domain.models.CgConstructorCall +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgEqualTo +import org.utbot.framework.codegen.domain.models.CgErrorTestMethod +import org.utbot.framework.codegen.domain.models.CgErrorWrapper +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgForLoop +import org.utbot.framework.codegen.domain.models.CgGetJavaClass +import org.utbot.framework.codegen.domain.models.CgGetKotlinClass +import org.utbot.framework.codegen.domain.models.CgGetLength +import org.utbot.framework.codegen.domain.models.CgInnerBlock +import org.utbot.framework.codegen.domain.models.CgMethod +import org.utbot.framework.codegen.domain.models.CgNotNullAssertion +import org.utbot.framework.codegen.domain.models.CgParameterDeclaration +import org.utbot.framework.codegen.domain.models.CgParameterizedTestDataProviderMethod +import org.utbot.framework.codegen.domain.models.CgReturnStatement +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgStatementExecutableCall +import org.utbot.framework.codegen.domain.models.CgSwitchCase +import org.utbot.framework.codegen.domain.models.CgSwitchCaseLabel +import org.utbot.framework.codegen.domain.models.CgClass +import org.utbot.framework.codegen.domain.models.CgClassBody +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgTypeCast +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.util.nullLiteral import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.TypeParameters import org.utbot.framework.plugin.api.util.isFinal diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgKotlinRenderer.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt similarity index 89% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgKotlinRenderer.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt index 4f9790ef9c..229c33d697 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgKotlinRenderer.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgKotlinRenderer.kt @@ -1,50 +1,47 @@ -package org.utbot.framework.codegen.model.visitor +package org.utbot.framework.codegen.renderer -import java.util.Locale import org.apache.commons.text.StringEscapeUtils import org.utbot.common.WorkaroundReason import org.utbot.common.workaround -import org.utbot.framework.codegen.RegularImport -import org.utbot.framework.codegen.StaticImport -import org.utbot.framework.codegen.isLanguageKeyword -import org.utbot.framework.codegen.model.tree.CgAllocateArray -import org.utbot.framework.codegen.model.tree.CgAllocateInitializedArray -import org.utbot.framework.codegen.model.tree.CgAnonymousFunction -import org.utbot.framework.codegen.model.tree.CgArrayAnnotationArgument -import org.utbot.framework.codegen.model.tree.CgArrayElementAccess -import org.utbot.framework.codegen.model.tree.CgArrayInitializer -import org.utbot.framework.codegen.model.tree.CgAuxiliaryClass -import org.utbot.framework.codegen.model.tree.CgComparison -import org.utbot.framework.codegen.model.tree.CgConstructorCall -import org.utbot.framework.codegen.model.tree.CgDeclaration -import org.utbot.framework.codegen.model.tree.CgEqualTo -import org.utbot.framework.codegen.model.tree.CgErrorTestMethod -import org.utbot.framework.codegen.model.tree.CgErrorWrapper -import org.utbot.framework.codegen.model.tree.CgExecutableCall -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgFieldAccess -import org.utbot.framework.codegen.model.tree.CgForLoop -import org.utbot.framework.codegen.model.tree.CgGetJavaClass -import org.utbot.framework.codegen.model.tree.CgGetKotlinClass -import org.utbot.framework.codegen.model.tree.CgGetLength -import org.utbot.framework.codegen.model.tree.CgInnerBlock -import org.utbot.framework.codegen.model.tree.CgMethod -import org.utbot.framework.codegen.model.tree.CgNotNullAssertion -import org.utbot.framework.codegen.model.tree.CgParameterDeclaration -import org.utbot.framework.codegen.model.tree.CgParameterizedTestDataProviderMethod -import org.utbot.framework.codegen.model.tree.CgSimpleRegion -import org.utbot.framework.codegen.model.tree.CgSpread -import org.utbot.framework.codegen.model.tree.CgStaticsRegion -import org.utbot.framework.codegen.model.tree.CgSwitchCase -import org.utbot.framework.codegen.model.tree.CgSwitchCaseLabel -import org.utbot.framework.codegen.model.tree.CgClass -import org.utbot.framework.codegen.model.tree.CgClassBody -import org.utbot.framework.codegen.model.tree.CgTestMethod -import org.utbot.framework.codegen.model.tree.CgTypeCast -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.util.CgPrinter -import org.utbot.framework.codegen.model.util.CgPrinterImpl -import org.utbot.framework.codegen.model.util.nullLiteral +import org.utbot.framework.codegen.domain.RegularImport +import org.utbot.framework.codegen.domain.StaticImport +import org.utbot.framework.codegen.services.language.isLanguageKeyword +import org.utbot.framework.codegen.domain.models.CgAllocateArray +import org.utbot.framework.codegen.domain.models.CgAllocateInitializedArray +import org.utbot.framework.codegen.domain.models.CgAnonymousFunction +import org.utbot.framework.codegen.domain.models.CgArrayAnnotationArgument +import org.utbot.framework.codegen.domain.models.CgArrayElementAccess +import org.utbot.framework.codegen.domain.models.CgArrayInitializer +import org.utbot.framework.codegen.domain.models.CgAuxiliaryClass +import org.utbot.framework.codegen.domain.models.CgComparison +import org.utbot.framework.codegen.domain.models.CgConstructorCall +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgEqualTo +import org.utbot.framework.codegen.domain.models.CgErrorTestMethod +import org.utbot.framework.codegen.domain.models.CgErrorWrapper +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgFieldAccess +import org.utbot.framework.codegen.domain.models.CgForLoop +import org.utbot.framework.codegen.domain.models.CgGetJavaClass +import org.utbot.framework.codegen.domain.models.CgGetKotlinClass +import org.utbot.framework.codegen.domain.models.CgGetLength +import org.utbot.framework.codegen.domain.models.CgInnerBlock +import org.utbot.framework.codegen.domain.models.CgMethod +import org.utbot.framework.codegen.domain.models.CgNotNullAssertion +import org.utbot.framework.codegen.domain.models.CgParameterDeclaration +import org.utbot.framework.codegen.domain.models.CgParameterizedTestDataProviderMethod +import org.utbot.framework.codegen.domain.models.CgSimpleRegion +import org.utbot.framework.codegen.domain.models.CgSpread +import org.utbot.framework.codegen.domain.models.CgStaticsRegion +import org.utbot.framework.codegen.domain.models.CgSwitchCase +import org.utbot.framework.codegen.domain.models.CgSwitchCaseLabel +import org.utbot.framework.codegen.domain.models.CgClass +import org.utbot.framework.codegen.domain.models.CgClassBody +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgTypeCast +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.util.nullLiteral import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.TypeParameters diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/CgPrinter.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgPrinter.kt similarity index 93% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/CgPrinter.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgPrinter.kt index 4577d51a2f..6d6062d502 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/CgPrinter.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgPrinter.kt @@ -1,4 +1,4 @@ -package org.utbot.framework.codegen.model.util +package org.utbot.framework.codegen.renderer interface CgPrinter { fun print(text: String) @@ -51,10 +51,6 @@ class CgPrinterImpl( atLineStart = true } - fun printLine() { - appendLine() - } - private fun printIndent() { append(indent) } diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgRendererContext.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgRendererContext.kt similarity index 79% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgRendererContext.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgRendererContext.kt index 0fe634db2d..0a4a82d0a1 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/CgRendererContext.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgRendererContext.kt @@ -1,14 +1,12 @@ -package org.utbot.framework.codegen.model.visitor +package org.utbot.framework.codegen.renderer -import org.utbot.framework.codegen.model.UtilClassKind -import org.utbot.framework.codegen.model.UtilClassKind.Companion.utilsPackageFullName -import org.utbot.framework.codegen.model.constructor.builtin.UtilMethodProvider -import org.utbot.framework.codegen.model.constructor.builtin.selectUtilClassId -import org.utbot.framework.codegen.model.constructor.builtin.utJavaUtilsClassId -import org.utbot.framework.codegen.model.constructor.builtin.utKotlinUtilsClassId -import org.utbot.framework.codegen.model.constructor.context.CgContext +import org.utbot.framework.codegen.domain.builtin.UtilMethodProvider +import org.utbot.framework.codegen.domain.builtin.selectUtilClassId +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.tree.ututils.UtilClassKind +import org.utbot.framework.codegen.tree.ututils.UtilClassKind.Companion.utilsPackageFullName import org.utbot.framework.plugin.api.ClassId -import org.utbot.framework.plugin.api.CgLanguageAssistant +import org.utbot.framework.codegen.services.language.CgLanguageAssistant import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.MethodId import org.utbot.framework.plugin.api.MockFramework diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgVisitor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgVisitor.kt new file mode 100644 index 0000000000..a78f8f330b --- /dev/null +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/CgVisitor.kt @@ -0,0 +1,263 @@ +package org.utbot.framework.codegen.renderer + +import org.utbot.framework.codegen.domain.models.CgClassFile +import org.utbot.framework.codegen.domain.models.CgAbstractFieldAccess +import org.utbot.framework.codegen.domain.models.CgAbstractMultilineComment +import org.utbot.framework.codegen.domain.models.CgAllocateArray +import org.utbot.framework.codegen.domain.models.CgAllocateInitializedArray +import org.utbot.framework.codegen.domain.models.CgAnonymousFunction +import org.utbot.framework.codegen.domain.models.CgArrayAnnotationArgument +import org.utbot.framework.codegen.domain.models.CgArrayElementAccess +import org.utbot.framework.codegen.domain.models.CgArrayInitializer +import org.utbot.framework.codegen.domain.models.CgAssignment +import org.utbot.framework.codegen.domain.models.CgAuxiliaryClass +import org.utbot.framework.codegen.domain.models.CgBreakStatement +import org.utbot.framework.codegen.domain.models.CgComment +import org.utbot.framework.codegen.domain.models.CgCommentedAnnotation +import org.utbot.framework.codegen.domain.models.CgComparison +import org.utbot.framework.codegen.domain.models.CgConstructorCall +import org.utbot.framework.codegen.domain.models.CgContinueStatement +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgDecrement +import org.utbot.framework.codegen.domain.models.CgDoWhileLoop +import org.utbot.framework.codegen.domain.models.CgDocClassLinkStmt +import org.utbot.framework.codegen.domain.models.CgDocCodeStmt +import org.utbot.framework.codegen.domain.models.CgDocMethodLinkStmt +import org.utbot.framework.codegen.domain.models.CgDocPreTagStatement +import org.utbot.framework.codegen.domain.models.CgCustomTagStatement +import org.utbot.framework.codegen.domain.models.CgDocRegularStmt +import org.utbot.framework.codegen.domain.models.CgDocumentationComment +import org.utbot.framework.codegen.domain.models.CgElement +import org.utbot.framework.codegen.domain.models.CgEmptyLine +import org.utbot.framework.codegen.domain.models.CgEnumConstantAccess +import org.utbot.framework.codegen.domain.models.CgEqualTo +import org.utbot.framework.codegen.domain.models.CgErrorTestMethod +import org.utbot.framework.codegen.domain.models.CgErrorWrapper +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgMethodsCluster +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgFieldAccess +import org.utbot.framework.codegen.domain.models.CgForEachLoop +import org.utbot.framework.codegen.domain.models.CgForLoop +import org.utbot.framework.codegen.domain.models.CgGetJavaClass +import org.utbot.framework.codegen.domain.models.CgGetKotlinClass +import org.utbot.framework.codegen.domain.models.CgGetLength +import org.utbot.framework.codegen.domain.models.CgGreaterThan +import org.utbot.framework.codegen.domain.models.CgIfStatement +import org.utbot.framework.codegen.domain.models.CgIncrement +import org.utbot.framework.codegen.domain.models.CgInnerBlock +import org.utbot.framework.codegen.domain.models.CgIsInstance +import org.utbot.framework.codegen.domain.models.CgLessThan +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgLogicalAnd +import org.utbot.framework.codegen.domain.models.CgLogicalOr +import org.utbot.framework.codegen.domain.models.CgLoop +import org.utbot.framework.codegen.domain.models.CgMethod +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgMultilineComment +import org.utbot.framework.codegen.domain.models.CgMultipleArgsAnnotation +import org.utbot.framework.codegen.domain.models.CgNamedAnnotationArgument +import org.utbot.framework.codegen.domain.models.CgNonStaticRunnable +import org.utbot.framework.codegen.domain.models.CgNotNullAssertion +import org.utbot.framework.codegen.domain.models.CgParameterDeclaration +import org.utbot.framework.codegen.domain.models.CgParameterizedTestDataProviderMethod +import org.utbot.framework.codegen.domain.models.CgReturnStatement +import org.utbot.framework.codegen.domain.models.CgSimpleRegion +import org.utbot.framework.codegen.domain.models.CgSingleArgAnnotation +import org.utbot.framework.codegen.domain.models.CgSingleLineComment +import org.utbot.framework.codegen.domain.models.CgSpread +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgStatementExecutableCall +import org.utbot.framework.codegen.domain.models.CgStaticFieldAccess +import org.utbot.framework.codegen.domain.models.CgStaticRunnable +import org.utbot.framework.codegen.domain.models.CgStaticsRegion +import org.utbot.framework.codegen.domain.models.CgSwitchCase +import org.utbot.framework.codegen.domain.models.CgSwitchCaseLabel +import org.utbot.framework.codegen.domain.models.CgClass +import org.utbot.framework.codegen.domain.models.CgClassBody +import org.utbot.framework.codegen.domain.models.CgNestedClassesRegion +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgTestMethodCluster +import org.utbot.framework.codegen.domain.models.CgThisInstance +import org.utbot.framework.codegen.domain.models.CgThrowStatement +import org.utbot.framework.codegen.domain.models.CgTripleSlashMultilineComment +import org.utbot.framework.codegen.domain.models.CgTryCatch +import org.utbot.framework.codegen.domain.models.CgTypeCast +import org.utbot.framework.codegen.domain.models.CgUtilMethod +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.domain.models.CgWhileLoop + +interface CgVisitor { + fun visit(element: CgElement): R + + fun visit(element: CgClassFile): R + + fun visit(element: CgClass): R + + fun visit(element: CgClassBody): R + + fun visit(element: CgStaticsRegion): R + + fun visit(element: CgNestedClassesRegion<*>): R + fun visit(element: CgSimpleRegion<*>): R + fun visit(element: CgTestMethodCluster): R + fun visit(element: CgMethodsCluster): R + + fun visit(element: CgAuxiliaryClass): R + fun visit(element: CgUtilMethod): R + + // Methods + fun visit(element: CgMethod): R + fun visit(element: CgTestMethod): R + fun visit(element: CgErrorTestMethod): R + fun visit(element: CgParameterizedTestDataProviderMethod): R + + // Annotations + fun visit(element: CgCommentedAnnotation): R + fun visit(element: CgSingleArgAnnotation): R + fun visit(element: CgMultipleArgsAnnotation): R + fun visit(element: CgNamedAnnotationArgument): R + fun visit(element: CgArrayAnnotationArgument): R + + // Comments + fun visit(element: CgComment): R + fun visit(element: CgSingleLineComment): R + fun visit(element: CgAbstractMultilineComment): R + fun visit(element: CgTripleSlashMultilineComment): R + fun visit(element: CgMultilineComment): R + fun visit(element: CgDocumentationComment): R + + // Comment statements + fun visit(element: CgDocPreTagStatement): R + fun visit(element: CgCustomTagStatement): R + fun visit(element: CgDocCodeStmt): R + fun visit(element: CgDocRegularStmt): R + fun visit(element: CgDocClassLinkStmt): R + fun visit(element: CgDocMethodLinkStmt): R + + // Any block + // IMPORTANT: there is no line separator in the end by default + // because some blocks have it (like loops) but some do not (like try .. catch, if .. else etc) + fun visit(block: List, printNextLine: Boolean = false): R + + // Anonymous function (lambda) + fun visit(element: CgAnonymousFunction): R + + // Return statement + fun visit(element: CgReturnStatement): R + + // Array element access + fun visit(element: CgArrayElementAccess): R + + // Loop conditions + fun visit(element: CgComparison): R + fun visit(element: CgLessThan): R + fun visit(element: CgGreaterThan): R + fun visit(element: CgEqualTo): R + + // Increment and decrement + fun visit(element: CgIncrement): R + fun visit(element: CgDecrement): R + + fun visit(element: CgErrorWrapper): R + + // Try-catch + fun visit(element: CgTryCatch): R + + //Simple block + fun visit(element: CgInnerBlock): R + + // Loops + fun visit(element: CgLoop): R + fun visit(element: CgForLoop): R + fun visit(element: CgWhileLoop): R + fun visit(element: CgDoWhileLoop): R + + // Control statements + fun visit(element: CgBreakStatement): R + fun visit(element: CgContinueStatement): R + + // Variable declaration + fun visit(element: CgDeclaration): R + + // Variable assignment + fun visit(element: CgAssignment): R + + // Expressions + fun visit(element: CgExpression): R + + // Type cast + fun visit(element: CgTypeCast): R + + // isInstance check + fun visit(element: CgIsInstance): R + + // This instance + fun visit(element: CgThisInstance): R + + // Variables + fun visit(element: CgVariable): R + + // Not-null assertion + + fun visit(element: CgNotNullAssertion): R + + // Method parameters + fun visit(element: CgParameterDeclaration): R + + // Primitive and String literals + fun visit(element: CgLiteral): R + + // Non-static runnable like this::toString or (new Object())::toString etc + fun visit(element: CgNonStaticRunnable): R + // Static runnable like Random::nextRandomInt etc + fun visit(element: CgStaticRunnable): R + + // Array allocation + fun visit(element: CgAllocateArray): R + fun visit(element: CgAllocateInitializedArray): R + fun visit(element: CgArrayInitializer): R + + // Spread operator + fun visit(element: CgSpread): R + + // Enum constant + fun visit(element: CgEnumConstantAccess): R + + // Property access + fun visit(element: CgAbstractFieldAccess): R + fun visit(element: CgFieldAccess): R + fun visit(element: CgStaticFieldAccess): R + + // Conditional statement + + fun visit(element: CgIfStatement): R + fun visit(element: CgSwitchCaseLabel): R + fun visit(element: CgSwitchCase): R + + // Binary logical operators + + fun visit(element: CgLogicalAnd): R + fun visit(element: CgLogicalOr): R + + // Acquisition of array length, e.g. args.length + fun visit(element: CgGetLength): R + + // Acquisition of java or kotlin class, e.g. MyClass.class in Java, MyClass::class.java in Kotlin or MyClass::class for Kotlin classes + fun visit(element: CgGetJavaClass): R + fun visit(element: CgGetKotlinClass): R + + // Executable calls + fun visit(element: CgStatementExecutableCall): R + fun visit(element: CgExecutableCall): R + fun visit(element: CgConstructorCall): R + fun visit(element: CgMethodCall): R + + // Throw statement + fun visit(element: CgThrowStatement): R + + // Empty line + fun visit(element: CgEmptyLine): R + + fun visit(element: CgForEachLoop): R +} diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/UtilMethods.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/UtilMethodRenderer.kt similarity index 99% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/UtilMethods.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/UtilMethodRenderer.kt index 85ba4dcbe5..29accf1eed 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/visitor/UtilMethods.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/renderer/UtilMethodRenderer.kt @@ -1,10 +1,10 @@ -package org.utbot.framework.codegen.model.visitor +package org.utbot.framework.codegen.renderer -import org.utbot.framework.codegen.StaticImport -import org.utbot.framework.codegen.model.constructor.builtin.TestClassUtilMethodProvider -import org.utbot.framework.codegen.model.constructor.builtin.UtilMethodProvider -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.util.importIfNeeded +import org.utbot.framework.codegen.domain.StaticImport +import org.utbot.framework.codegen.domain.builtin.TestClassUtilMethodProvider +import org.utbot.framework.codegen.domain.builtin.UtilMethodProvider +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.tree.importIfNeeded import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.MethodId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestsGenerationReport.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/reports/TestsGenerationReport.kt similarity index 85% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestsGenerationReport.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/reports/TestsGenerationReport.kt index 842aa99976..bf6f3891dd 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestsGenerationReport.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/reports/TestsGenerationReport.kt @@ -1,9 +1,9 @@ -package org.utbot.framework.codegen.model.constructor.tree +package org.utbot.framework.codegen.reports import org.utbot.common.appendHtmlLine -import org.utbot.framework.codegen.model.constructor.CgMethodTestSet -import org.utbot.framework.codegen.model.tree.CgTestMethod -import org.utbot.framework.codegen.model.tree.CgTestMethodType.* +import org.utbot.framework.codegen.domain.models.CgMethodTestSet +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgTestMethodType import org.utbot.framework.plugin.api.ExecutableId import org.utbot.framework.plugin.api.util.kClass import kotlin.reflect.KClass @@ -57,11 +57,11 @@ data class TestsGenerationReport( testMethods.forEach { when (it.type) { - SUCCESSFUL, PASSED_EXCEPTION -> updateExecutions(it, successfulExecutions) - FAILING -> updateExecutions(it, failedExecutions) - TIMEOUT -> updateExecutions(it, timeoutExecutions) - CRASH -> updateExecutions(it, crashExecutions) - PARAMETRIZED -> { + CgTestMethodType.SUCCESSFUL, CgTestMethodType.PASSED_EXCEPTION -> updateExecutions(it, successfulExecutions) + CgTestMethodType.FAILING -> updateExecutions(it, failedExecutions) + CgTestMethodType.TIMEOUT -> updateExecutions(it, timeoutExecutions) + CgTestMethodType.CRASH -> updateExecutions(it, crashExecutions) + CgTestMethodType.PARAMETRIZED -> { // Parametrized tests are not supported in the tests report yet // TODO JIRA:1507 } diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/name/CgNameGenerator.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/CgNameGenerator.kt similarity index 95% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/name/CgNameGenerator.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/CgNameGenerator.kt index 107b664386..09608ccc98 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/name/CgNameGenerator.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/CgNameGenerator.kt @@ -1,9 +1,9 @@ -package org.utbot.framework.codegen.model.constructor.name +package org.utbot.framework.codegen.services -import org.utbot.framework.codegen.isLanguageKeyword -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.util.infiniteInts +import org.utbot.framework.codegen.services.language.isLanguageKeyword +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.tree.infiniteInts import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.ConstructorId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgCallableAccessManager.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/access/CgCallableAccessManager.kt similarity index 91% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgCallableAccessManager.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/access/CgCallableAccessManager.kt index 65b3d7b333..898cb0037b 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgCallableAccessManager.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/access/CgCallableAccessManager.kt @@ -1,45 +1,42 @@ -package org.utbot.framework.codegen.model.constructor.tree +package org.utbot.framework.codegen.services.access import kotlinx.collections.immutable.PersistentList -import org.utbot.framework.codegen.Junit5 -import org.utbot.framework.codegen.TestNg -import org.utbot.framework.codegen.model.constructor.builtin.any -import org.utbot.framework.codegen.model.constructor.builtin.anyOfClass -import org.utbot.framework.codegen.model.constructor.builtin.getMethodId -import org.utbot.framework.codegen.model.constructor.builtin.getTargetException -import org.utbot.framework.codegen.model.constructor.builtin.invoke -import org.utbot.framework.codegen.model.constructor.builtin.newInstance -import org.utbot.framework.codegen.model.constructor.builtin.setAccessible -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.tree.CgCallableAccessManagerImpl.FieldAccessorSuitability.ReflectionOnly -import org.utbot.framework.codegen.model.constructor.tree.CgCallableAccessManagerImpl.FieldAccessorSuitability.RequiresTypeCast -import org.utbot.framework.codegen.model.constructor.tree.CgCallableAccessManagerImpl.FieldAccessorSuitability.Suitable -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getVariableConstructorBy -import org.utbot.framework.codegen.model.constructor.util.arrayInitializer -import org.utbot.framework.codegen.model.constructor.util.getAmbiguousOverloadsOf -import org.utbot.framework.codegen.model.constructor.util.importIfNeeded -import org.utbot.framework.codegen.model.constructor.util.isUtil -import org.utbot.framework.codegen.model.constructor.util.typeCast -import org.utbot.framework.codegen.model.tree.CgAllocateArray -import org.utbot.framework.codegen.model.tree.CgAssignment -import org.utbot.framework.codegen.model.tree.CgConstructorCall -import org.utbot.framework.codegen.model.tree.CgExecutableCall -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgFieldAccess -import org.utbot.framework.codegen.model.tree.CgMethodCall -import org.utbot.framework.codegen.model.tree.CgSpread -import org.utbot.framework.codegen.model.tree.CgStatement -import org.utbot.framework.codegen.model.tree.CgStaticFieldAccess -import org.utbot.framework.codegen.model.tree.CgThisInstance -import org.utbot.framework.codegen.model.tree.CgValue -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.util.at -import org.utbot.framework.codegen.model.util.canBeReadFrom -import org.utbot.framework.codegen.model.util.isAccessibleFrom -import org.utbot.framework.codegen.model.util.nullLiteral -import org.utbot.framework.codegen.model.util.resolve +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.TestNg +import org.utbot.framework.codegen.domain.builtin.any +import org.utbot.framework.codegen.domain.builtin.anyOfClass +import org.utbot.framework.codegen.domain.builtin.getMethodId +import org.utbot.framework.codegen.domain.builtin.getTargetException +import org.utbot.framework.codegen.domain.builtin.invoke +import org.utbot.framework.codegen.domain.builtin.newInstance +import org.utbot.framework.codegen.domain.builtin.setAccessible +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgAllocateArray +import org.utbot.framework.codegen.domain.models.CgAssignment +import org.utbot.framework.codegen.domain.models.CgConstructorCall +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgFieldAccess +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgSpread +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgStaticFieldAccess +import org.utbot.framework.codegen.domain.models.CgThisInstance +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.services.access.CgCallableAccessManagerImpl.FieldAccessorSuitability.* +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getVariableConstructorBy +import org.utbot.framework.codegen.tree.getAmbiguousOverloadsOf +import org.utbot.framework.codegen.tree.importIfNeeded +import org.utbot.framework.codegen.tree.isUtil +import org.utbot.framework.codegen.tree.typeCast +import org.utbot.framework.codegen.util.at +import org.utbot.framework.codegen.util.canBeReadFrom +import org.utbot.framework.codegen.util.isAccessibleFrom +import org.utbot.framework.codegen.util.nullLiteral +import org.utbot.framework.codegen.util.resolve import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.BuiltinConstructorId import org.utbot.framework.plugin.api.BuiltinMethodId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgFieldStateManager.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/access/CgFieldStateManager.kt similarity index 86% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgFieldStateManager.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/access/CgFieldStateManager.kt index 447fcd7356..248745fe6b 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgFieldStateManager.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/access/CgFieldStateManager.kt @@ -1,26 +1,26 @@ -package org.utbot.framework.codegen.model.constructor.tree +package org.utbot.framework.codegen.services.access -import org.utbot.framework.codegen.model.constructor.builtin.forName -import org.utbot.framework.codegen.model.constructor.builtin.getArrayElement -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy -import org.utbot.framework.codegen.model.constructor.util.CgFieldState -import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor -import org.utbot.framework.codegen.model.constructor.util.FieldStateCache -import org.utbot.framework.codegen.model.constructor.util.classCgClassId -import org.utbot.framework.codegen.model.constructor.util.getFieldVariableName -import org.utbot.framework.codegen.model.constructor.util.getStaticFieldVariableName -import org.utbot.framework.codegen.model.constructor.util.needExpectedDeclaration -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgGetJavaClass -import org.utbot.framework.codegen.model.tree.CgValue -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.util.at -import org.utbot.framework.codegen.model.util.isAccessibleFrom -import org.utbot.framework.codegen.model.util.canBeReadFrom -import org.utbot.framework.codegen.model.util.stringLiteral +import org.utbot.framework.codegen.domain.builtin.forName +import org.utbot.framework.codegen.domain.builtin.getArrayElement +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgGetJavaClass +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.tree.CgFieldState +import org.utbot.framework.codegen.tree.CgStatementConstructor +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy +import org.utbot.framework.codegen.tree.FieldStateCache +import org.utbot.framework.codegen.tree.classCgClassId +import org.utbot.framework.codegen.tree.getFieldVariableName +import org.utbot.framework.codegen.tree.getStaticFieldVariableName +import org.utbot.framework.codegen.tree.needExpectedDeclaration +import org.utbot.framework.codegen.util.at +import org.utbot.framework.codegen.util.isAccessibleFrom +import org.utbot.framework.codegen.util.canBeReadFrom +import org.utbot.framework.codegen.util.stringLiteral import org.utbot.framework.fields.ArrayElementAccess import org.utbot.framework.fields.FieldAccess import org.utbot.framework.fields.FieldPath @@ -40,7 +40,7 @@ interface CgFieldStateManager { internal class CgFieldStateManagerImpl(val context: CgContext) : CgContextOwner by context, - CgFieldStateManager, + CgFieldStateManager, CgCallableAccessManager by getCallableAccessManagerBy(context), CgStatementConstructor by getStatementConstructorBy(context) { diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/MockFrameworkManager.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/framework/MockFrameworkManager.kt similarity index 81% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/MockFrameworkManager.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/framework/MockFrameworkManager.kt index 981f2e024c..87254a9829 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/MockFrameworkManager.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/framework/MockFrameworkManager.kt @@ -1,48 +1,50 @@ -package org.utbot.framework.codegen.model.constructor.tree - -import org.utbot.framework.codegen.MockitoStaticMocking -import org.utbot.framework.codegen.NoStaticMocking -import org.utbot.framework.codegen.model.constructor.builtin.any -import org.utbot.framework.codegen.model.constructor.builtin.anyBoolean -import org.utbot.framework.codegen.model.constructor.builtin.anyByte -import org.utbot.framework.codegen.model.constructor.builtin.anyChar -import org.utbot.framework.codegen.model.constructor.builtin.anyDouble -import org.utbot.framework.codegen.model.constructor.builtin.anyFloat -import org.utbot.framework.codegen.model.constructor.builtin.anyInt -import org.utbot.framework.codegen.model.constructor.builtin.anyLong -import org.utbot.framework.codegen.model.constructor.builtin.anyOfClass -import org.utbot.framework.codegen.model.constructor.builtin.anyShort -import org.utbot.framework.codegen.model.constructor.builtin.argumentMatchersClassId -import org.utbot.framework.codegen.model.constructor.builtin.mockMethodId -import org.utbot.framework.codegen.model.constructor.builtin.mockedConstructionContextClassId -import org.utbot.framework.codegen.model.constructor.builtin.mockitoClassId -import org.utbot.framework.codegen.model.constructor.builtin.thenReturnMethodId -import org.utbot.framework.codegen.model.constructor.builtin.whenMethodId -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getVariableConstructorBy -import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor -import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructorImpl -import org.utbot.framework.codegen.model.constructor.util.hasAmbiguousOverloadsOf -import org.utbot.framework.codegen.model.tree.CgAnonymousFunction -import org.utbot.framework.codegen.model.tree.CgAssignment -import org.utbot.framework.codegen.model.tree.CgClassId -import org.utbot.framework.codegen.model.tree.CgConstructorCall -import org.utbot.framework.codegen.model.tree.CgDeclaration -import org.utbot.framework.codegen.model.tree.CgExecutableCall -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgLiteral -import org.utbot.framework.codegen.model.tree.CgMethodCall -import org.utbot.framework.codegen.model.tree.CgParameterDeclaration -import org.utbot.framework.codegen.model.tree.CgRunnable -import org.utbot.framework.codegen.model.tree.CgStatement -import org.utbot.framework.codegen.model.tree.CgStatementExecutableCall -import org.utbot.framework.codegen.model.tree.CgStaticRunnable -import org.utbot.framework.codegen.model.tree.CgSwitchCase -import org.utbot.framework.codegen.model.tree.CgSwitchCaseLabel -import org.utbot.framework.codegen.model.tree.CgValue -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.util.isAccessibleFrom +package org.utbot.framework.codegen.services.framework + +import org.utbot.framework.codegen.domain.MockitoStaticMocking +import org.utbot.framework.codegen.domain.NoStaticMocking +import org.utbot.framework.codegen.domain.builtin.any +import org.utbot.framework.codegen.domain.builtin.anyBoolean +import org.utbot.framework.codegen.domain.builtin.anyByte +import org.utbot.framework.codegen.domain.builtin.anyChar +import org.utbot.framework.codegen.domain.builtin.anyDouble +import org.utbot.framework.codegen.domain.builtin.anyFloat +import org.utbot.framework.codegen.domain.builtin.anyInt +import org.utbot.framework.codegen.domain.builtin.anyLong +import org.utbot.framework.codegen.domain.builtin.anyOfClass +import org.utbot.framework.codegen.domain.builtin.anyShort +import org.utbot.framework.codegen.domain.builtin.argumentMatchersClassId +import org.utbot.framework.codegen.domain.builtin.mockMethodId +import org.utbot.framework.codegen.domain.builtin.mockedConstructionContextClassId +import org.utbot.framework.codegen.domain.builtin.mockitoClassId +import org.utbot.framework.codegen.domain.builtin.thenReturnMethodId +import org.utbot.framework.codegen.domain.builtin.whenMethodId +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgAnonymousFunction +import org.utbot.framework.codegen.domain.models.CgAssignment +import org.utbot.framework.codegen.domain.models.CgConstructorCall +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgParameterDeclaration +import org.utbot.framework.codegen.domain.models.CgRunnable +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgStatementExecutableCall +import org.utbot.framework.codegen.domain.models.CgStaticRunnable +import org.utbot.framework.codegen.domain.models.CgSwitchCase +import org.utbot.framework.codegen.domain.models.CgSwitchCaseLabel +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.services.access.CgCallableAccessManager +import org.utbot.framework.codegen.services.access.CgCallableAccessManagerImpl +import org.utbot.framework.codegen.tree.CgStatementConstructor +import org.utbot.framework.codegen.tree.CgStatementConstructorImpl +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getVariableConstructorBy +import org.utbot.framework.codegen.tree.CgVariableConstructor +import org.utbot.framework.codegen.tree.hasAmbiguousOverloadsOf +import org.utbot.framework.codegen.util.isAccessibleFrom import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.ConstructorId import org.utbot.framework.plugin.api.ExecutableId @@ -262,11 +264,15 @@ private class MockitoStaticMocker(context: CgContext, private val mocker: Object CgAnonymousFunction( type = methodId.returnType, parameters = emptyList(), - listOf(CgStatementExecutableCall(CgMethodCall( + listOf( + CgStatementExecutableCall( + CgMethodCall( caller = null, methodId, matchers.toList() - ))) + ) + ) + ) ) } // void method diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestFrameworkManager.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/framework/TestFrameworkManager.kt similarity index 91% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestFrameworkManager.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/framework/TestFrameworkManager.kt index 5f930fcc1b..98d36b5fb0 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/TestFrameworkManager.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/framework/TestFrameworkManager.kt @@ -1,38 +1,39 @@ -package org.utbot.framework.codegen.model.constructor.tree - -import org.utbot.framework.codegen.Junit4 -import org.utbot.framework.codegen.Junit5 -import org.utbot.framework.codegen.TestNg -import org.utbot.framework.codegen.model.constructor.TestClassContext -import org.utbot.framework.codegen.model.constructor.builtin.forName -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy -import org.utbot.framework.codegen.model.constructor.util.addToListMethodId -import org.utbot.framework.codegen.model.constructor.util.argumentsClassId -import org.utbot.framework.codegen.model.constructor.util.argumentsMethodId -import org.utbot.framework.codegen.model.constructor.util.classCgClassId -import org.utbot.framework.codegen.model.constructor.util.importIfNeeded -import org.utbot.framework.codegen.model.constructor.util.setArgumentsArrayElement -import org.utbot.framework.codegen.model.tree.CgAllocateArray -import org.utbot.framework.codegen.model.tree.CgAnnotation -import org.utbot.framework.codegen.model.tree.CgEnumConstantAccess -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgGetJavaClass -import org.utbot.framework.codegen.model.tree.CgGetKotlinClass -import org.utbot.framework.codegen.model.tree.CgLiteral -import org.utbot.framework.codegen.model.tree.CgMethod -import org.utbot.framework.codegen.model.tree.CgMethodCall -import org.utbot.framework.codegen.model.tree.CgMultipleArgsAnnotation -import org.utbot.framework.codegen.model.tree.CgNamedAnnotationArgument -import org.utbot.framework.codegen.model.tree.CgSingleArgAnnotation -import org.utbot.framework.codegen.model.tree.CgValue -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.util.classLiteralAnnotationArgument -import org.utbot.framework.codegen.model.util.isAccessibleFrom -import org.utbot.framework.codegen.model.util.resolve -import org.utbot.framework.codegen.model.util.stringLiteral +package org.utbot.framework.codegen.services.framework + +import org.utbot.framework.codegen.domain.Junit4 +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.TestNg +import org.utbot.framework.codegen.domain.context.TestClassContext +import org.utbot.framework.codegen.domain.builtin.forName +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgAllocateArray +import org.utbot.framework.codegen.domain.models.CgAnnotation +import org.utbot.framework.codegen.domain.models.CgEnumConstantAccess +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgGetJavaClass +import org.utbot.framework.codegen.domain.models.CgGetKotlinClass +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgMethod +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgMultipleArgsAnnotation +import org.utbot.framework.codegen.domain.models.CgNamedAnnotationArgument +import org.utbot.framework.codegen.domain.models.CgSingleArgAnnotation +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.services.access.CgCallableAccessManager +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy +import org.utbot.framework.codegen.tree.addToListMethodId +import org.utbot.framework.codegen.tree.argumentsClassId +import org.utbot.framework.codegen.tree.argumentsMethodId +import org.utbot.framework.codegen.tree.classCgClassId +import org.utbot.framework.codegen.tree.importIfNeeded +import org.utbot.framework.codegen.tree.setArgumentsArrayElement +import org.utbot.framework.codegen.util.classLiteralAnnotationArgument +import org.utbot.framework.codegen.util.isAccessibleFrom +import org.utbot.framework.codegen.util.resolve +import org.utbot.framework.codegen.util.stringLiteral import org.utbot.framework.plugin.api.BuiltinMethodId import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/CgLanguageAssistant.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/CgLanguageAssistant.kt similarity index 56% rename from utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/CgLanguageAssistant.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/CgLanguageAssistant.kt index 5e52fe6571..6d924b600f 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/CgLanguageAssistant.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/CgLanguageAssistant.kt @@ -1,20 +1,22 @@ -package org.utbot.framework.plugin.api - -import org.utbot.framework.codegen.model.constructor.TestClassContext -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.name.CgNameGenerator -import org.utbot.framework.codegen.model.constructor.name.CgNameGeneratorImpl -import org.utbot.framework.codegen.model.constructor.tree.CgCallableAccessManager -import org.utbot.framework.codegen.model.constructor.tree.CgCallableAccessManagerImpl -import org.utbot.framework.codegen.model.constructor.tree.CgFieldStateManager -import org.utbot.framework.codegen.model.constructor.tree.CgFieldStateManagerImpl -import org.utbot.framework.codegen.model.constructor.tree.CgMethodConstructor -import org.utbot.framework.codegen.model.constructor.tree.CgVariableConstructor -import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor -import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructorImpl -import org.utbot.framework.codegen.model.util.CgPrinter -import org.utbot.framework.codegen.model.visitor.CgAbstractRenderer -import org.utbot.framework.codegen.model.visitor.CgRendererContext +package org.utbot.framework.codegen.services.language + +import org.utbot.framework.codegen.domain.context.TestClassContext +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.renderer.CgPrinter +import org.utbot.framework.codegen.renderer.CgAbstractRenderer +import org.utbot.framework.codegen.renderer.CgRendererContext +import org.utbot.framework.codegen.services.CgNameGenerator +import org.utbot.framework.codegen.services.CgNameGeneratorImpl +import org.utbot.framework.codegen.services.access.CgCallableAccessManager +import org.utbot.framework.codegen.services.access.CgCallableAccessManagerImpl +import org.utbot.framework.codegen.services.access.CgFieldStateManager +import org.utbot.framework.codegen.services.access.CgFieldStateManagerImpl +import org.utbot.framework.codegen.tree.CgMethodConstructor +import org.utbot.framework.codegen.tree.CgStatementConstructor +import org.utbot.framework.codegen.tree.CgStatementConstructorImpl +import org.utbot.framework.codegen.tree.CgVariableConstructor +import org.utbot.framework.plugin.api.ClassId +import org.utbot.framework.plugin.api.CodegenLanguage abstract class CgLanguageAssistant { diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/JavaCgLanguageAssistant.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/JavaCgLanguageAssistant.kt similarity index 76% rename from utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/JavaCgLanguageAssistant.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/JavaCgLanguageAssistant.kt index 635fc2ae2f..db236ed252 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/JavaCgLanguageAssistant.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/JavaCgLanguageAssistant.kt @@ -1,9 +1,11 @@ -package org.utbot.framework.plugin.api +package org.utbot.framework.codegen.services.language -import org.utbot.framework.codegen.model.util.CgPrinter -import org.utbot.framework.codegen.model.visitor.CgAbstractRenderer -import org.utbot.framework.codegen.model.visitor.CgJavaRenderer -import org.utbot.framework.codegen.model.visitor.CgRendererContext +import org.utbot.framework.codegen.renderer.CgPrinter +import org.utbot.framework.codegen.renderer.CgAbstractRenderer +import org.utbot.framework.codegen.renderer.CgJavaRenderer +import org.utbot.framework.codegen.renderer.CgRendererContext +import org.utbot.framework.plugin.api.ClassId +import org.utbot.framework.plugin.api.JVMTestFrameworkManager import org.utbot.framework.plugin.api.utils.testClassNameGenerator object JavaCgLanguageAssistant : CgLanguageAssistant() { diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/KeywordsUtil.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/KeywordsUtil.kt new file mode 100644 index 0000000000..10dc13e7b6 --- /dev/null +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/KeywordsUtil.kt @@ -0,0 +1,4 @@ +package org.utbot.framework.codegen.services.language + +fun isLanguageKeyword(word: String, codegenLanguageAssistant: CgLanguageAssistant): Boolean = + word in codegenLanguageAssistant.languageKeywords diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/KotlinCgLanguageAssistant.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/KotlinCgLanguageAssistant.kt new file mode 100644 index 0000000000..1e5e40e474 --- /dev/null +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/KotlinCgLanguageAssistant.kt @@ -0,0 +1,47 @@ +package org.utbot.framework.codegen.services.language + +import org.utbot.framework.codegen.renderer.CgPrinter +import org.utbot.framework.codegen.renderer.CgAbstractRenderer +import org.utbot.framework.codegen.renderer.CgKotlinRenderer +import org.utbot.framework.codegen.renderer.CgRendererContext +import org.utbot.framework.plugin.api.ClassId +import org.utbot.framework.plugin.api.JVMTestFrameworkManager +import org.utbot.framework.plugin.api.utils.testClassNameGenerator + +object KotlinCgLanguageAssistant : CgLanguageAssistant() { + + override val extension: String + get() = ".kt" + + override val languageKeywords: Set = setOf( + "as", "as?", "break", "class", "continue", "do", "else", "false", "for", "fun", "if", "in", "!in", "interface", + "is", "!is", "null", "object", "package", "return", "super", "this", "throw", "true", "try", "typealias", + "typeof", "val", "var", "when", "while" + ) + + override fun testClassName( + testClassCustomName: String?, + testClassPackageName: String, + classUnderTest: ClassId + ): Pair { + return testClassNameGenerator(testClassCustomName, testClassPackageName, classUnderTest) + } + + override fun getLanguageTestFrameworkManager() = JVMTestFrameworkManager() + + override fun cgRenderer(context: CgRendererContext, printer: CgPrinter): CgAbstractRenderer = + CgKotlinRenderer(context, printer) + + @Suppress("unused") + private val kotlinSoftKeywords = setOf( + "by", "catch", "constructor", "delegate", "dynamic", "field", "file", "finally", "get", "import", "init", + "param", "property", "receiver", "set", "setparam", "value", "where" + ) + + @Suppress("unused") + private val kotlinModifierKeywords = setOf( + "actual", "abstract", "annotation", "companion", "const", "crossinline", "data", "enum", "expect", "external", + "final", "infix", "inline", "inner", "internal", "lateinit", "noinline", "open", "operator", "out", "override", + "private", "protected", "public", "reified", "sealed", "suspend", "tailrec", "vararg" + ) +} \ No newline at end of file diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/LanguageTestFrameworkManager.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/LanguageTestFrameworkManager.kt new file mode 100644 index 0000000000..beb6de6a41 --- /dev/null +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/services/language/LanguageTestFrameworkManager.kt @@ -0,0 +1,12 @@ +package org.utbot.framework.codegen.services.language + +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.services.framework.TestFrameworkManager + +abstract class LanguageTestFrameworkManager { + + open val testFrameworks: List = emptyList() + abstract fun managerByFramework(context: CgContext): TestFrameworkManager + abstract val defaultTestFramework: TestFramework +} \ No newline at end of file diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/tree/Builders.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/Builders.kt similarity index 75% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/tree/Builders.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/Builders.kt index d62a5dce05..aafc3c3bc4 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/tree/Builders.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/Builders.kt @@ -1,8 +1,36 @@ -package org.utbot.framework.codegen.model.tree - -import org.utbot.framework.codegen.Import -import org.utbot.framework.codegen.model.constructor.tree.TestsGenerationReport -import org.utbot.framework.codegen.model.util.CgExceptionHandler +package org.utbot.framework.codegen.tree + +import org.utbot.framework.codegen.domain.Import +import org.utbot.framework.codegen.domain.models.CgAnnotation +import org.utbot.framework.codegen.domain.models.CgAssignment +import org.utbot.framework.codegen.domain.models.CgClass +import org.utbot.framework.codegen.domain.models.CgClassBody +import org.utbot.framework.codegen.domain.models.CgClassFile +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgDoWhileLoop +import org.utbot.framework.codegen.domain.models.CgDocumentationComment +import org.utbot.framework.codegen.domain.models.CgElement +import org.utbot.framework.codegen.domain.models.CgErrorTestMethod +import org.utbot.framework.codegen.domain.models.CgExceptionHandler +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgForEachLoop +import org.utbot.framework.codegen.domain.models.CgForLoop +import org.utbot.framework.codegen.domain.models.CgLoop +import org.utbot.framework.codegen.domain.models.CgMethod +import org.utbot.framework.codegen.domain.models.CgMethodsCluster +import org.utbot.framework.codegen.domain.models.CgNestedClassesRegion +import org.utbot.framework.codegen.domain.models.CgParameterDeclaration +import org.utbot.framework.codegen.domain.models.CgParameterizedTestDataProviderMethod +import org.utbot.framework.codegen.domain.models.CgReferenceExpression +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgStaticsRegion +import org.utbot.framework.codegen.domain.models.CgTestClassFile +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgTestMethodType +import org.utbot.framework.codegen.domain.models.CgTryCatch +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.domain.models.CgWhileLoop +import org.utbot.framework.codegen.reports.TestsGenerationReport import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.util.voidClassId @@ -191,3 +219,17 @@ class CgForEachLoopBuilder : CgLoopBuilder { fun buildCgForEachLoop(init: CgForEachLoopBuilder.() -> Unit): CgForEachLoop = CgForEachLoopBuilder().apply(init).build() + +class CgExceptionHandlerBuilder { + lateinit var exception: CgVariable + lateinit var statements: List + + fun build(): CgExceptionHandler { + return CgExceptionHandler(exception, statements) + } +} + +fun buildExceptionHandler(init: CgExceptionHandlerBuilder.() -> Unit): CgExceptionHandler { + return CgExceptionHandlerBuilder().apply(init).build() +} + diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgMethodConstructor.kt similarity index 94% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgMethodConstructor.kt index d20af2483e..89f1e9a36b 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgMethodConstructor.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgMethodConstructor.kt @@ -1,82 +1,65 @@ -package org.utbot.framework.codegen.model.constructor.tree +package org.utbot.framework.codegen.tree import org.utbot.common.PathUtil import org.utbot.common.WorkaroundReason import org.utbot.common.isStatic import org.utbot.common.workaround import org.utbot.framework.assemble.assemble -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.ParametrizedTestSource -import org.utbot.framework.codegen.RuntimeExceptionTestsBehaviour.PASS -import org.utbot.framework.codegen.model.constructor.CgMethodTestSet -import org.utbot.framework.codegen.model.constructor.builtin.closeMethodIdOrNull -import org.utbot.framework.codegen.model.constructor.builtin.forName -import org.utbot.framework.codegen.model.constructor.builtin.getClass -import org.utbot.framework.codegen.model.constructor.builtin.getTargetException -import org.utbot.framework.codegen.model.constructor.builtin.invoke -import org.utbot.framework.codegen.model.constructor.builtin.newInstance -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getMockFrameworkManagerBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getTestFrameworkManagerBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getVariableConstructorBy -import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor -import org.utbot.framework.codegen.model.constructor.util.EnvironmentFieldStateCache -import org.utbot.framework.codegen.model.constructor.util.FieldStateCache -import org.utbot.framework.codegen.model.constructor.util.classCgClassId -import org.utbot.framework.codegen.model.constructor.util.needExpectedDeclaration -import org.utbot.framework.codegen.model.constructor.util.overridesEquals -import org.utbot.framework.codegen.model.constructor.util.plus -import org.utbot.framework.codegen.model.constructor.util.setArgumentsArrayElement -import org.utbot.framework.codegen.model.constructor.util.typeCast -import org.utbot.framework.codegen.model.tree.CgAllocateArray -import org.utbot.framework.codegen.model.tree.CgArrayElementAccess -import org.utbot.framework.codegen.model.tree.CgClassId -import org.utbot.framework.codegen.model.tree.CgDeclaration -import org.utbot.framework.codegen.model.tree.CgDocPreTagStatement -import org.utbot.framework.codegen.model.tree.CgDocRegularStmt -import org.utbot.framework.codegen.model.tree.CgDocumentationComment -import org.utbot.framework.codegen.model.tree.CgEqualTo -import org.utbot.framework.codegen.model.tree.CgErrorTestMethod -import org.utbot.framework.codegen.model.tree.CgExecutableCall -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgFieldAccess -import org.utbot.framework.codegen.model.tree.CgGetJavaClass -import org.utbot.framework.codegen.model.tree.CgLiteral -import org.utbot.framework.codegen.model.tree.CgMethod -import org.utbot.framework.codegen.model.tree.CgMethodCall -import org.utbot.framework.codegen.model.tree.CgMultilineComment -import org.utbot.framework.codegen.model.tree.CgNotNullAssertion -import org.utbot.framework.codegen.model.tree.CgParameterDeclaration -import org.utbot.framework.codegen.model.tree.CgParameterKind -import org.utbot.framework.codegen.model.tree.CgParameterizedTestDataProviderMethod -import org.utbot.framework.codegen.model.tree.CgRegion -import org.utbot.framework.codegen.model.tree.CgSimpleRegion -import org.utbot.framework.codegen.model.tree.CgSingleLineComment -import org.utbot.framework.codegen.model.tree.CgStatement -import org.utbot.framework.codegen.model.tree.CgStaticFieldAccess -import org.utbot.framework.codegen.model.tree.CgTestMethod -import org.utbot.framework.codegen.model.tree.CgTestMethodType -import org.utbot.framework.codegen.model.tree.CgTestMethodType.* -import org.utbot.framework.codegen.model.tree.CgTryCatch -import org.utbot.framework.codegen.model.tree.CgTypeCast -import org.utbot.framework.codegen.model.tree.CgValue -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.tree.buildParameterizedTestDataProviderMethod -import org.utbot.framework.codegen.model.tree.buildTestMethod -import org.utbot.framework.codegen.model.tree.convertDocToCg -import org.utbot.framework.codegen.model.tree.toStatement -import org.utbot.framework.codegen.model.util.canBeSetFrom -import org.utbot.framework.codegen.model.util.equalTo -import org.utbot.framework.codegen.model.util.inc -import org.utbot.framework.codegen.model.util.canBeReadFrom -import org.utbot.framework.codegen.model.util.length -import org.utbot.framework.codegen.model.util.lessThan -import org.utbot.framework.codegen.model.util.nullLiteral -import org.utbot.framework.codegen.model.util.resolve +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour.PASS +import org.utbot.framework.codegen.domain.models.CgMethodTestSet +import org.utbot.framework.codegen.domain.builtin.closeMethodIdOrNull +import org.utbot.framework.codegen.domain.builtin.forName +import org.utbot.framework.codegen.domain.builtin.getClass +import org.utbot.framework.codegen.domain.builtin.getTargetException +import org.utbot.framework.codegen.domain.builtin.invoke +import org.utbot.framework.codegen.domain.builtin.newInstance +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgAllocateArray +import org.utbot.framework.codegen.domain.models.CgArrayElementAccess +import org.utbot.framework.codegen.domain.models.CgClassId +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgDocPreTagStatement +import org.utbot.framework.codegen.domain.models.CgDocRegularStmt +import org.utbot.framework.codegen.domain.models.CgDocumentationComment +import org.utbot.framework.codegen.domain.models.CgEqualTo +import org.utbot.framework.codegen.domain.models.CgErrorTestMethod +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgFieldAccess +import org.utbot.framework.codegen.domain.models.CgGetJavaClass +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgMethod +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgMultilineComment +import org.utbot.framework.codegen.domain.models.CgNotNullAssertion +import org.utbot.framework.codegen.domain.models.CgParameterDeclaration +import org.utbot.framework.codegen.domain.models.CgParameterKind +import org.utbot.framework.codegen.domain.models.CgParameterizedTestDataProviderMethod +import org.utbot.framework.codegen.domain.models.CgRegion +import org.utbot.framework.codegen.domain.models.CgSimpleRegion +import org.utbot.framework.codegen.domain.models.CgSingleLineComment +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgStaticFieldAccess +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgTestMethodType +import org.utbot.framework.codegen.domain.models.CgTestMethodType.* +import org.utbot.framework.codegen.domain.models.CgTryCatch +import org.utbot.framework.codegen.domain.models.CgTypeCast +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.domain.models.convertDocToCg +import org.utbot.framework.codegen.domain.models.toStatement +import org.utbot.framework.codegen.util.canBeSetFrom +import org.utbot.framework.codegen.util.equalTo +import org.utbot.framework.codegen.util.inc +import org.utbot.framework.codegen.util.canBeReadFrom +import org.utbot.framework.codegen.util.length +import org.utbot.framework.codegen.util.lessThan +import org.utbot.framework.codegen.util.nullLiteral +import org.utbot.framework.codegen.util.resolve import org.utbot.framework.fields.ExecutionStateAnalyzer import org.utbot.framework.fields.FieldPath import org.utbot.framework.plugin.api.BuiltinClassId @@ -148,6 +131,15 @@ import java.lang.reflect.InvocationTargetException import java.security.AccessControlException import java.lang.reflect.ParameterizedType import org.utbot.framework.UtSettings +import org.utbot.framework.codegen.services.access.CgCallableAccessManager +import org.utbot.framework.codegen.services.access.CgFieldStateManagerImpl +import org.utbot.framework.codegen.services.framework.TestFrameworkManager +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getMockFrameworkManagerBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getTestFrameworkManagerBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getVariableConstructorBy import org.utbot.framework.plugin.api.UtExecutionResult import org.utbot.framework.plugin.api.UtStreamConsumingFailure import org.utbot.framework.plugin.api.util.allSuperTypes diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/util/CgStatementConstructor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgStatementConstructor.kt similarity index 85% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/util/CgStatementConstructor.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgStatementConstructor.kt index 87b13713f6..b1de9332d0 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/util/CgStatementConstructor.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgStatementConstructor.kt @@ -1,50 +1,39 @@ -package org.utbot.framework.codegen.model.constructor.util - -import org.utbot.framework.codegen.model.constructor.builtin.forName -import org.utbot.framework.codegen.model.constructor.builtin.mockMethodId -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.tree.CgCallableAccessManager -import org.utbot.framework.codegen.model.tree.CgAllocateArray -import org.utbot.framework.codegen.model.tree.CgAnnotation -import org.utbot.framework.codegen.model.tree.CgAnonymousFunction -import org.utbot.framework.codegen.model.tree.CgComment -import org.utbot.framework.codegen.model.tree.CgDeclaration -import org.utbot.framework.codegen.model.tree.CgEmptyLine -import org.utbot.framework.codegen.model.tree.CgEnumConstantAccess -import org.utbot.framework.codegen.model.tree.CgErrorWrapper -import org.utbot.framework.codegen.model.tree.CgExecutableCall -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgForEachLoopBuilder -import org.utbot.framework.codegen.model.tree.CgForLoopBuilder -import org.utbot.framework.codegen.model.tree.CgGetClass -import org.utbot.framework.codegen.model.tree.CgIfStatement -import org.utbot.framework.codegen.model.tree.CgInnerBlock -import org.utbot.framework.codegen.model.tree.CgLiteral -import org.utbot.framework.codegen.model.tree.CgLogicalAnd -import org.utbot.framework.codegen.model.tree.CgLogicalOr -import org.utbot.framework.codegen.model.tree.CgMethodCall -import org.utbot.framework.codegen.model.tree.CgMultilineComment -import org.utbot.framework.codegen.model.tree.CgMultipleArgsAnnotation -import org.utbot.framework.codegen.model.tree.CgNamedAnnotationArgument -import org.utbot.framework.codegen.model.tree.CgParameterDeclaration -import org.utbot.framework.codegen.model.tree.CgReturnStatement -import org.utbot.framework.codegen.model.tree.CgSingleArgAnnotation -import org.utbot.framework.codegen.model.tree.CgSingleLineComment -import org.utbot.framework.codegen.model.tree.CgThrowStatement -import org.utbot.framework.codegen.model.tree.CgTryCatch -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.tree.buildAssignment -import org.utbot.framework.codegen.model.tree.buildCgForEachLoop -import org.utbot.framework.codegen.model.tree.buildDeclaration -import org.utbot.framework.codegen.model.tree.buildDoWhileLoop -import org.utbot.framework.codegen.model.tree.buildForLoop -import org.utbot.framework.codegen.model.tree.buildTryCatch -import org.utbot.framework.codegen.model.tree.buildWhileLoop -import org.utbot.framework.codegen.model.util.buildExceptionHandler -import org.utbot.framework.codegen.model.util.isAccessibleFrom -import org.utbot.framework.codegen.model.util.nullLiteral -import org.utbot.framework.codegen.model.util.resolve +package org.utbot.framework.codegen.tree + +import org.utbot.framework.codegen.domain.builtin.forName +import org.utbot.framework.codegen.domain.builtin.mockMethodId +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgAllocateArray +import org.utbot.framework.codegen.domain.models.CgAnnotation +import org.utbot.framework.codegen.domain.models.CgAnonymousFunction +import org.utbot.framework.codegen.domain.models.CgComment +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgEmptyLine +import org.utbot.framework.codegen.domain.models.CgEnumConstantAccess +import org.utbot.framework.codegen.domain.models.CgErrorWrapper +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgGetClass +import org.utbot.framework.codegen.domain.models.CgIfStatement +import org.utbot.framework.codegen.domain.models.CgInnerBlock +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgLogicalAnd +import org.utbot.framework.codegen.domain.models.CgLogicalOr +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgMultilineComment +import org.utbot.framework.codegen.domain.models.CgMultipleArgsAnnotation +import org.utbot.framework.codegen.domain.models.CgNamedAnnotationArgument +import org.utbot.framework.codegen.domain.models.CgParameterDeclaration +import org.utbot.framework.codegen.domain.models.CgReturnStatement +import org.utbot.framework.codegen.domain.models.CgSingleArgAnnotation +import org.utbot.framework.codegen.domain.models.CgSingleLineComment +import org.utbot.framework.codegen.domain.models.CgThrowStatement +import org.utbot.framework.codegen.domain.models.CgTryCatch +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.util.isAccessibleFrom +import org.utbot.framework.codegen.util.nullLiteral +import org.utbot.framework.codegen.util.resolve import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.ExecutableId @@ -56,14 +45,15 @@ import org.utbot.framework.plugin.api.util.isSubtypeOf import org.utbot.framework.plugin.api.util.objectArrayClassId import org.utbot.framework.plugin.api.util.objectClassId import fj.data.Either -import org.utbot.framework.codegen.model.constructor.builtin.getDeclaredConstructor -import org.utbot.framework.codegen.model.constructor.builtin.getDeclaredField -import org.utbot.framework.codegen.model.constructor.builtin.getDeclaredMethod -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy -import org.utbot.framework.codegen.model.tree.CgArrayInitializer -import org.utbot.framework.codegen.model.tree.CgGetJavaClass -import org.utbot.framework.codegen.model.tree.CgIsInstance +import org.utbot.framework.codegen.domain.builtin.getDeclaredConstructor +import org.utbot.framework.codegen.domain.builtin.getDeclaredField +import org.utbot.framework.codegen.domain.builtin.getDeclaredMethod +import org.utbot.framework.codegen.domain.models.CgArrayInitializer +import org.utbot.framework.codegen.domain.models.CgGetJavaClass +import org.utbot.framework.codegen.domain.models.CgIsInstance +import org.utbot.framework.codegen.services.access.CgCallableAccessManager +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy import org.utbot.framework.plugin.api.ConstructorId import org.utbot.framework.plugin.api.FieldId import org.utbot.framework.plugin.api.MethodId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgTestClassConstructor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgTestClassConstructor.kt similarity index 99% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgTestClassConstructor.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgTestClassConstructor.kt index a2a276ea40..4f1eea4e6b 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgTestClassConstructor.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgTestClassConstructor.kt @@ -1,4 +1,4 @@ -package org.utbot.framework.codegen.model.constructor.tree +package org.utbot.framework.codegen.tree import org.utbot.framework.UtSettings import org.utbot.framework.codegen.ParametrizedTestSource diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgVariableConstructor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgVariableConstructor.kt similarity index 89% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgVariableConstructor.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgVariableConstructor.kt index 56cd08a28b..26d008efa3 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgVariableConstructor.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgVariableConstructor.kt @@ -1,44 +1,38 @@ -package org.utbot.framework.codegen.model.constructor.tree +package org.utbot.framework.codegen.tree import org.utbot.common.isStatic -import org.utbot.framework.codegen.model.constructor.builtin.forName -import org.utbot.framework.codegen.model.constructor.builtin.setArrayElement -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getMockFrameworkManagerBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy -import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor -import org.utbot.framework.codegen.model.constructor.util.MAX_ARRAY_INITIALIZER_SIZE -import org.utbot.framework.codegen.model.constructor.util.arrayInitializer -import org.utbot.framework.codegen.model.constructor.util.get -import org.utbot.framework.codegen.model.constructor.util.isDefaultValueOf -import org.utbot.framework.codegen.model.constructor.util.isNotDefaultValueOf -import org.utbot.framework.codegen.model.constructor.util.typeCast -import org.utbot.framework.codegen.model.tree.CgAllocateArray -import org.utbot.framework.codegen.model.tree.CgAssignment -import org.utbot.framework.codegen.model.tree.CgDeclaration -import org.utbot.framework.codegen.model.tree.CgEnumConstantAccess -import org.utbot.framework.codegen.model.tree.CgExecutableCall -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgFieldAccess -import org.utbot.framework.codegen.model.tree.CgGetJavaClass -import org.utbot.framework.codegen.model.tree.CgLiteral -import org.utbot.framework.codegen.model.tree.CgMethodCall -import org.utbot.framework.codegen.model.tree.CgStatement -import org.utbot.framework.codegen.model.tree.CgStaticFieldAccess -import org.utbot.framework.codegen.model.tree.CgValue -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.util.at -import org.utbot.framework.codegen.model.util.canBeSetFrom -import org.utbot.framework.codegen.model.util.fieldThatIsGotWith -import org.utbot.framework.codegen.model.util.fieldThatIsSetWith -import org.utbot.framework.codegen.model.util.inc -import org.utbot.framework.codegen.model.util.isAccessibleFrom -import org.utbot.framework.codegen.model.util.lessThan -import org.utbot.framework.codegen.model.util.nullLiteral -import org.utbot.framework.codegen.model.util.resolve +import org.utbot.framework.codegen.domain.builtin.forName +import org.utbot.framework.codegen.domain.builtin.setArrayElement +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgAllocateArray +import org.utbot.framework.codegen.domain.models.CgAssignment +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgEnumConstantAccess +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgFieldAccess +import org.utbot.framework.codegen.domain.models.CgGetJavaClass +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgStaticFieldAccess +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.services.access.CgCallableAccessManager +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getMockFrameworkManagerBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy +import org.utbot.framework.codegen.util.at +import org.utbot.framework.codegen.util.canBeSetFrom +import org.utbot.framework.codegen.util.fieldThatIsGotWith +import org.utbot.framework.codegen.util.fieldThatIsSetWith +import org.utbot.framework.codegen.util.inc +import org.utbot.framework.codegen.util.isAccessibleFrom +import org.utbot.framework.codegen.util.lessThan +import org.utbot.framework.codegen.util.nullLiteral +import org.utbot.framework.codegen.util.resolve import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/util/ConstructorUtils.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/ConstructorUtils.kt similarity index 94% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/util/ConstructorUtils.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/ConstructorUtils.kt index 5f29c0d64f..440ef22c2a 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/util/ConstructorUtils.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/ConstructorUtils.kt @@ -1,14 +1,14 @@ -package org.utbot.framework.codegen.model.constructor.util - -import org.utbot.framework.codegen.RegularImport -import org.utbot.framework.codegen.StaticImport -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.tree.CgClassId -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgTypeCast -import org.utbot.framework.codegen.model.tree.CgValue -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.util.isAccessibleFrom +package org.utbot.framework.codegen.tree + +import org.utbot.framework.codegen.domain.RegularImport +import org.utbot.framework.codegen.domain.StaticImport +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgClassId +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgTypeCast +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.util.isAccessibleFrom import org.utbot.framework.fields.ArrayElementAccess import org.utbot.framework.fields.FieldAccess import org.utbot.framework.fields.FieldPath @@ -28,11 +28,11 @@ import org.utbot.framework.plugin.api.util.shortClassId import org.utbot.framework.plugin.api.util.underlyingType import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.PersistentSet -import org.utbot.framework.codegen.model.constructor.builtin.setArrayElement -import org.utbot.framework.codegen.model.constructor.tree.CgCallableAccessManager -import org.utbot.framework.codegen.model.tree.CgAllocateInitializedArray -import org.utbot.framework.codegen.model.tree.CgArrayInitializer -import org.utbot.framework.codegen.model.util.at +import org.utbot.framework.codegen.domain.builtin.setArrayElement +import org.utbot.framework.codegen.domain.models.CgAllocateInitializedArray +import org.utbot.framework.codegen.domain.models.CgArrayInitializer +import org.utbot.framework.codegen.services.access.CgCallableAccessManager +import org.utbot.framework.codegen.util.at import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.BuiltinMethodId import org.utbot.framework.plugin.api.ClassId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/util/DeclarationUtils.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/DeclarationUtils.kt similarity index 89% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/util/DeclarationUtils.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/DeclarationUtils.kt index 8100f48d40..e2072cc5b3 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/util/DeclarationUtils.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/DeclarationUtils.kt @@ -1,4 +1,4 @@ -package org.utbot.framework.codegen.model.constructor.util +package org.utbot.framework.codegen.tree import org.utbot.framework.plugin.api.UtModel import org.utbot.framework.plugin.api.UtNullModel diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgUtilClassConstructor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/ututils/CgUtilClassConstructor.kt similarity index 61% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgUtilClassConstructor.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/ututils/CgUtilClassConstructor.kt index 53c53eb615..c0aee58cd8 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/constructor/tree/CgUtilClassConstructor.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/ututils/CgUtilClassConstructor.kt @@ -1,18 +1,14 @@ -package org.utbot.framework.codegen.model.constructor.tree +package org.utbot.framework.codegen.tree.ututils -import org.utbot.framework.codegen.model.CodeGenerator -import org.utbot.framework.codegen.model.UtilClassKind -import org.utbot.framework.codegen.model.constructor.builtin.selectUtilClassId -import org.utbot.framework.codegen.model.constructor.builtin.utJavaUtilsClassId -import org.utbot.framework.codegen.model.constructor.builtin.utKotlinUtilsClassId -import org.utbot.framework.codegen.model.tree.CgAuxiliaryClass -import org.utbot.framework.codegen.model.tree.CgAuxiliaryNestedClassesRegion -import org.utbot.framework.codegen.model.tree.CgClassFile -import org.utbot.framework.codegen.model.tree.CgStaticsRegion -import org.utbot.framework.codegen.model.tree.CgUtilMethod -import org.utbot.framework.codegen.model.tree.buildClass -import org.utbot.framework.codegen.model.tree.buildClassBody -import org.utbot.framework.codegen.model.tree.buildClassFile +import org.utbot.framework.codegen.domain.builtin.selectUtilClassId +import org.utbot.framework.codegen.domain.models.CgAuxiliaryClass +import org.utbot.framework.codegen.domain.models.CgAuxiliaryNestedClassesRegion +import org.utbot.framework.codegen.domain.models.CgClassFile +import org.utbot.framework.codegen.domain.models.CgStaticsRegion +import org.utbot.framework.codegen.domain.models.CgUtilMethod +import org.utbot.framework.codegen.tree.buildClass +import org.utbot.framework.codegen.tree.buildClassBody +import org.utbot.framework.codegen.tree.buildClassFile import org.utbot.framework.plugin.api.CodegenLanguage /** diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/ututils/UtilClassKind.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/ututils/UtilClassKind.kt new file mode 100644 index 0000000000..65222922a9 --- /dev/null +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/ututils/UtilClassKind.kt @@ -0,0 +1,149 @@ +package org.utbot.framework.codegen.tree.ututils + +import org.utbot.framework.codegen.domain.builtin.UtilClassFileMethodProvider +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.models.CgDocRegularStmt +import org.utbot.framework.codegen.domain.models.CgDocumentationComment +import org.utbot.framework.codegen.renderer.CgAbstractRenderer +import org.utbot.framework.plugin.api.CodegenLanguage +import org.utbot.framework.plugin.api.MockFramework +import java.util.* + +/** + * A kind of util class. See the description of each kind at their respective classes. + * @property utilMethodProvider a [UtilClassFileMethodProvider] containing information about + * utilities that come from a separately generated UtUtils class + * (as opposed to utils that are declared directly in the test class, for example). + * @property mockFrameworkUsed a flag indicating if a mock framework was used. + * For detailed description see [CgContextOwner.mockFrameworkUsed]. + * @property mockFramework a framework used to create mocks + * @property priority when we generate multiple test classes, they can require different [UtilClassKind]. + * We will generate an util class corresponding to the kind with the greatest priority. + * For example, one test class may not use mocks, but the other one does. + * Then we will generate an util class with mocks, because it has a greater priority (see [UtUtilsWithMockito]). + */ +sealed class UtilClassKind( + internal val utilMethodProvider: UtilClassFileMethodProvider, + internal val mockFrameworkUsed: Boolean, + internal val mockFramework: MockFramework = MockFramework.MOCKITO, + private val priority: Int +) : Comparable { + + /** + * Contains comments specifying the version and the kind of util class being generated and + */ + fun utilClassDocumentation(codegenLanguage: CodegenLanguage): CgDocumentationComment + = CgDocumentationComment( + listOf( + CgDocRegularStmt(utilClassKindCommentText), + CgDocRegularStmt("$UTIL_CLASS_VERSION_COMMENT_PREFIX${utilClassVersion(codegenLanguage)}"), + ) + ) + + /** + * The version of util class being generated. + * For more details see [UtilClassFileMethodProvider.UTIL_CLASS_VERSION]. + */ + fun utilClassVersion(codegenLanguage: CodegenLanguage): String + = UtilClassFileMethodProvider(codegenLanguage).UTIL_CLASS_VERSION + + /** + * The text of comment specifying the kind of util class. + * At the moment, there are two kinds: [RegularUtUtils] (without Mockito) and [UtUtilsWithMockito]. + * + * This comment is needed when the plugin decides whether to overwrite an existing util class or not. + * When making that decision, it is important to determine if the existing class uses mocks or not, + * and this comment will help do that. + */ + abstract val utilClassKindCommentText: String + + /** + * A kind of regular UtUtils class. "Regular" here means that this class does not use a mock framework. + */ + class RegularUtUtils(val codegenLanguage: CodegenLanguage) : + UtilClassKind( + UtilClassFileMethodProvider(codegenLanguage), + mockFrameworkUsed = false, + priority = 0, + ) { + override val utilClassKindCommentText: String + get() = "This is a regular UtUtils class (without mock framework usage)" + } + + /** + * A kind of UtUtils class that uses a mock framework. At the moment the framework is Mockito. + */ + class UtUtilsWithMockito(val codegenLanguage: CodegenLanguage) : + UtilClassKind(UtilClassFileMethodProvider(codegenLanguage), mockFrameworkUsed = true, priority = 1) { + override val utilClassKindCommentText: String + get() = "This is UtUtils class with Mockito support" + } + + override fun compareTo(other: UtilClassKind): Int { + return priority.compareTo(other.priority) + } + + /** + * Construct an util class file as a [CgClassFile] and render it. + * @return the text of the generated util class file. + */ + fun getUtilClassText(codegenLanguage: CodegenLanguage): String { + val utilClassFile = CgUtilClassConstructor.constructUtilsClassFile(this, codegenLanguage) + val renderer = CgAbstractRenderer.makeRenderer(this, codegenLanguage) + utilClassFile.accept(renderer) + return renderer.toString() + } + + companion object { + + /** + * Class UtUtils will contain a comment specifying the version of this util class + * (if we ever change util methods, then util class will be different, hence the update of its version). + * This is a prefix that will go before the version in the comment. + */ + const val UTIL_CLASS_VERSION_COMMENT_PREFIX = "UtUtils class version: " + + fun utilClassKindByCommentOrNull( + comment: String, + codegenLanguage: CodegenLanguage + ) + : UtilClassKind? { + return when (comment) { + RegularUtUtils(codegenLanguage).utilClassKindCommentText -> RegularUtUtils(codegenLanguage) + UtUtilsWithMockito(codegenLanguage).utilClassKindCommentText -> UtUtilsWithMockito(codegenLanguage) + else -> null + } + } + + /** + * Check if an util class is required, and if so, what kind. + * @return `null` if [CgContext.utilMethodProvider] is not [UtilClassFileMethodProvider], + * because it means that util methods will be taken from some other provider (e.g. [TestClassUtilMethodProvider]). + */ + internal fun fromCgContextOrNull(context: CgContext): UtilClassKind? { + if (context.requiredUtilMethods.isEmpty()) return null + if (!context.mockFrameworkUsed) { + return RegularUtUtils(context.codegenLanguage) + } + return when (context.mockFramework) { + MockFramework.MOCKITO -> UtUtilsWithMockito(context.codegenLanguage) + // in case we will add any other mock frameworks, newer Kotlin compiler versions + // will report a non-exhaustive 'when', so we will not forget to support them here as well + } + } + + const val UT_UTILS_BASE_PACKAGE_NAME = "org.utbot.runtime.utils" + const val UT_UTILS_INSTANCE_NAME = "UtUtils" + const val PACKAGE_DELIMITER = "." + + /** + * List of package name components of UtUtils class. + * See whole package name at [UT_UTILS_BASE_PACKAGE_NAME]. + */ + fun utilsPackageNames(codegenLanguage: CodegenLanguage): List + = UT_UTILS_BASE_PACKAGE_NAME.split(PACKAGE_DELIMITER) + codegenLanguage.name.lowercase(Locale.getDefault()) + + fun utilsPackageFullName(codegenLanguage: CodegenLanguage): String + = utilsPackageNames(codegenLanguage).joinToString { PACKAGE_DELIMITER } + } +} \ No newline at end of file diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/ClassIdUtil.kt similarity index 97% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/ClassIdUtil.kt index 93eee9c85e..1f54455325 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/ClassIdUtil.kt @@ -1,4 +1,4 @@ -package org.utbot.framework.codegen.model.util +package org.utbot.framework.codegen.util import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.ExecutableId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DslUtil.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/DslUtil.kt similarity index 73% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DslUtil.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/DslUtil.kt index 80583ef6ea..228654457d 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DslUtil.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/DslUtil.kt @@ -1,25 +1,22 @@ -package org.utbot.framework.codegen.model.util - -import org.utbot.framework.codegen.model.constructor.builtin.UtilMethodProvider -import org.utbot.framework.codegen.model.constructor.tree.CgMethodConstructor -import org.utbot.framework.codegen.model.tree.CgArrayElementAccess -import org.utbot.framework.codegen.model.tree.CgDecrement -import org.utbot.framework.codegen.model.tree.CgEqualTo -import org.utbot.framework.codegen.model.tree.CgExpression -import org.utbot.framework.codegen.model.tree.CgFieldAccess -import org.utbot.framework.codegen.model.tree.CgGetClass -import org.utbot.framework.codegen.model.tree.CgGetJavaClass -import org.utbot.framework.codegen.model.tree.CgGetKotlinClass -import org.utbot.framework.codegen.model.tree.CgGetLength -import org.utbot.framework.codegen.model.tree.CgGreaterThan -import org.utbot.framework.codegen.model.tree.CgIncrement -import org.utbot.framework.codegen.model.tree.CgLessThan -import org.utbot.framework.codegen.model.tree.CgLiteral -import org.utbot.framework.codegen.model.tree.CgStaticFieldAccess -import org.utbot.framework.codegen.model.tree.CgVariable +package org.utbot.framework.codegen.util + +import org.utbot.framework.codegen.domain.builtin.UtilMethodProvider +import org.utbot.framework.codegen.domain.models.CgArrayElementAccess +import org.utbot.framework.codegen.domain.models.CgDecrement +import org.utbot.framework.codegen.domain.models.CgEqualTo +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgGetClass +import org.utbot.framework.codegen.domain.models.CgGetJavaClass +import org.utbot.framework.codegen.domain.models.CgGetKotlinClass +import org.utbot.framework.codegen.domain.models.CgGetLength +import org.utbot.framework.codegen.domain.models.CgGreaterThan +import org.utbot.framework.codegen.domain.models.CgIncrement +import org.utbot.framework.codegen.domain.models.CgLessThan +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.tree.CgMethodConstructor import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage -import org.utbot.framework.plugin.api.FieldId import org.utbot.framework.plugin.api.util.booleanClassId import org.utbot.framework.plugin.api.util.byteClassId import org.utbot.framework.plugin.api.util.charClassId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ExecutableIdUtil.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/ExecutableIdUtil.kt similarity index 93% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ExecutableIdUtil.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/ExecutableIdUtil.kt index 22f7725c2f..af3cef3bc8 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ExecutableIdUtil.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/ExecutableIdUtil.kt @@ -1,4 +1,4 @@ -package org.utbot.framework.codegen.model.util +package org.utbot.framework.codegen.util import org.utbot.framework.plugin.api.ExecutableId import org.utbot.framework.plugin.api.util.isPackagePrivate diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/FieldIdUtil.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/FieldIdUtil.kt similarity index 96% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/FieldIdUtil.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/FieldIdUtil.kt index d90a4c9151..deb70d7b52 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/FieldIdUtil.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/util/FieldIdUtil.kt @@ -1,6 +1,6 @@ -package org.utbot.framework.codegen.model.util +package org.utbot.framework.codegen.util -import org.utbot.framework.codegen.model.constructor.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContext import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.FieldId import org.utbot.framework.plugin.api.MethodId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/JVMTestFrameworkManager.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/JVMTestFrameworkManager.kt index 5995439c60..4bc9f33249 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/JVMTestFrameworkManager.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/JVMTestFrameworkManager.kt @@ -1,12 +1,13 @@ package org.utbot.framework.plugin.api -import org.utbot.framework.codegen.Junit4 -import org.utbot.framework.codegen.Junit5 -import org.utbot.framework.codegen.TestNg -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.tree.Junit4Manager -import org.utbot.framework.codegen.model.constructor.tree.Junit5Manager -import org.utbot.framework.codegen.model.constructor.tree.TestNgManager +import org.utbot.framework.codegen.domain.Junit4 +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.TestNg +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.services.framework.Junit4Manager +import org.utbot.framework.codegen.services.framework.Junit5Manager +import org.utbot.framework.codegen.services.framework.TestNgManager +import org.utbot.framework.codegen.services.language.LanguageTestFrameworkManager class JVMTestFrameworkManager : LanguageTestFrameworkManager() { diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/KotlinCgLanguageAssistant.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/KotlinCgLanguageAssistant.kt deleted file mode 100644 index e61af08f63..0000000000 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/KotlinCgLanguageAssistant.kt +++ /dev/null @@ -1,32 +0,0 @@ -package org.utbot.framework.plugin.api - -import org.utbot.framework.codegen.model.util.CgPrinter -import org.utbot.framework.codegen.model.visitor.CgAbstractRenderer -import org.utbot.framework.codegen.model.visitor.CgKotlinRenderer -import org.utbot.framework.codegen.model.visitor.CgRendererContext -import org.utbot.framework.plugin.api.utils.testClassNameGenerator - -object KotlinCgLanguageAssistant : CgLanguageAssistant() { - - override val extension: String - get() = ".kt" - - override val languageKeywords: Set = setOf( - "as", "as?", "break", "class", "continue", "do", "else", "false", "for", "fun", "if", "in", "!in", "interface", - "is", "!is", "null", "object", "package", "return", "super", "this", "throw", "true", "try", "typealias", - "typeof", "val", "var", "when", "while" - ) - - override fun testClassName( - testClassCustomName: String?, - testClassPackageName: String, - classUnderTest: ClassId - ): Pair { - return testClassNameGenerator(testClassCustomName, testClassPackageName, classUnderTest) - } - - override fun getLanguageTestFrameworkManager() = JVMTestFrameworkManager() - - override fun cgRenderer(context: CgRendererContext, printer: CgPrinter): CgAbstractRenderer = - CgKotlinRenderer(context, printer) -} \ No newline at end of file diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/LanguageTestFrameworkManager.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/LanguageTestFrameworkManager.kt deleted file mode 100644 index b553753b77..0000000000 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/LanguageTestFrameworkManager.kt +++ /dev/null @@ -1,12 +0,0 @@ -package org.utbot.framework.plugin.api - -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.tree.TestFrameworkManager - -abstract class LanguageTestFrameworkManager { - - open val testFrameworks: List = emptyList() - abstract fun managerByFramework(context: CgContext): TestFrameworkManager - abstract val defaultTestFramework: TestFramework -} \ No newline at end of file diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/TestCaseGenerator.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/TestCaseGenerator.kt index cc61b8099e..ec51997b6b 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/TestCaseGenerator.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/TestCaseGenerator.kt @@ -24,7 +24,7 @@ import org.utbot.framework.UtSettings.checkSolverTimeoutMillis import org.utbot.framework.UtSettings.disableCoroutinesDebug import org.utbot.framework.UtSettings.utBotGenerationTimeoutInMillis import org.utbot.framework.UtSettings.warmupConcreteExecution -import org.utbot.framework.codegen.model.util.checkFrameworkDependencies +import org.utbot.framework.plugin.api.utils.checkFrameworkDependencies import org.utbot.framework.concrete.UtConcreteExecutionData import org.utbot.framework.concrete.UtExecutionInstrumentation import org.utbot.framework.concrete.UtModelConstructor diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DependencyPatterns.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/utils/DependencyPatterns.kt similarity index 93% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DependencyPatterns.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/utils/DependencyPatterns.kt index 894b9a1fbc..e31ba4a4c5 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DependencyPatterns.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/utils/DependencyPatterns.kt @@ -1,9 +1,9 @@ -package org.utbot.framework.codegen.model.util +package org.utbot.framework.plugin.api.utils -import org.utbot.framework.codegen.Junit4 -import org.utbot.framework.codegen.Junit5 -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.TestNg +import org.utbot.framework.codegen.domain.Junit4 +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.TestNg import org.utbot.framework.plugin.api.MockFramework data class Patterns( diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DependencyUtils.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/utils/DependencyUtils.kt similarity index 98% rename from utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DependencyUtils.kt rename to utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/utils/DependencyUtils.kt index cf09cbc321..c3c3701c21 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/DependencyUtils.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/api/utils/DependencyUtils.kt @@ -1,4 +1,4 @@ -package org.utbot.framework.codegen.model.util +package org.utbot.framework.plugin.api.utils import org.utbot.framework.concrete.UtExecutionInstrumentation import org.utbot.framework.plugin.api.MockFramework diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/GenerateTestsAndSarifReportFacade.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/GenerateTestsAndSarifReportFacade.kt index b0a2800086..7bc9acc7cd 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/GenerateTestsAndSarifReportFacade.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/GenerateTestsAndSarifReportFacade.kt @@ -1,8 +1,8 @@ package org.utbot.framework.plugin.sarif -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.NoStaticMocking -import org.utbot.framework.codegen.model.CodeGenerator +import org.utbot.framework.codegen.CodeGenerator +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.NoStaticMocking import org.utbot.framework.plugin.api.TestCaseGenerator import org.utbot.framework.plugin.api.UtMethodTestSet import org.utbot.framework.plugin.api.util.id diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/SarifExtensionProvider.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/SarifExtensionProvider.kt index a8a633ec0d..9840809dd0 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/SarifExtensionProvider.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/SarifExtensionProvider.kt @@ -1,7 +1,14 @@ package org.utbot.framework.plugin.sarif import org.utbot.engine.Mocker -import org.utbot.framework.codegen.* +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.Junit4 +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.MockitoStaticMocking +import org.utbot.framework.codegen.domain.NoStaticMocking +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.TestNg import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.MockFramework diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/process/EngineMain.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/process/EngineMain.kt index 9d0c753c5f..4b45922d60 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/process/EngineMain.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/process/EngineMain.kt @@ -13,8 +13,13 @@ import org.utbot.common.nameOfPackage import org.utbot.engine.util.mockListeners.ForceMockListener import org.utbot.engine.util.mockListeners.ForceStaticMockListener import org.utbot.framework.codegen.* -import org.utbot.framework.codegen.model.CodeGenerator -import org.utbot.framework.codegen.model.constructor.tree.TestsGenerationReport +import org.utbot.framework.codegen.domain.HangingTestsTimeout +import org.utbot.framework.codegen.domain.MockitoStaticMocking +import org.utbot.framework.codegen.domain.NoStaticMocking +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour +import org.utbot.framework.codegen.domain.testFrameworkByName +import org.utbot.framework.codegen.reports.TestsGenerationReport import org.utbot.framework.plugin.api.* import org.utbot.framework.plugin.api.Signature import org.utbot.framework.plugin.api.util.UtContext diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/util/ImplicitlyDeclaredMethods.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/util/ImplicitlyDeclaredMethods.kt index 655fc16c66..0b9b85225b 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/util/ImplicitlyDeclaredMethods.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/util/ImplicitlyDeclaredMethods.kt @@ -1,7 +1,7 @@ package org.utbot.framework.util -import org.utbot.framework.codegen.model.util.fieldThatIsGotWith -import org.utbot.framework.codegen.model.util.fieldThatIsSetWith +import org.utbot.framework.codegen.util.fieldThatIsGotWith +import org.utbot.framework.codegen.util.fieldThatIsSetWith import org.utbot.framework.plugin.api.ExecutableId import org.utbot.framework.plugin.api.util.isData import org.utbot.framework.plugin.api.util.isEnum diff --git a/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProvider.kt b/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProvider.kt index 0464a51b28..c747d55aa3 100644 --- a/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProvider.kt +++ b/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProvider.kt @@ -2,9 +2,9 @@ package org.utbot.gradle.plugin.extension import org.gradle.api.Project import org.utbot.common.PathUtil.toPath -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.TestFramework +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.MockFramework diff --git a/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProviderTest.kt b/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProviderTest.kt index 8db032a787..e153ea21f8 100644 --- a/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProviderTest.kt +++ b/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProviderTest.kt @@ -8,7 +8,14 @@ import org.junit.jupiter.api.assertThrows import org.mockito.Mockito import org.utbot.common.PathUtil.toPath import org.utbot.engine.Mocker -import org.utbot.framework.codegen.* +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.Junit4 +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.MockitoStaticMocking +import org.utbot.framework.codegen.domain.NoStaticMocking +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.TestNg import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.MockFramework diff --git a/utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/language/python/PythonTestsModel.kt b/utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/language/python/PythonTestsModel.kt index eb5af48bac..b0807313e3 100644 --- a/utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/language/python/PythonTestsModel.kt +++ b/utbot-intellij-python/src/main/kotlin/org/utbot/intellij/plugin/language/python/PythonTestsModel.kt @@ -5,8 +5,8 @@ import com.intellij.openapi.project.Project import com.jetbrains.python.psi.PyClass import com.jetbrains.python.psi.PyFile import com.jetbrains.python.psi.PyFunction -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.plugin.api.CgLanguageAssistant +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.services.language.CgLanguageAssistant import org.utbot.intellij.plugin.models.BaseTestsModel class PythonTestsModel( diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt index 5038079f89..de3a40de1c 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/CodeGenerationController.kt @@ -51,7 +51,6 @@ import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.getPackage import org.jetbrains.kotlin.idea.core.util.toPsiDirectory import org.jetbrains.kotlin.idea.util.ImportInsertHelperImpl -import org.jetbrains.kotlin.idea.util.projectStructure.allModules import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtNamedFunction @@ -63,12 +62,12 @@ import org.utbot.common.FileUtil import org.utbot.common.HTML_LINE_SEPARATOR import org.utbot.common.PathUtil.toHtmlLinkTag import org.utbot.framework.UtSettings -import org.utbot.framework.codegen.Import -import org.utbot.framework.codegen.ParametrizedTestSource -import org.utbot.framework.codegen.RegularImport -import org.utbot.framework.codegen.StaticImport -import org.utbot.framework.codegen.model.UtilClassKind -import org.utbot.framework.codegen.model.UtilClassKind.Companion.UT_UTILS_INSTANCE_NAME +import org.utbot.framework.codegen.domain.Import +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.RegularImport +import org.utbot.framework.codegen.domain.StaticImport +import org.utbot.framework.codegen.tree.ututils.UtilClassKind +import org.utbot.framework.codegen.tree.ututils.UtilClassKind.Companion.UT_UTILS_INSTANCE_NAME import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.intellij.plugin.inspection.UnitTestBotInspectionManager @@ -83,9 +82,7 @@ import org.utbot.intellij.plugin.ui.SarifReportNotifier import org.utbot.intellij.plugin.ui.TestReportUrlOpeningListener import org.utbot.intellij.plugin.ui.TestsReportNotifier import org.utbot.intellij.plugin.ui.WarningTestsReportNotifier -import org.utbot.intellij.plugin.ui.utils.TestSourceRoot import org.utbot.intellij.plugin.ui.utils.getOrCreateSarifReportsPath -import org.utbot.intellij.plugin.ui.utils.isBuildWithGradle import org.utbot.intellij.plugin.ui.utils.showErrorDialogLater import org.utbot.intellij.plugin.ui.utils.suitableTestSourceRoots import org.utbot.intellij.plugin.util.IntelliJApiHelper.Target.EDT_LATER diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt index fecabc8708..c5be8169d1 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/models/GenerateTestsModel.kt @@ -1,12 +1,12 @@ package org.utbot.intellij.plugin.models import com.intellij.openapi.components.service -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.HangingTestsTimeout -import org.utbot.framework.codegen.ParametrizedTestSource -import org.utbot.framework.codegen.RuntimeExceptionTestsBehaviour -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.TestFramework +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.HangingTestsTimeout +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.MockFramework import org.utbot.framework.plugin.api.MockStrategyApi diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/process/EngineProcess.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/process/EngineProcess.kt index c4f56c42f9..c4c9823cb1 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/process/EngineProcess.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/process/EngineProcess.kt @@ -18,8 +18,13 @@ import mu.KotlinLogging import org.utbot.common.* import org.utbot.framework.UtSettings import org.utbot.framework.UtSettings.runIdeaProcessWithDebug -import org.utbot.framework.codegen.* -import org.utbot.framework.codegen.model.UtilClassKind +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.HangingTestsTimeout +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.tree.ututils.UtilClassKind import org.utbot.framework.plugin.api.* import org.utbot.framework.plugin.services.JdkInfo import org.utbot.framework.plugin.services.JdkInfoDefaultProvider diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/Settings.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/Settings.kt index f25567356c..062b2606b1 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/Settings.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/Settings.kt @@ -11,17 +11,17 @@ import com.intellij.util.xmlb.annotations.OptionTag import org.utbot.common.FileUtil import org.utbot.engine.Mocker import org.utbot.framework.UtSettings -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.HangingTestsTimeout -import org.utbot.framework.codegen.Junit4 -import org.utbot.framework.codegen.Junit5 -import org.utbot.framework.codegen.MockitoStaticMocking -import org.utbot.framework.codegen.NoStaticMocking -import org.utbot.framework.codegen.ParametrizedTestSource -import org.utbot.framework.codegen.RuntimeExceptionTestsBehaviour -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.TestNg +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.HangingTestsTimeout +import org.utbot.framework.codegen.domain.Junit4 +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.MockitoStaticMocking +import org.utbot.framework.codegen.domain.NoStaticMocking +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.TestNg import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodeGenerationSettingItem import org.utbot.framework.plugin.api.CodegenLanguage diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt index c5f249524a..f49ee6c12e 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/settings/SettingsWindow.kt @@ -22,9 +22,9 @@ import javax.swing.JCheckBox import javax.swing.JPanel import kotlin.reflect.KClass import org.utbot.framework.UtSettings -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.HangingTestsTimeout -import org.utbot.framework.codegen.RuntimeExceptionTestsBehaviour +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.HangingTestsTimeout +import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour import org.utbot.framework.plugin.api.CodeGenerationSettingItem import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.JavaDocCommentStyle diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt index f270e5a504..15200394d4 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/GenerateTestsDialogWindow.kt @@ -97,24 +97,24 @@ import org.jetbrains.concurrency.Promise import org.jetbrains.concurrency.thenRun import org.utbot.common.PathUtil.toPath import org.utbot.framework.UtSettings -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.Junit4 -import org.utbot.framework.codegen.Junit5 -import org.utbot.framework.codegen.MockitoStaticMocking -import org.utbot.framework.codegen.NoStaticMocking -import org.utbot.framework.codegen.ParametrizedTestSource -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.TestNg -import org.utbot.framework.codegen.model.util.MOCKITO_EXTENSIONS_FILE_CONTENT -import org.utbot.framework.codegen.model.util.MOCKITO_EXTENSIONS_FOLDER -import org.utbot.framework.codegen.model.util.MOCKITO_MOCKMAKER_FILE_NAME +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.Junit4 +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.MockitoStaticMocking +import org.utbot.framework.codegen.domain.NoStaticMocking +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.TestNg import org.utbot.framework.plugin.api.CodeGenerationSettingItem import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.MockFramework import org.utbot.framework.plugin.api.MockFramework.MOCKITO import org.utbot.framework.plugin.api.MockStrategyApi import org.utbot.framework.plugin.api.TreatOverflowAsError +import org.utbot.framework.plugin.api.utils.MOCKITO_EXTENSIONS_FILE_CONTENT +import org.utbot.framework.plugin.api.utils.MOCKITO_EXTENSIONS_FOLDER +import org.utbot.framework.plugin.api.utils.MOCKITO_MOCKMAKER_FILE_NAME import org.utbot.framework.util.Conflict import org.utbot.intellij.plugin.models.GenerateTestsModel import org.utbot.intellij.plugin.models.id diff --git a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/utils/LibraryMatcher.kt b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/utils/LibraryMatcher.kt index e6ae80afdc..7c49ee9070 100644 --- a/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/utils/LibraryMatcher.kt +++ b/utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/utils/LibraryMatcher.kt @@ -1,13 +1,13 @@ package org.utbot.intellij.plugin.ui.utils -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.model.util.patterns +import org.utbot.framework.codegen.domain.TestFramework import org.utbot.framework.plugin.api.MockFramework import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project import com.intellij.openapi.roots.LibraryOrderEntry -import org.utbot.framework.codegen.model.util.parametrizedTestsPatterns -import org.utbot.framework.codegen.model.util.Patterns +import org.utbot.framework.plugin.api.utils.Patterns +import org.utbot.framework.plugin.api.utils.parametrizedTestsPatterns +import org.utbot.framework.plugin.api.utils.patterns fun findFrameworkLibrary( project: Project, diff --git a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/ClassUnderTest.kt b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/ClassUnderTest.kt index cf0898df6c..2a3caae4f4 100644 --- a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/ClassUnderTest.kt +++ b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/ClassUnderTest.kt @@ -1,7 +1,6 @@ package org.utbot.contest import org.utbot.common.FileUtil -import org.utbot.framework.codegen.model.util.createTestClassName import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.util.utContext import java.io.File @@ -53,5 +52,12 @@ class ClassUnderTest( "\n]" } - + /** + * Creates a name of test class. + * We need the name in code and the name of test class file be similar. + * On this way we need to avoid symbols like '$'. + */ + private fun createTestClassName(name: String): String = name + .substringAfterLast('.') + .replace('\$', '_') } \ No newline at end of file diff --git a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/Contest.kt b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/Contest.kt index 8e2646d1e0..01541d8394 100644 --- a/utbot-junit-contest/src/main/kotlin/org/utbot/contest/Contest.kt +++ b/utbot-junit-contest/src/main/kotlin/org/utbot/contest/Contest.kt @@ -10,10 +10,10 @@ import org.utbot.common.isAbstract import org.utbot.engine.EngineController import org.utbot.framework.TestSelectionStrategyType import org.utbot.framework.UtSettings -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.junitByVersion -import org.utbot.framework.codegen.model.CodeGenerator +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.junitByVersion +import org.utbot.framework.codegen.CodeGenerator import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.Coverage import org.utbot.framework.plugin.api.ExecutableId diff --git a/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProvider.kt b/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProvider.kt index 7864898ad1..77e1e6bdc1 100644 --- a/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProvider.kt +++ b/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProvider.kt @@ -1,8 +1,8 @@ package org.utbot.maven.plugin.extension -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.TestFramework +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.MockFramework diff --git a/utbot-maven/src/test/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProviderTest.kt b/utbot-maven/src/test/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProviderTest.kt index 3e2663dbf2..671c5dd7d6 100644 --- a/utbot-maven/src/test/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProviderTest.kt +++ b/utbot-maven/src/test/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProviderTest.kt @@ -5,7 +5,9 @@ import org.apache.maven.project.MavenProject import org.junit.jupiter.api.* import org.utbot.common.PathUtil.toPath import org.utbot.engine.Mocker -import org.utbot.framework.codegen.* +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.MockitoStaticMocking import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.MockFramework diff --git a/utbot-python/src/main/kotlin/org/utbot/python/PythonTestGenerationProcessor.kt b/utbot-python/src/main/kotlin/org/utbot/python/PythonTestGenerationProcessor.kt index f5df5ac24a..ea957ad3c2 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/PythonTestGenerationProcessor.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/PythonTestGenerationProcessor.kt @@ -5,8 +5,8 @@ import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import org.utbot.framework.codegen.PythonSysPathImport import org.utbot.framework.codegen.PythonSystemImport import org.utbot.framework.codegen.PythonUserImport -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.model.constructor.CgMethodTestSet +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.models.CgMethodTestSet import org.utbot.framework.plugin.api.ExecutableId import org.utbot.framework.plugin.api.UtExecutionSuccess import org.utbot.framework.plugin.api.util.UtContext diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/PythonCgLanguageAssistant.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/PythonCgLanguageAssistant.kt index 6f245175f0..b30163157c 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/PythonCgLanguageAssistant.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/PythonCgLanguageAssistant.kt @@ -1,11 +1,11 @@ package org.utbot.python.framework.codegen -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.tree.CgVariable -import org.utbot.framework.codegen.model.util.CgPrinter -import org.utbot.framework.codegen.model.visitor.CgAbstractRenderer -import org.utbot.framework.codegen.model.visitor.CgRendererContext -import org.utbot.framework.plugin.api.CgLanguageAssistant +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.renderer.CgPrinter +import org.utbot.framework.codegen.renderer.CgAbstractRenderer +import org.utbot.framework.codegen.renderer.CgRendererContext +import org.utbot.framework.codegen.services.language.CgLanguageAssistant import org.utbot.framework.plugin.api.ClassId import org.utbot.python.framework.codegen.model.constructor.name.PythonCgNameGenerator import org.utbot.python.framework.codegen.model.constructor.tree.PythonCgCallableAccessManagerImpl diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/PythonTestFrameworkManager.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/PythonTestFrameworkManager.kt index d649b56ffe..312b94cc6a 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/PythonTestFrameworkManager.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/PythonTestFrameworkManager.kt @@ -1,7 +1,7 @@ package org.utbot.python.framework.codegen -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.plugin.api.LanguageTestFrameworkManager +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.services.language.LanguageTestFrameworkManager import org.utbot.python.framework.codegen.model.Pytest import org.utbot.python.framework.codegen.model.Unittest import org.utbot.python.framework.codegen.model.constructor.tree.PytestManager diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonCodeGenerator.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonCodeGenerator.kt index 21963b35eb..324ecaec97 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonCodeGenerator.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonCodeGenerator.kt @@ -1,14 +1,19 @@ package org.utbot.python.framework.codegen.model -import org.utbot.framework.codegen.* -import org.utbot.framework.codegen.model.CodeGenerator -import org.utbot.framework.codegen.model.CodeGeneratorResult - -import org.utbot.framework.codegen.model.constructor.CgMethodTestSet -import org.utbot.framework.codegen.model.constructor.TestClassModel -import org.utbot.framework.codegen.model.constructor.context.CgContext +import org.utbot.framework.codegen.CodeGenerator +import org.utbot.framework.codegen.CodeGeneratorResult +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.HangingTestsTimeout +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.PythonImport +import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.models.CgMethodTestSet +import org.utbot.framework.codegen.domain.models.TestClassModel +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.renderer.CgAbstractRenderer import org.utbot.framework.plugin.api.ClassId -import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.ExecutableId import org.utbot.framework.plugin.api.MockFramework import org.utbot.python.framework.codegen.PythonCgLanguageAssistant @@ -66,10 +71,12 @@ class PythonCodeGenerator( context.withTestClassFileScope { val testClassModel = TestClassModel(classUnderTest, cgTestSets) context.collectedImports.addAll(importModules) - val cgTestClassConstructor = PythonCgTestClassConstructor(context) + val testClassFile = PythonCgTestClassConstructor(context).construct(testClassModel) + + val renderer = CgAbstractRenderer.makeRenderer(context) + testClassFile.accept(renderer) - val testClassFile = cgTestClassConstructor.construct(testClassModel) - CodeGeneratorResult(renderClassFile(testClassFile), cgTestClassConstructor.testsGenerationReport) + CodeGeneratorResult(renderer.toString(), testClassFile.testsGenerationReport) } } } \ No newline at end of file diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonDomain.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonDomain.kt index 4dba586516..ea350f069f 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonDomain.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonDomain.kt @@ -1,6 +1,6 @@ package org.utbot.python.framework.codegen.model -import org.utbot.framework.codegen.TestFramework +import org.utbot.framework.codegen.domain.TestFramework import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.MethodId diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonImports.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonImports.kt index e40c76b78e..6a1b291541 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonImports.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonImports.kt @@ -1,5 +1,7 @@ package org.utbot.framework.codegen +import org.utbot.framework.codegen.domain.Import + sealed class PythonImport(order: Int) : Import(order) { var importName: String = "" var moduleName: String? = null diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/name/PythonCgNameGenerator.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/name/PythonCgNameGenerator.kt index 94692fb9b4..62eaadc040 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/name/PythonCgNameGenerator.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/name/PythonCgNameGenerator.kt @@ -1,10 +1,10 @@ package org.utbot.python.framework.codegen.model.constructor.name import org.utbot.framework.codegen.PythonImport -import org.utbot.framework.codegen.isLanguageKeyword -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.name.CgNameGenerator +import org.utbot.framework.codegen.services.language.isLanguageKeyword +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.services.CgNameGenerator import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.ConstructorId import org.utbot.framework.plugin.api.ExecutableId diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgCallableAccessManager.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgCallableAccessManager.kt index 69ed440e93..2bf4ad38a3 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgCallableAccessManager.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgCallableAccessManager.kt @@ -1,12 +1,17 @@ package org.utbot.python.framework.codegen.model.constructor.tree -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.tree.CgCallableAccessManager -import org.utbot.framework.codegen.model.constructor.tree.CgIncompleteMethodCall -import org.utbot.framework.codegen.model.constructor.util.importIfNeeded -import org.utbot.framework.codegen.model.tree.* -import org.utbot.framework.codegen.model.util.resolve +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgConstructorCall +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgStaticFieldAccess +import org.utbot.framework.codegen.domain.models.CgThisInstance +import org.utbot.framework.codegen.services.access.CgCallableAccessManager +import org.utbot.framework.codegen.services.access.CgIncompleteMethodCall +import org.utbot.framework.codegen.tree.importIfNeeded +import org.utbot.framework.codegen.util.resolve import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.ConstructorId import org.utbot.framework.plugin.api.FieldId diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgMethodConstructor.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgMethodConstructor.kt index 4b78a4cc14..882c734117 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgMethodConstructor.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgMethodConstructor.kt @@ -1,8 +1,16 @@ package org.utbot.python.framework.codegen.model.constructor.tree -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.tree.CgMethodConstructor -import org.utbot.framework.codegen.model.tree.* +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.models.CgConstructorCall +import org.utbot.framework.codegen.domain.models.CgFieldAccess +import org.utbot.framework.codegen.domain.models.CgGetLength +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgReferenceExpression +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.tree.CgMethodConstructor import org.utbot.framework.fields.StateModificationInfo import org.utbot.framework.plugin.api.* import org.utbot.python.framework.api.python.* diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgStatementConstructor.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgStatementConstructor.kt index 0767de10eb..dc6d583114 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgStatementConstructor.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgStatementConstructor.kt @@ -1,17 +1,46 @@ package org.utbot.python.framework.codegen.model.constructor.tree import fj.data.Either -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.tree.CgCallableAccessManager -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy -import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor -import org.utbot.framework.codegen.model.constructor.util.ExpressionWithType -import org.utbot.framework.codegen.model.tree.* -import org.utbot.framework.codegen.model.util.buildExceptionHandler -import org.utbot.framework.codegen.model.util.isAccessibleFrom -import org.utbot.framework.codegen.model.util.resolve +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgAnnotation +import org.utbot.framework.codegen.domain.models.CgAnonymousFunction +import org.utbot.framework.codegen.domain.models.CgComment +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgEmptyLine +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgIfStatement +import org.utbot.framework.codegen.domain.models.CgInnerBlock +import org.utbot.framework.codegen.domain.models.CgIsInstance +import org.utbot.framework.codegen.domain.models.CgLogicalAnd +import org.utbot.framework.codegen.domain.models.CgLogicalOr +import org.utbot.framework.codegen.domain.models.CgMultilineComment +import org.utbot.framework.codegen.domain.models.CgMultipleArgsAnnotation +import org.utbot.framework.codegen.domain.models.CgNamedAnnotationArgument +import org.utbot.framework.codegen.domain.models.CgParameterDeclaration +import org.utbot.framework.codegen.domain.models.CgReturnStatement +import org.utbot.framework.codegen.domain.models.CgSingleArgAnnotation +import org.utbot.framework.codegen.domain.models.CgSingleLineComment +import org.utbot.framework.codegen.domain.models.CgThrowStatement +import org.utbot.framework.codegen.domain.models.CgTryCatch +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.services.access.CgCallableAccessManager +import org.utbot.framework.codegen.tree.CgForEachLoopBuilder +import org.utbot.framework.codegen.tree.CgForLoopBuilder +import org.utbot.framework.codegen.tree.CgStatementConstructor +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getCallableAccessManagerBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy +import org.utbot.framework.codegen.tree.ExpressionWithType +import org.utbot.framework.codegen.tree.buildAssignment +import org.utbot.framework.codegen.tree.buildCgForEachLoop +import org.utbot.framework.codegen.tree.buildDeclaration +import org.utbot.framework.codegen.tree.buildDoWhileLoop +import org.utbot.framework.codegen.tree.buildExceptionHandler +import org.utbot.framework.codegen.tree.buildForLoop +import org.utbot.framework.codegen.tree.buildTryCatch +import org.utbot.framework.codegen.tree.buildWhileLoop +import org.utbot.framework.codegen.util.isAccessibleFrom +import org.utbot.framework.codegen.util.resolve import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.ExecutableId import org.utbot.framework.plugin.api.FieldId diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgTestClassConstructor.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgTestClassConstructor.kt index 75f8403532..ad61615c51 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgTestClassConstructor.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgTestClassConstructor.kt @@ -1,10 +1,10 @@ package org.utbot.python.framework.codegen.model.constructor.tree -import org.utbot.framework.codegen.model.constructor.TestClassModel -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor -import org.utbot.framework.codegen.model.tree.CgClassFile -import org.utbot.framework.codegen.model.tree.buildClassFile +import org.utbot.framework.codegen.domain.models.TestClassModel +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.models.CgTestClassFile +import org.utbot.framework.codegen.tree.CgTestClassConstructor +import org.utbot.framework.codegen.tree.buildTestClassFile internal class PythonCgTestClassConstructor(context: CgContext) : CgTestClassConstructor(context) { override fun construct(testClassModel: TestClassModel): CgClassFile { diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgVariableConstructor.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgVariableConstructor.kt index 0a5b04163c..21d4072c86 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgVariableConstructor.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgVariableConstructor.kt @@ -1,12 +1,12 @@ package org.utbot.python.framework.codegen.model.constructor.tree -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor -import org.utbot.framework.codegen.model.constructor.tree.CgVariableConstructor -import org.utbot.framework.codegen.model.tree.CgConstructorCall -import org.utbot.framework.codegen.model.tree.CgLiteral -import org.utbot.framework.codegen.model.tree.CgValue -import org.utbot.framework.codegen.model.tree.CgVariable +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.models.CgConstructorCall +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.tree.CgTestClassConstructor +import org.utbot.framework.codegen.tree.CgVariableConstructor import org.utbot.framework.plugin.api.ConstructorId import org.utbot.framework.plugin.api.UtModel import org.utbot.python.framework.api.python.* diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonTestFrameworkManager.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonTestFrameworkManager.kt index 9ee31649ea..9e60783841 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonTestFrameworkManager.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonTestFrameworkManager.kt @@ -1,10 +1,16 @@ package org.utbot.python.framework.codegen.model.constructor.tree -import org.utbot.framework.codegen.model.constructor.TestClassContext -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.tree.TestFrameworkManager -import org.utbot.framework.codegen.model.tree.* -import org.utbot.framework.codegen.model.util.resolve +import org.utbot.framework.codegen.domain.context.TestClassContext +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.models.CgAnnotation +import org.utbot.framework.codegen.domain.models.CgEqualTo +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgMultipleArgsAnnotation +import org.utbot.framework.codegen.domain.models.CgNamedAnnotationArgument +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.services.framework.TestFrameworkManager +import org.utbot.framework.codegen.util.resolve import org.utbot.framework.plugin.api.BuiltinClassId import org.utbot.framework.plugin.api.ClassId import org.utbot.python.framework.api.python.util.pythonAnyClassId diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/util/ConstructorUtils.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/util/ConstructorUtils.kt index 222850ac89..67f67cce12 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/util/ConstructorUtils.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/util/ConstructorUtils.kt @@ -3,7 +3,7 @@ package org.utbot.python.framework.codegen.model.constructor.util import kotlinx.collections.immutable.PersistentList import kotlinx.collections.immutable.PersistentSet import org.utbot.framework.codegen.PythonUserImport -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner +import org.utbot.framework.codegen.domain.context.CgContextOwner import org.utbot.python.framework.api.python.PythonClassId import org.utbot.python.framework.api.python.PythonMethodId diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/visitor/CgPythonRenderer.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/visitor/CgPythonRenderer.kt index e3f1cd36f3..33267d82ae 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/visitor/CgPythonRenderer.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/visitor/CgPythonRenderer.kt @@ -5,13 +5,56 @@ import org.utbot.common.WorkaroundReason import org.utbot.common.workaround import org.utbot.framework.codegen.PythonImport import org.utbot.framework.codegen.PythonSysPathImport -import org.utbot.framework.codegen.RegularImport -import org.utbot.framework.codegen.StaticImport -import org.utbot.framework.codegen.model.tree.* -import org.utbot.framework.codegen.model.util.CgPrinter -import org.utbot.framework.codegen.model.util.CgPrinterImpl -import org.utbot.framework.codegen.model.visitor.CgAbstractRenderer -import org.utbot.framework.codegen.model.visitor.CgRendererContext +import org.utbot.framework.codegen.domain.RegularImport +import org.utbot.framework.codegen.domain.StaticImport +import org.utbot.framework.codegen.domain.models.CgAbstractMultilineComment +import org.utbot.framework.codegen.domain.models.CgAllocateArray +import org.utbot.framework.codegen.domain.models.CgAllocateInitializedArray +import org.utbot.framework.codegen.domain.models.CgAnonymousFunction +import org.utbot.framework.codegen.domain.models.CgArrayAnnotationArgument +import org.utbot.framework.codegen.domain.models.CgArrayInitializer +import org.utbot.framework.codegen.domain.models.CgClass +import org.utbot.framework.codegen.domain.models.CgClassBody +import org.utbot.framework.codegen.domain.models.CgClassFile +import org.utbot.framework.codegen.domain.models.CgCommentedAnnotation +import org.utbot.framework.codegen.domain.models.CgConstructorCall +import org.utbot.framework.codegen.domain.models.CgDeclaration +import org.utbot.framework.codegen.domain.models.CgDocumentationComment +import org.utbot.framework.codegen.domain.models.CgElement +import org.utbot.framework.codegen.domain.models.CgEqualTo +import org.utbot.framework.codegen.domain.models.CgErrorTestMethod +import org.utbot.framework.codegen.domain.models.CgErrorWrapper +import org.utbot.framework.codegen.domain.models.CgExecutableCall +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgForEachLoop +import org.utbot.framework.codegen.domain.models.CgForLoop +import org.utbot.framework.codegen.domain.models.CgGetJavaClass +import org.utbot.framework.codegen.domain.models.CgGetKotlinClass +import org.utbot.framework.codegen.domain.models.CgGetLength +import org.utbot.framework.codegen.domain.models.CgInnerBlock +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgMethod +import org.utbot.framework.codegen.domain.models.CgMethodCall +import org.utbot.framework.codegen.domain.models.CgMultilineComment +import org.utbot.framework.codegen.domain.models.CgMultipleArgsAnnotation +import org.utbot.framework.codegen.domain.models.CgNotNullAssertion +import org.utbot.framework.codegen.domain.models.CgParameterDeclaration +import org.utbot.framework.codegen.domain.models.CgParameterizedTestDataProviderMethod +import org.utbot.framework.codegen.domain.models.CgSingleArgAnnotation +import org.utbot.framework.codegen.domain.models.CgSingleLineComment +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgSwitchCase +import org.utbot.framework.codegen.domain.models.CgSwitchCaseLabel +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgThisInstance +import org.utbot.framework.codegen.domain.models.CgTripleSlashMultilineComment +import org.utbot.framework.codegen.domain.models.CgTryCatch +import org.utbot.framework.codegen.domain.models.CgTypeCast +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.renderer.CgPrinter +import org.utbot.framework.codegen.renderer.CgPrinterImpl +import org.utbot.framework.codegen.renderer.CgAbstractRenderer +import org.utbot.framework.codegen.renderer.CgRendererContext import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.TypeParameters import org.utbot.framework.plugin.api.WildcardTypeParameter diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/visitor/CgPythonVisitor.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/visitor/CgPythonVisitor.kt index ffc02d4f96..ed3f939b41 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/visitor/CgPythonVisitor.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/visitor/CgPythonVisitor.kt @@ -1,6 +1,6 @@ package org.utbot.python.framework.codegen.model.constructor.visitor -import org.utbot.framework.codegen.model.visitor.CgVisitor +import org.utbot.framework.codegen.renderer.CgVisitor import org.utbot.python.framework.codegen.model.tree.* interface CgPythonVisitor : CgVisitor { diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/tree/CgPythonElement.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/tree/CgPythonElement.kt index faafb23e9e..397ff84cfe 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/tree/CgPythonElement.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/tree/CgPythonElement.kt @@ -1,7 +1,12 @@ package org.utbot.python.framework.codegen.model.tree -import org.utbot.framework.codegen.model.tree.* -import org.utbot.framework.codegen.model.visitor.CgVisitor +import org.utbot.framework.codegen.domain.models.CgElement +import org.utbot.framework.codegen.domain.models.CgExpression +import org.utbot.framework.codegen.domain.models.CgLiteral +import org.utbot.framework.codegen.domain.models.CgStatement +import org.utbot.framework.codegen.domain.models.CgValue +import org.utbot.framework.codegen.domain.models.CgVariable +import org.utbot.framework.codegen.renderer.CgVisitor import org.utbot.framework.plugin.api.ClassId import org.utbot.python.framework.api.python.PythonClassId import org.utbot.python.framework.api.python.PythonTree diff --git a/utbot-testing/src/main/kotlin/org/utbot/testing/CheckersUtil.kt b/utbot-testing/src/main/kotlin/org/utbot/testing/CheckersUtil.kt index 91535184a7..9c70c616c0 100644 --- a/utbot-testing/src/main/kotlin/org/utbot/testing/CheckersUtil.kt +++ b/utbot-testing/src/main/kotlin/org/utbot/testing/CheckersUtil.kt @@ -1,14 +1,14 @@ package org.utbot.testing -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.Junit4 -import org.utbot.framework.codegen.MockitoStaticMocking -import org.utbot.framework.codegen.NoStaticMocking -import org.utbot.framework.codegen.ParametrizedTestSource -import org.utbot.framework.codegen.RuntimeExceptionTestsBehaviour -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.TestNg +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.Junit4 +import org.utbot.framework.codegen.domain.MockitoStaticMocking +import org.utbot.framework.codegen.domain.NoStaticMocking +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.RuntimeExceptionTestsBehaviour +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.domain.TestNg import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.MockFramework import org.utbot.framework.plugin.api.MockStrategyApi diff --git a/utbot-testing/src/main/kotlin/org/utbot/testing/CodeGenerationIntegrationTest.kt b/utbot-testing/src/main/kotlin/org/utbot/testing/CodeGenerationIntegrationTest.kt index fa35e08052..cadf472917 100644 --- a/utbot-testing/src/main/kotlin/org/utbot/testing/CodeGenerationIntegrationTest.kt +++ b/utbot-testing/src/main/kotlin/org/utbot/testing/CodeGenerationIntegrationTest.kt @@ -21,7 +21,7 @@ import org.junit.jupiter.api.extension.ExtensionContext import org.junit.jupiter.api.fail import org.junit.jupiter.engine.descriptor.ClassTestDescriptor import org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor -import org.utbot.framework.codegen.ParametrizedTestSource +import org.utbot.framework.codegen.domain.ParametrizedTestSource import java.nio.file.Path @TestInstance(TestInstance.Lifecycle.PER_CLASS) diff --git a/utbot-testing/src/main/kotlin/org/utbot/testing/CompilationAndRunUtils.kt b/utbot-testing/src/main/kotlin/org/utbot/testing/CompilationAndRunUtils.kt index 7c508b13af..69e9c5c061 100644 --- a/utbot-testing/src/main/kotlin/org/utbot/testing/CompilationAndRunUtils.kt +++ b/utbot-testing/src/main/kotlin/org/utbot/testing/CompilationAndRunUtils.kt @@ -4,8 +4,8 @@ import org.utbot.framework.plugin.api.CodegenLanguage import java.io.File import java.nio.file.Path import org.utbot.common.FileUtil -import org.utbot.framework.codegen.Junit5 -import org.utbot.framework.codegen.TestFramework +import org.utbot.framework.codegen.domain.Junit5 +import org.utbot.framework.codegen.domain.TestFramework data class ClassUnderTest( val testClassSimpleName: String, diff --git a/utbot-testing/src/main/kotlin/org/utbot/testing/TestCodeGeneratorPipeline.kt b/utbot-testing/src/main/kotlin/org/utbot/testing/TestCodeGeneratorPipeline.kt index 4da5ba2975..0544fc58ab 100644 --- a/utbot-testing/src/main/kotlin/org/utbot/testing/TestCodeGeneratorPipeline.kt +++ b/utbot-testing/src/main/kotlin/org/utbot/testing/TestCodeGeneratorPipeline.kt @@ -5,14 +5,14 @@ import org.junit.jupiter.api.Assertions.assertTrue import org.utbot.common.FileUtil import org.utbot.common.bracket import org.utbot.common.info -import org.utbot.framework.codegen.ForceStaticMocking -import org.utbot.framework.codegen.ParametrizedTestSource -import org.utbot.framework.codegen.StaticsMocking -import org.utbot.framework.codegen.TestFramework -import org.utbot.framework.codegen.model.CodeGenerator -import org.utbot.framework.codegen.model.CodeGeneratorResult -import org.utbot.framework.codegen.model.UtilClassKind -import org.utbot.framework.codegen.model.UtilClassKind.Companion.UT_UTILS_INSTANCE_NAME +import org.utbot.framework.codegen.CodeGenerator +import org.utbot.framework.codegen.CodeGeneratorResult +import org.utbot.framework.codegen.domain.ForceStaticMocking +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.StaticsMocking +import org.utbot.framework.codegen.domain.TestFramework +import org.utbot.framework.codegen.tree.ututils.UtilClassKind +import org.utbot.framework.codegen.tree.ututils.UtilClassKind.Companion.UT_UTILS_INSTANCE_NAME import org.utbot.framework.plugin.api.CodegenLanguage import org.utbot.framework.plugin.api.ExecutableId import org.utbot.framework.plugin.api.MockFramework From 74bdae049a262e107111cfb16524b98ba7dfe91d Mon Sep 17 00:00:00 2001 From: Egor Kulikov Date: Tue, 15 Nov 2022 12:49:23 +0300 Subject: [PATCH 2/2] Fix compilation after rebase --- .../utbot/framework/codegen/CodeGenerator.kt | 2 +- .../utbot/framework/codegen/tree/Builders.kt | 2 - .../codegen/tree/CgTestClassConstructor.kt | 63 ++++++++++--------- .../codegen/model/PythonCodeGenerator.kt | 6 +- .../tree/PythonCgTestClassConstructor.kt | 4 +- 5 files changed, 39 insertions(+), 38 deletions(-) diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/CodeGenerator.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/CodeGenerator.kt index 59300b8fba..243dd6cb8f 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/CodeGenerator.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/CodeGenerator.kt @@ -77,7 +77,7 @@ open class CodeGenerator( CodeGeneratorResult( generatedCode = renderer.toString(), utilClassKind = UtilClassKind.fromCgContextOrNull(context), - testsGenerationReport = testClassFile.testsGenerationReport + testsGenerationReport = astConstructor.testsGenerationReport ) } } diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/Builders.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/Builders.kt index aafc3c3bc4..70b7344bf8 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/Builders.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/Builders.kt @@ -24,13 +24,11 @@ import org.utbot.framework.codegen.domain.models.CgParameterizedTestDataProvider import org.utbot.framework.codegen.domain.models.CgReferenceExpression import org.utbot.framework.codegen.domain.models.CgStatement import org.utbot.framework.codegen.domain.models.CgStaticsRegion -import org.utbot.framework.codegen.domain.models.CgTestClassFile import org.utbot.framework.codegen.domain.models.CgTestMethod import org.utbot.framework.codegen.domain.models.CgTestMethodType import org.utbot.framework.codegen.domain.models.CgTryCatch import org.utbot.framework.codegen.domain.models.CgVariable import org.utbot.framework.codegen.domain.models.CgWhileLoop -import org.utbot.framework.codegen.reports.TestsGenerationReport import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.util.voidClassId diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgTestClassConstructor.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgTestClassConstructor.kt index 4f1eea4e6b..08ff0a478a 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgTestClassConstructor.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgTestClassConstructor.kt @@ -1,37 +1,38 @@ package org.utbot.framework.codegen.tree import org.utbot.framework.UtSettings -import org.utbot.framework.codegen.ParametrizedTestSource -import org.utbot.framework.codegen.model.constructor.CgMethodTestSet -import org.utbot.framework.codegen.model.constructor.TestClassModel -import org.utbot.framework.codegen.model.constructor.builtin.TestClassUtilMethodProvider -import org.utbot.framework.codegen.model.constructor.context.CgContext -import org.utbot.framework.codegen.model.constructor.context.CgContextOwner -import org.utbot.framework.codegen.model.constructor.name.CgNameGenerator -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.clearContextRelatedStorage -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getMethodConstructorBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy -import org.utbot.framework.codegen.model.constructor.tree.CgTestClassConstructor.CgComponents.getTestFrameworkManagerBy -import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor -import org.utbot.framework.codegen.model.tree.CgAuxiliaryClass -import org.utbot.framework.codegen.model.tree.CgMethodsCluster -import org.utbot.framework.codegen.model.tree.CgMethod -import org.utbot.framework.codegen.model.tree.CgRegion -import org.utbot.framework.codegen.model.tree.CgSimpleRegion -import org.utbot.framework.codegen.model.tree.CgStaticsRegion -import org.utbot.framework.codegen.model.tree.CgClass -import org.utbot.framework.codegen.model.tree.CgClassFile -import org.utbot.framework.codegen.model.tree.CgRealNestedClassesRegion -import org.utbot.framework.codegen.model.tree.CgTestMethod -import org.utbot.framework.codegen.model.tree.CgTestMethodCluster -import org.utbot.framework.codegen.model.tree.CgTripleSlashMultilineComment -import org.utbot.framework.codegen.model.tree.CgUtilEntity -import org.utbot.framework.codegen.model.tree.CgUtilMethod -import org.utbot.framework.codegen.model.tree.buildClass -import org.utbot.framework.codegen.model.tree.buildClassBody -import org.utbot.framework.codegen.model.tree.buildClassFile -import org.utbot.framework.codegen.model.visitor.importUtilMethodDependencies +import org.utbot.framework.codegen.domain.ParametrizedTestSource +import org.utbot.framework.codegen.domain.builtin.TestClassUtilMethodProvider +import org.utbot.framework.codegen.domain.context.CgContext +import org.utbot.framework.codegen.domain.context.CgContextOwner +import org.utbot.framework.codegen.domain.models.CgAuxiliaryClass +import org.utbot.framework.codegen.domain.models.CgClass +import org.utbot.framework.codegen.domain.models.CgClassFile +import org.utbot.framework.codegen.domain.models.CgMethod +import org.utbot.framework.codegen.domain.models.CgMethodTestSet +import org.utbot.framework.codegen.domain.models.CgMethodsCluster +import org.utbot.framework.codegen.domain.models.CgRealNestedClassesRegion +import org.utbot.framework.codegen.domain.models.CgRegion +import org.utbot.framework.codegen.domain.models.CgSimpleRegion +import org.utbot.framework.codegen.domain.models.CgStaticsRegion +import org.utbot.framework.codegen.domain.models.CgTestMethod +import org.utbot.framework.codegen.domain.models.CgTestMethodCluster +import org.utbot.framework.codegen.domain.models.CgTripleSlashMultilineComment +import org.utbot.framework.codegen.domain.models.CgUtilEntity +import org.utbot.framework.codegen.domain.models.CgUtilMethod +import org.utbot.framework.codegen.domain.models.TestClassModel +import org.utbot.framework.codegen.renderer.importUtilMethodDependencies +import org.utbot.framework.codegen.reports.TestsGenerationReport +import org.utbot.framework.codegen.services.CgNameGenerator +import org.utbot.framework.codegen.services.access.CgCallableAccessManager +import org.utbot.framework.codegen.services.framework.MockFrameworkManager +import org.utbot.framework.codegen.services.framework.TestFrameworkManager +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.clearContextRelatedStorage +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getMethodConstructorBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getNameGeneratorBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getStatementConstructorBy +import org.utbot.framework.codegen.tree.CgTestClassConstructor.CgComponents.getTestFrameworkManagerBy + import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.MethodId import org.utbot.framework.plugin.api.UtExecutionSuccess diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonCodeGenerator.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonCodeGenerator.kt index 324ecaec97..c9e07c4ee6 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonCodeGenerator.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/PythonCodeGenerator.kt @@ -71,12 +71,14 @@ class PythonCodeGenerator( context.withTestClassFileScope { val testClassModel = TestClassModel(classUnderTest, cgTestSets) context.collectedImports.addAll(importModules) - val testClassFile = PythonCgTestClassConstructor(context).construct(testClassModel) + val astConstructor = PythonCgTestClassConstructor(context) val renderer = CgAbstractRenderer.makeRenderer(context) + + val testClassFile = astConstructor.construct(testClassModel) testClassFile.accept(renderer) - CodeGeneratorResult(renderer.toString(), testClassFile.testsGenerationReport) + CodeGeneratorResult(renderer.toString(), astConstructor.testsGenerationReport) } } } \ No newline at end of file diff --git a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgTestClassConstructor.kt b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgTestClassConstructor.kt index ad61615c51..e73e003cb4 100644 --- a/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgTestClassConstructor.kt +++ b/utbot-python/src/main/kotlin/org/utbot/python/framework/codegen/model/constructor/tree/PythonCgTestClassConstructor.kt @@ -2,9 +2,9 @@ package org.utbot.python.framework.codegen.model.constructor.tree import org.utbot.framework.codegen.domain.models.TestClassModel import org.utbot.framework.codegen.domain.context.CgContext -import org.utbot.framework.codegen.domain.models.CgTestClassFile +import org.utbot.framework.codegen.domain.models.CgClassFile import org.utbot.framework.codegen.tree.CgTestClassConstructor -import org.utbot.framework.codegen.tree.buildTestClassFile +import org.utbot.framework.codegen.tree.buildClassFile internal class PythonCgTestClassConstructor(context: CgContext) : CgTestClassConstructor(context) { override fun construct(testClassModel: TestClassModel): CgClassFile {