From 45b01f7fc443b9c2b3e299e2e3ebcd150cda1f0b Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 12 Mar 2020 12:58:23 +0300 Subject: [PATCH] Wizard: add module dependencies to modules from jvm -> jvm dependencies --- .../AbstractNewWizardProjectImportTest.kt | 7 +- .../wizard/ProjectImportingTestParameters.kt | 18 ----- ...mlNewWizardProjectImportTestGenerated.java | 30 ++++++++ .../expected/a/build.gradle | 20 +++++ .../expected/a/build.gradle.kts | 20 +++++ .../jvmToJvmDependency/expected/a/pom.xml | 77 +++++++++++++++++++ .../expected/b/build.gradle | 20 +++++ .../expected/b/build.gradle.kts | 20 +++++ .../jvmToJvmDependency/expected/b/pom.xml | 77 +++++++++++++++++++ .../jvmToJvmDependency/expected/build.gradle | 6 ++ .../expected/build.gradle.kts | 6 ++ .../expected/c/build.gradle | 18 +++++ .../expected/c/build.gradle.kts | 18 +++++ .../jvmToJvmDependency/expected/c/pom.xml | 67 ++++++++++++++++ .../expected/d/build.gradle | 19 +++++ .../expected/d/build.gradle.kts | 19 +++++ .../jvmToJvmDependency/expected/d/pom.xml | 72 +++++++++++++++++ .../jvmToJvmDependency/expected/pom.xml | 31 ++++++++ .../expected/settings.gradle | 9 +++ .../expected/settings.gradle.kts | 9 +++ .../jvmToJvmDependency/parameters.txt | 1 + .../jvmToJvmDependency/settings.yaml | 19 +++++ .../expected/b/build.gradle | 19 +++++ .../expected/b/build.gradle.kts | 19 +++++ .../expected/b/c/build.gradle | 19 +++++ .../expected/b/c/build.gradle.kts | 19 +++++ .../expected/b/c/pom.xml | 72 +++++++++++++++++ .../expected/b/pom.xml | 72 +++++++++++++++++ .../expected/build.gradle | 18 +++++ .../expected/build.gradle.kts | 18 +++++ .../expected/pom.xml | 67 ++++++++++++++++ .../expected/settings.gradle | 7 ++ .../expected/settings.gradle.kts | 7 ++ .../parameters.txt | 1 + .../settings.yaml | 15 ++++ .../cli/AbstractBuildFileGenerationTest.kt | 17 ++-- .../cli/ProjectImportingTestParameters.kt | 17 ++++ .../YamlBuildFileGenerationTestGenerated.java | 10 +++ .../tools/projectWizard/cli/testUtils.kt | 19 +++-- .../core/entity/SettingValidator.kt | 4 +- .../kotlin/tools/projectWizard/core/errors.kt | 8 +- .../AndroidModuleConfigurator.kt | 10 +-- ...AndroidSinglePlatformModuleConfigurator.kt | 8 +- .../IOSModuleConfigurator.kt | 4 +- .../JsModuleConfigurator.kt | 6 +- .../moduleConfigurators/ModuleConfigurator.kt | 14 ++-- .../ModuleConfiguratorWithTests.kt | 4 +- .../NativeTargetConfigurator.kt | 4 +- .../moduleConfigurators/configurators.kt | 8 +- .../plugins/kotlin/KotlinPlugin.kt | 18 ++++- .../plugins/kotlin/ModulesToIRsConverter.kt | 62 ++++++--------- .../settings/buildsystem/Module.kt | 14 +++- .../settings/buildsystem/ModuleDependency.kt | 54 +++++++++++++ .../settings/buildsystem/ModuleReference.kt | 29 +++++++ .../settings/buildsystem/Sourceset.kt | 16 +++- 55 files changed, 1157 insertions(+), 105 deletions(-) delete mode 100644 idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/ProjectImportingTestParameters.kt create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/build.gradle create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/build.gradle.kts create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/pom.xml create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/build.gradle create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/build.gradle.kts create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/pom.xml create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/build.gradle create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/build.gradle.kts create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/build.gradle create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/build.gradle.kts create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/pom.xml create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/build.gradle create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/build.gradle.kts create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/pom.xml create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/pom.xml create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/settings.gradle create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/settings.gradle.kts create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/parameters.txt create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/settings.yaml create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/build.gradle create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/build.gradle.kts create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/build.gradle create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/build.gradle.kts create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/pom.xml create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/pom.xml create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/build.gradle create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/build.gradle.kts create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/pom.xml create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/settings.gradle create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/settings.gradle.kts create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/parameters.txt create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/settings.yaml create mode 100644 libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/ProjectImportingTestParameters.kt create mode 100644 libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleDependency.kt create mode 100644 libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleReference.kt diff --git a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractNewWizardProjectImportTest.kt b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractNewWizardProjectImportTest.kt index 4614a9315a3..8ec7409da2d 100644 --- a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractNewWizardProjectImportTest.kt +++ b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/AbstractNewWizardProjectImportTest.kt @@ -11,10 +11,7 @@ import com.intellij.openapi.projectRoots.SimpleJavaSdkType import com.intellij.testFramework.IdeaTestUtil import com.intellij.testFramework.PlatformTestCase import org.jetbrains.kotlin.test.testFramework.runWriteAction -import org.jetbrains.kotlin.tools.projectWizard.cli.BuildSystem -import org.jetbrains.kotlin.tools.projectWizard.cli.TestWizardService -import org.jetbrains.kotlin.tools.projectWizard.cli.assertSuccess -import org.jetbrains.kotlin.tools.projectWizard.cli.isGradle +import org.jetbrains.kotlin.tools.projectWizard.cli.* import org.jetbrains.kotlin.tools.projectWizard.core.service.Services import org.jetbrains.kotlin.tools.projectWizard.core.service.ServicesManager import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase @@ -64,7 +61,7 @@ abstract class AbstractNewWizardProjectImportTest : PlatformTestCase() { private fun doTest(directoryPath: String, buildSystem: BuildSystem) { val directory = Paths.get(directoryPath) - val parameters = ProjectImportingTestParameters.fromTestDataOrDefault(directory) + val parameters = DefaultTestParameters.fromTestDataOrDefault(directory) if (!parameters.runForMaven && buildSystem == BuildSystem.MAVEN) return val tempDirectory = Files.createTempDirectory(null) diff --git a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/ProjectImportingTestParameters.kt b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/ProjectImportingTestParameters.kt deleted file mode 100644 index 93606a28774..00000000000 --- a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/ProjectImportingTestParameters.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.tools.projectWizard.wizard - -import org.jetbrains.kotlin.tools.projectWizard.cli.TestParameters -import java.nio.file.Path - -data class ProjectImportingTestParameters(val runForMaven: Boolean = false) : TestParameters { - companion object { - fun fromTestDataOrDefault(directory: Path): ProjectImportingTestParameters = - TestParameters.fromTestDataOrDefault(directory, PARAMETERS_FILE_NAME) - - private const val PARAMETERS_FILE_NAME = "importParameters.txt" - } -} \ No newline at end of file diff --git a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlNewWizardProjectImportTestGenerated.java b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlNewWizardProjectImportTestGenerated.java index 3dcf263710e..6cf57a3ce78 100644 --- a/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlNewWizardProjectImportTestGenerated.java +++ b/idea/idea-new-project-wizard/tests/org/jetbrains/kotlin/tools/projectWizard/wizard/YamlNewWizardProjectImportTestGenerated.java @@ -50,6 +50,16 @@ public class YamlNewWizardProjectImportTestGenerated extends AbstractYamlNewWiza runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/"); } + @TestMetadata("jvmToJvmDependency") + public void testJvmToJvmDependency() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/"); + } + + @TestMetadata("jvmToJvmDependencyWithSingleRoot") + public void testJvmToJvmDependencyWithSingleRoot() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/"); + } + @TestMetadata("kotlinJvm") public void testKotlinJvm() throws Exception { runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/kotlinJvm/"); @@ -108,6 +118,16 @@ public class YamlNewWizardProjectImportTestGenerated extends AbstractYamlNewWiza runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/"); } + @TestMetadata("jvmToJvmDependency") + public void testJvmToJvmDependency() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/"); + } + + @TestMetadata("jvmToJvmDependencyWithSingleRoot") + public void testJvmToJvmDependencyWithSingleRoot() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/"); + } + @TestMetadata("kotlinJvm") public void testKotlinJvm() throws Exception { runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/kotlinJvm/"); @@ -166,6 +186,16 @@ public class YamlNewWizardProjectImportTestGenerated extends AbstractYamlNewWiza runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/"); } + @TestMetadata("jvmToJvmDependency") + public void testJvmToJvmDependency() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/"); + } + + @TestMetadata("jvmToJvmDependencyWithSingleRoot") + public void testJvmToJvmDependencyWithSingleRoot() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/"); + } + @TestMetadata("kotlinJvm") public void testKotlinJvm() throws Exception { runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/kotlinJvm/"); diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/build.gradle new file mode 100644 index 00000000000..93d656ba4c1 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/build.gradle @@ -0,0 +1,20 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id 'org.jetbrains.kotlin.jvm' version '1.3.70' +} +group = 'testGroupId' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} +dependencies { + implementation project(':b') + implementation project(':c') + testImplementation 'org.jetbrains.kotlin:kotlin-test-junit' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' +} +tasks.withType(KotlinCompile) { + kotlinOptions.jvmTarget = '1.8' +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/build.gradle.kts new file mode 100644 index 00000000000..385ef311cd0 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/build.gradle.kts @@ -0,0 +1,20 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") version "1.3.70" +} +group = "testGroupId" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} +dependencies { + implementation(project(":b")) + implementation(project(":c")) + testImplementation(kotlin("test-junit")) + implementation(kotlin("stdlib-jdk8")) +} +tasks.withType() { + kotlinOptions.jvmTarget = "1.8" +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/pom.xml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/pom.xml new file mode 100644 index 00000000000..5eeca73624d --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/a/pom.xml @@ -0,0 +1,77 @@ + + + 4.0.0 + + a + testGroupId + 1.0-SNAPSHOT + jar + + a + + + UTF-8 + official + 1.8 + + + + + mavenCentral + https://repo1.maven.org/maven2/ + + + + + src/main/kotlin + src/test/kotlin + + + org.jetbrains.kotlin + kotlin-maven-plugin + 1.3.70 + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + + + + + b + testGroupId + 1.0-SNAPSHOT + + + c + testGroupId + 1.0-SNAPSHOT + + + org.jetbrains.kotlin + kotlin-test-junit + 1.3.70 + test + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + 1.3.70 + + + \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/build.gradle new file mode 100644 index 00000000000..77487eb2a40 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/build.gradle @@ -0,0 +1,20 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id 'org.jetbrains.kotlin.jvm' version '1.3.70' +} +group = 'testGroupId' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} +dependencies { + implementation project(':c') + implementation project(':d') + testImplementation 'org.jetbrains.kotlin:kotlin-test-junit' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' +} +tasks.withType(KotlinCompile) { + kotlinOptions.jvmTarget = '1.8' +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/build.gradle.kts new file mode 100644 index 00000000000..06a6020b2dc --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/build.gradle.kts @@ -0,0 +1,20 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") version "1.3.70" +} +group = "testGroupId" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} +dependencies { + implementation(project(":c")) + implementation(project(":d")) + testImplementation(kotlin("test-junit")) + implementation(kotlin("stdlib-jdk8")) +} +tasks.withType() { + kotlinOptions.jvmTarget = "1.8" +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/pom.xml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/pom.xml new file mode 100644 index 00000000000..97199d88b0a --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/b/pom.xml @@ -0,0 +1,77 @@ + + + 4.0.0 + + b + testGroupId + 1.0-SNAPSHOT + jar + + b + + + UTF-8 + official + 1.8 + + + + + mavenCentral + https://repo1.maven.org/maven2/ + + + + + src/main/kotlin + src/test/kotlin + + + org.jetbrains.kotlin + kotlin-maven-plugin + 1.3.70 + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + + + + + c + testGroupId + 1.0-SNAPSHOT + + + d + testGroupId + 1.0-SNAPSHOT + + + org.jetbrains.kotlin + kotlin-test-junit + 1.3.70 + test + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + 1.3.70 + + + \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/build.gradle new file mode 100644 index 00000000000..dafeb336c4d --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/build.gradle @@ -0,0 +1,6 @@ +group = 'testGroupId' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/build.gradle.kts new file mode 100644 index 00000000000..bba1c3579c5 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/build.gradle.kts @@ -0,0 +1,6 @@ +group = "testGroupId" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/build.gradle new file mode 100644 index 00000000000..c2ed6dbd653 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/build.gradle @@ -0,0 +1,18 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id 'org.jetbrains.kotlin.jvm' version '1.3.70' +} +group = 'testGroupId' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} +dependencies { + testImplementation 'org.jetbrains.kotlin:kotlin-test-junit' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' +} +tasks.withType(KotlinCompile) { + kotlinOptions.jvmTarget = '1.8' +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/build.gradle.kts new file mode 100644 index 00000000000..60f35107652 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/build.gradle.kts @@ -0,0 +1,18 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") version "1.3.70" +} +group = "testGroupId" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} +dependencies { + testImplementation(kotlin("test-junit")) + implementation(kotlin("stdlib-jdk8")) +} +tasks.withType() { + kotlinOptions.jvmTarget = "1.8" +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/pom.xml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/pom.xml new file mode 100644 index 00000000000..0db6968ad53 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/c/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + c + testGroupId + 1.0-SNAPSHOT + jar + + c + + + UTF-8 + official + 1.8 + + + + + mavenCentral + https://repo1.maven.org/maven2/ + + + + + src/main/kotlin + src/test/kotlin + + + org.jetbrains.kotlin + kotlin-maven-plugin + 1.3.70 + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + + + + + org.jetbrains.kotlin + kotlin-test-junit + 1.3.70 + test + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + 1.3.70 + + + \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/build.gradle new file mode 100644 index 00000000000..5b0ca4a5346 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/build.gradle @@ -0,0 +1,19 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id 'org.jetbrains.kotlin.jvm' version '1.3.70' +} +group = 'testGroupId' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} +dependencies { + implementation project(':a') + testImplementation 'org.jetbrains.kotlin:kotlin-test-junit' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' +} +tasks.withType(KotlinCompile) { + kotlinOptions.jvmTarget = '1.8' +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/build.gradle.kts new file mode 100644 index 00000000000..f191f963633 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/build.gradle.kts @@ -0,0 +1,19 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") version "1.3.70" +} +group = "testGroupId" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} +dependencies { + implementation(project(":a")) + testImplementation(kotlin("test-junit")) + implementation(kotlin("stdlib-jdk8")) +} +tasks.withType() { + kotlinOptions.jvmTarget = "1.8" +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/pom.xml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/pom.xml new file mode 100644 index 00000000000..8094ef7f599 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/d/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + d + testGroupId + 1.0-SNAPSHOT + jar + + d + + + UTF-8 + official + 1.8 + + + + + mavenCentral + https://repo1.maven.org/maven2/ + + + + + src/main/kotlin + src/test/kotlin + + + org.jetbrains.kotlin + kotlin-maven-plugin + 1.3.70 + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + + + + + a + testGroupId + 1.0-SNAPSHOT + + + org.jetbrains.kotlin + kotlin-test-junit + 1.3.70 + test + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + 1.3.70 + + + \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/pom.xml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/pom.xml new file mode 100644 index 00000000000..4c5644b0629 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + testArtifactId + testGroupId + 1.0-SNAPSHOT + jar + + generatedProject + + + UTF-8 + official + + + + + mavenCentral + https://repo1.maven.org/maven2/ + + + + a + b + c + d + + \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/settings.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/settings.gradle new file mode 100644 index 00000000000..fdd1dd6a2b0 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/settings.gradle @@ -0,0 +1,9 @@ + +rootProject.name = 'generatedProject' + + +include(':a') +include(':b') +include(':c') +include(':d') + diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/settings.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/settings.gradle.kts new file mode 100644 index 00000000000..db599418e37 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/expected/settings.gradle.kts @@ -0,0 +1,9 @@ + +rootProject.name = "generatedProject" + + +include(":a") +include(":b") +include(":c") +include(":d") + diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/parameters.txt b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/parameters.txt new file mode 100644 index 00000000000..f14bef2e838 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/parameters.txt @@ -0,0 +1 @@ +// runForMaven true \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/settings.yaml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/settings.yaml new file mode 100644 index 00000000000..870ef5d5886 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/settings.yaml @@ -0,0 +1,19 @@ +kotlin: + projectKind: Singleplatform + modules: + - type: JVM Module + name: a + dependencies: + - b + - c + - type: JVM Module + name: b + dependencies: + - c + - d + - type: JVM Module + name: c + - type: JVM Module + name: d + dependencies: + - a \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/build.gradle new file mode 100644 index 00000000000..2b957b85802 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/build.gradle @@ -0,0 +1,19 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id 'org.jetbrains.kotlin.jvm' +} +group = 'testGroupId' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} +dependencies { + rootProject + testImplementation 'org.jetbrains.kotlin:kotlin-test-junit' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' +} +tasks.withType(KotlinCompile) { + kotlinOptions.jvmTarget = '1.8' +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/build.gradle.kts new file mode 100644 index 00000000000..c7e1454c8aa --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/build.gradle.kts @@ -0,0 +1,19 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") +} +group = "testGroupId" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} +dependencies { + rootProject + testImplementation(kotlin("test-junit")) + implementation(kotlin("stdlib-jdk8")) +} +tasks.withType() { + kotlinOptions.jvmTarget = "1.8" +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/build.gradle new file mode 100644 index 00000000000..5898594cd3d --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/build.gradle @@ -0,0 +1,19 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id 'org.jetbrains.kotlin.jvm' +} +group = 'testGroupId' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} +dependencies { + implementation project(':b') + testImplementation 'org.jetbrains.kotlin:kotlin-test-junit' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' +} +tasks.withType(KotlinCompile) { + kotlinOptions.jvmTarget = '1.8' +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/build.gradle.kts new file mode 100644 index 00000000000..a9df99c2655 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/build.gradle.kts @@ -0,0 +1,19 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") +} +group = "testGroupId" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} +dependencies { + implementation(project(":b")) + testImplementation(kotlin("test-junit")) + implementation(kotlin("stdlib-jdk8")) +} +tasks.withType() { + kotlinOptions.jvmTarget = "1.8" +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/pom.xml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/pom.xml new file mode 100644 index 00000000000..33f48980c05 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/c/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + c + testGroupId + 1.0-SNAPSHOT + jar + + c + + + UTF-8 + official + 1.8 + + + + + mavenCentral + https://repo1.maven.org/maven2/ + + + + + src/main/kotlin + src/test/kotlin + + + org.jetbrains.kotlin + kotlin-maven-plugin + 1.3.70 + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + + + + + b + testGroupId + 1.0-SNAPSHOT + + + org.jetbrains.kotlin + kotlin-test-junit + 1.3.70 + test + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + 1.3.70 + + + \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/pom.xml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/pom.xml new file mode 100644 index 00000000000..73cac23ad20 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/b/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + b + testGroupId + 1.0-SNAPSHOT + jar + + b + + + UTF-8 + official + 1.8 + + + + + mavenCentral + https://repo1.maven.org/maven2/ + + + + + src/main/kotlin + src/test/kotlin + + + org.jetbrains.kotlin + kotlin-maven-plugin + 1.3.70 + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + + + + + a + testGroupId + 1.0-SNAPSHOT + + + org.jetbrains.kotlin + kotlin-test-junit + 1.3.70 + test + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + 1.3.70 + + + \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/build.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/build.gradle new file mode 100644 index 00000000000..c2ed6dbd653 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/build.gradle @@ -0,0 +1,18 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id 'org.jetbrains.kotlin.jvm' version '1.3.70' +} +group = 'testGroupId' +version = '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} +dependencies { + testImplementation 'org.jetbrains.kotlin:kotlin-test-junit' + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' +} +tasks.withType(KotlinCompile) { + kotlinOptions.jvmTarget = '1.8' +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/build.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/build.gradle.kts new file mode 100644 index 00000000000..60f35107652 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/build.gradle.kts @@ -0,0 +1,18 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") version "1.3.70" +} +group = "testGroupId" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} +dependencies { + testImplementation(kotlin("test-junit")) + implementation(kotlin("stdlib-jdk8")) +} +tasks.withType() { + kotlinOptions.jvmTarget = "1.8" +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/pom.xml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/pom.xml new file mode 100644 index 00000000000..ac7ca4d9f43 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + a + testGroupId + 1.0-SNAPSHOT + jar + + a + + + UTF-8 + official + 1.8 + + + + + mavenCentral + https://repo1.maven.org/maven2/ + + + + + src/main/kotlin + src/test/kotlin + + + org.jetbrains.kotlin + kotlin-maven-plugin + 1.3.70 + + + compile + compile + + compile + + + + test-compile + test-compile + + test-compile + + + + + + + + + org.jetbrains.kotlin + kotlin-test-junit + 1.3.70 + test + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + 1.3.70 + + + \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/settings.gradle b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/settings.gradle new file mode 100644 index 00000000000..54d5e027a92 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/settings.gradle @@ -0,0 +1,7 @@ + +rootProject.name = 'generatedProject' + + +include(':b:c') +include(':b') + diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/settings.gradle.kts b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/settings.gradle.kts new file mode 100644 index 00000000000..7396c6bc77e --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/expected/settings.gradle.kts @@ -0,0 +1,7 @@ + +rootProject.name = "generatedProject" + + +include(":b:c") +include(":b") + diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/parameters.txt b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/parameters.txt new file mode 100644 index 00000000000..f14bef2e838 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/parameters.txt @@ -0,0 +1 @@ +// runForMaven true \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/settings.yaml b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/settings.yaml new file mode 100644 index 00000000000..8763fd0d5a7 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/settings.yaml @@ -0,0 +1,15 @@ +kotlin: + projectKind: Singleplatform + modules: + - type: JVM Module + name: a + subModules: + - type: JVM Module + name: b + dependencies: + - a + subModules: + - type: JVM Module + name: c + dependencies: + - a.b \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractBuildFileGenerationTest.kt b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractBuildFileGenerationTest.kt index 3a7850c38aa..c6884624566 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractBuildFileGenerationTest.kt +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/AbstractBuildFileGenerationTest.kt @@ -19,12 +19,17 @@ abstract class AbstractBuildFileGenerationTest : UsefulTestCase() { fun doTest(directoryPath: String) { val directory = Paths.get(directoryPath) - val expectedDirectory = expectedDirectory(directory) - for (buildSystem in BuildSystem.values()) { - if (Files.exists(expectedDirectory / buildSystem.buildFileName)) { - doTest(directory, buildSystem) - } + val testParameters = DefaultTestParameters.fromTestDataOrDefault(directory) + + val buildSystemsToRunFor = listOfNotNull( + BuildSystem.GRADLE_KOTLIN_DSL, + BuildSystem.GRADLE_GROOVY_DSL, + if (testParameters.runForMaven) BuildSystem.MAVEN else null + ) + + for (buildSystem in buildSystemsToRunFor) { + doTest(directory, buildSystem) } } @@ -36,7 +41,7 @@ abstract class AbstractBuildFileGenerationTest : UsefulTestCase() { val expectedDirectory = expectedDirectory(directory) - compareFiles( + compareFilesAndGenerateMissing( expectedDirectory.allBuildFiles(buildSystem), expectedDirectory, tempDirectory.allBuildFiles(buildSystem), tempDirectory ) diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/ProjectImportingTestParameters.kt b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/ProjectImportingTestParameters.kt new file mode 100644 index 00000000000..d74f5429022 --- /dev/null +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/ProjectImportingTestParameters.kt @@ -0,0 +1,17 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.tools.projectWizard.cli + +import java.nio.file.Path + +data class DefaultTestParameters(val runForMaven: Boolean = false) : TestParameters { + companion object { + fun fromTestDataOrDefault(directory: Path): DefaultTestParameters = + TestParameters.fromTestDataOrDefault(directory, PARAMETERS_FILE_NAME) + + private const val PARAMETERS_FILE_NAME = "parameters.txt" + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/YamlBuildFileGenerationTestGenerated.java b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/YamlBuildFileGenerationTestGenerated.java index a205fa33cf0..41fc01b9d76 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/YamlBuildFileGenerationTestGenerated.java +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/YamlBuildFileGenerationTestGenerated.java @@ -48,6 +48,16 @@ public class YamlBuildFileGenerationTestGenerated extends AbstractYamlBuildFileG runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmTargetWithJava/"); } + @TestMetadata("jvmToJvmDependency") + public void testJvmToJvmDependency() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependency/"); + } + + @TestMetadata("jvmToJvmDependencyWithSingleRoot") + public void testJvmToJvmDependencyWithSingleRoot() throws Exception { + runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/jvmToJvmDependencyWithSingleRoot/"); + } + @TestMetadata("kotlinJvm") public void testKotlinJvm() throws Exception { runTest("libraries/tools/new-project-wizard/new-project-wizard-cli/testData/buildFileGeneration/kotlinJvm/"); diff --git a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/testUtils.kt b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/testUtils.kt index 472ee7644be..33c2fa53f23 100644 --- a/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/testUtils.kt +++ b/libraries/tools/new-project-wizard/new-project-wizard-cli/tests/org/jetbrains/kotlin/tools/projectWizard/cli/testUtils.kt @@ -10,9 +10,11 @@ import org.hamcrest.core.Is import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.tools.projectWizard.core.ExceptionError import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult +import org.jetbrains.kotlin.tools.projectWizard.core.div import org.jetbrains.kotlin.tools.projectWizard.core.onFailure import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType import org.junit.Assert.assertThat +import org.junit.Assert.fail import java.nio.file.Files import java.nio.file.Path import java.util.stream.Collectors @@ -24,17 +26,24 @@ internal fun Path.listFiles(filter: (Path) -> Boolean) = Files.isRegularFile(path) && filter(path) }.collect(Collectors.toList()).sorted() -internal fun compareFiles( +internal fun compareFilesAndGenerateMissing( expectedFiles: List, expectedDir: Path, actualFiles: List, actualDir: Path ) { val expectedFilesSorted = expectedFiles.sorted() val actualFilesSorted = actualFiles.sorted() - assertThat( - actualFilesSorted.map { actualDir.relativize(it) }, - Is.`is`(expectedFilesSorted.map { expectedDir.relativize(it) }) - ) + val missingFiles = + actualFiles.map(actualDir::relativize).toSet() - expectedFiles.map(expectedDir::relativize).toSet() + + if (missingFiles.isNotEmpty()) { + missingFiles.forEach { missingFile -> + val targetFile = expectedDir / missingFile + Files.createDirectories(targetFile.parent) + Files.copy(actualDir / missingFile, targetFile) + } + fail("The following files was missed: $missingFiles and thus was generated") + } for ((actualFile, expectedFile) in actualFilesSorted zip expectedFilesSorted) { KotlinTestUtils.assertEqualsToFile(expectedFile.toFile(), actualFile.readFile()) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt index df49d012ffe..a83e4969959 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/entity/SettingValidator.kt @@ -23,7 +23,6 @@ fun inValidatorContext(validator: Reader.(V) -> SettingValidator) = } - object StringValidators { fun shouldNotBeBlank(name: String) = settingValidator { value: String -> if (value.isBlank()) ValidationResult.ValidationError("${name.capitalize()} should not be blank ") @@ -69,6 +68,9 @@ sealed class ValidationResult { companion object { fun create(condition: Boolean, message: String) = if (condition) OK else ValidationError(message) + + inline fun create(condition: Boolean, message: () -> String) = + if (condition) OK else ValidationError(message()) } } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/errors.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/errors.kt index eb9d920545b..ddcc5fd41bc 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/errors.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/errors.kt @@ -1,6 +1,7 @@ package org.jetbrains.kotlin.tools.projectWizard.core import java.io.IOException +import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module abstract class Error { abstract val message: String @@ -55,4 +56,9 @@ data class ValidationError(val validationMessage: String) : Error() { get() = validationMessage.capitalize() } -data class ProjectImportingError(override val message: String) : Error() \ No newline at end of file +data class ProjectImportingError(override val message: String) : Error() + +data class InvalidModuleDependencyError(val from: Module, val to: Module) : Error() { + override val message: String + get() = "Invalid module dependency from module ${from.name} to ${to.name}" +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt index 85511a22fda..54368e9b6f4 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidModuleConfigurator.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.AndroidPlugin import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin @@ -49,7 +49,7 @@ interface AndroidModuleConfigurator : ModuleConfigurator, override fun createBuildFileIRs( reader: Reader, - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module ) = buildList { +GradleOnlyPluginByNameIR(reader.createAndroidPlugin(module).pluginName) @@ -73,7 +73,7 @@ interface AndroidModuleConfigurator : ModuleConfigurator, override fun createModuleIRs( reader: Reader, - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module ): List = buildList { @@ -85,7 +85,7 @@ interface AndroidModuleConfigurator : ModuleConfigurator, } - override fun createStdlibType(configurationData: ModuleConfigurationData, module: Module): StdlibType? = + override fun createStdlibType(configurationData: ModulesToIrConversionData, module: Module): StdlibType? = StdlibType.StdlibJdk7 object FileTemplateDescriptors { @@ -137,7 +137,7 @@ object AndroidTargetConfigurator : TargetConfigurator, } override fun Writer.runArbitraryTask( - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module, modulePath: Path ): TaskResult = computeM { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt index 1d78353b2ea..b04a26880fb 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/AndroidSinglePlatformModuleConfigurator.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.library.MavenArtifact -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.DefaultRepository import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module @@ -27,7 +27,7 @@ object AndroidSinglePlatformModuleConfigurator : override fun createBuildFileIRs( reader: Reader, - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module ) = buildList { +super.createBuildFileIRs(reader, configurationData, module) @@ -47,7 +47,7 @@ object AndroidSinglePlatformModuleConfigurator : override fun createModuleIRs( reader: Reader, - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module ) = buildList { +super.createModuleIRs(reader, configurationData, module) @@ -66,7 +66,7 @@ object AndroidSinglePlatformModuleConfigurator : } override fun Writer.runArbitraryTask( - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module, modulePath: Path ): TaskResult = computeM { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt index 1cb8cfb3c78..8c6a63204c6 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/IOSModuleConfigurator.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.templates.TemplatesPlugin import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind @@ -26,7 +26,7 @@ object IOSSinglePlatformModuleConfigurator : override val requiresRootBuildFile: Boolean = true override fun Writer.runArbitraryTask( - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module, modulePath: Path ): TaskResult { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt index 77a2aa926bc..9dfb50f0034 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/JsModuleConfigurator.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.tools.projectWizard.core.buildList import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.RawGradleIR -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.ModuleKind @@ -30,7 +30,7 @@ object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWi override val canContainSubModules = false - override fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? = + override fun createKotlinPluginIR(configurationData: ModulesToIrConversionData, module: Module): KotlinBuildSystemPluginIR? = KotlinBuildSystemPluginIR( KotlinBuildSystemPluginIR.Type.js, version = configurationData.kotlinVersion @@ -38,7 +38,7 @@ object JsSingleplatformModuleConfigurator : JSConfigurator, ModuleConfiguratorWi override fun createBuildFileIRs( reader: Reader, - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module ): List = buildList { +RawGradleIR { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt index eb5f0bb0e24..04d0bac7e92 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfigurator.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinBuildSystemPluginIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.StdlibType import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.correspondingStdlib import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module @@ -206,27 +206,27 @@ interface ModuleConfigurator : DisplayableSettingItem, EntitiesOwnerDescriptor { fun createBuildFileIRs( reader: Reader, - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module ): List = emptyList() fun createModuleIRs( reader: Reader, - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module ): List = emptyList() - fun createStdlibType(configurationData: ModuleConfigurationData, module: Module): StdlibType? = + fun createStdlibType(configurationData: ModulesToIrConversionData, module: Module): StdlibType? = safeAs()?.moduleType?.correspondingStdlib() - fun createRootBuildFileIrs(configurationData: ModuleConfigurationData): List = emptyList() - fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? = + fun createRootBuildFileIrs(configurationData: ModulesToIrConversionData): List = emptyList() + fun createKotlinPluginIR(configurationData: ModulesToIrConversionData, module: Module): KotlinBuildSystemPluginIR? = null fun Writer.runArbitraryTask( - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module, modulePath: Path ): TaskResult = UNIT_SUCCESS diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt index fdfda5dc0e4..9193ed5ec2c 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/ModuleConfiguratorWithTests.kt @@ -15,7 +15,7 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyType import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.KotlinArbitraryDependencyIR import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.KotlinPlugin -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module @@ -40,7 +40,7 @@ interface ModuleConfiguratorWithTests : ModuleConfiguratorWithSettings { override fun createModuleIRs( reader: Reader, - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module ): List = withSettingsOf(module) { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt index d5ac4f3e815..0d923554468 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/NativeTargetConfigurator.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.GradleImpo import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.RawGradleIR import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.gradle.multiplatform.NonDefaultTargetConfigurationIR import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleSubType import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.plugins.printer.GradlePrinter @@ -80,7 +80,7 @@ object NativeForCurrentSystemTarget : NativeTargetConfigurator, SingleCoexistenc override fun createBuildFileIRs( reader: Reader, - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module ): List = buildList { if (configurationData.buildSystemType == BuildSystemType.GradleGroovyDsl) { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt index 72f00cb1243..19373792acd 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/moduleConfigurators/configurators.kt @@ -12,7 +12,7 @@ import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.maven.MavenProper import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle -import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleConfigurationData +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModuleType import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.Module @@ -59,7 +59,7 @@ object MppModuleConfigurator : ModuleConfigurator { override val text = "Multiplatform" override val canContainSubModules = true - override fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? = + override fun createKotlinPluginIR(configurationData: ModulesToIrConversionData, module: Module): KotlinBuildSystemPluginIR? = KotlinBuildSystemPluginIR( KotlinBuildSystemPluginIR.Type.multiplatform, version = configurationData.kotlinVersion @@ -83,7 +83,7 @@ object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator, override val canContainSubModules = true - override fun createKotlinPluginIR(configurationData: ModuleConfigurationData, module: Module): KotlinBuildSystemPluginIR? = + override fun createKotlinPluginIR(configurationData: ModulesToIrConversionData, module: Module): KotlinBuildSystemPluginIR? = KotlinBuildSystemPluginIR( KotlinBuildSystemPluginIR.Type.jvm, version = configurationData.kotlinVersion @@ -92,7 +92,7 @@ object JvmSinglePlatformModuleConfigurator : JvmModuleConfigurator, override fun createBuildFileIRs( reader: Reader, - configurationData: ModuleConfigurationData, + configurationData: ModulesToIrConversionData, module: Module ): List = buildList { diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt index 5aa71fa0b77..8b1c38afa4d 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/KotlinPlugin.kt @@ -4,6 +4,7 @@ import org.jetbrains.kotlin.tools.projectWizard.Versions import org.jetbrains.kotlin.tools.projectWizard.core.* import org.jetbrains.kotlin.tools.projectWizard.core.entity.ValidationResult import org.jetbrains.kotlin.tools.projectWizard.core.entity.fold +import org.jetbrains.kotlin.tools.projectWizard.core.entity.settingValidator import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import org.jetbrains.kotlin.tools.projectWizard.core.service.KotlinVersionProviderService import org.jetbrains.kotlin.tools.projectWizard.core.service.kotlinVersionKind @@ -57,6 +58,8 @@ class KotlinPlugin(context: Context) : Plugin(context) { ) }.fold() } + + validate(moduleDependenciesValidator) } @@ -103,7 +106,7 @@ class KotlinPlugin(context: Context) : Plugin(context) { private fun Writer.createBuildFiles(modules: List): TaskResult> = with( ModulesToIRsConverter( - ModuleConfigurationData( + ModulesToIrConversionData( modules, projectPath, StructurePlugin::name.settingValue, @@ -120,6 +123,19 @@ class KotlinPlugin(context: Context) : Plugin(context) { // TODO update default versions private val DEFAULT_VERSION = Version.fromString("1.3.61") + private val moduleDependenciesValidator = settingValidator> { modules -> + val allModules = modules.withAllSubModules(includeSourcesets = true).toSet() + val allModulePaths = allModules.map(Module::path).toSet() + allModules.flatMap { module -> + module.dependencies.map { dependency -> + val isValidModule = when (dependency) { + is ModuleReference.ByPath -> dependency.path in allModulePaths + is ModuleReference.ByModule -> dependency.module in allModules + } + ValidationResult.create(isValidModule) { "Invalid module dependency $dependency of module ${module.path}" } + } + }.fold() + } } } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt index 64fa7ffc838..087c7bbe274 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/kotlin/ModulesToIRsConverter.kt @@ -14,7 +14,7 @@ import org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.settings.version.Version import java.nio.file.Path -data class ModuleConfigurationData( +data class ModulesToIrConversionData( val rootModules: List, val projectPath: Path, val projectName: String, @@ -24,6 +24,9 @@ data class ModuleConfigurationData( val writer: Writer ) { val allModules = rootModules.withAllSubModules() + val isSingleRootModuleMode = rootModules.size == 1 + + val moduleByPath = rootModules.withAllSubModules(includeSourcesets = true).associateBy(Module::path) } private data class ModulesToIrsState( @@ -38,9 +41,8 @@ private fun ModulesToIrsState.stateForSubModule(currentModulePath: Path) = ) class ModulesToIRsConverter( - val data: ModuleConfigurationData + val data: ModulesToIrConversionData ) { - private val isSingleRootModuleMode = data.rootModules.size == 1 // TODO get rid of mutable state private val rootBuildFileIrs = mutableListOf() @@ -53,7 +55,7 @@ class ModulesToIRsConverter( if ( // We want to have root build file for android or ios projects data.allModules.any { it.configurator.requiresRootBuildFile } ) return false - return isSingleRootModuleMode + return data.isSingleRootModuleMode } private fun calculatePathForModule(module: Module, rootPath: Path) = when { @@ -99,22 +101,26 @@ class ModulesToIRsConverter( module: Module, configurator: SinglePlatformModuleConfigurator, state: ModulesToIrsState - ): TaskResult> = with(data) { + ): TaskResult> = computeM { val modulePath = calculatePathForModule(module, state.parentPath) - writer.mutateProjectStructureByModuleConfigurator(module, modulePath) + val (moduleDependencies) = module.dependencies.mapCompute { dependency -> + val to = data.moduleByPath.getValue(dependency.path) + val (dependencyType) = ModuleDependencyType.getPossibleDependencyType(module, to) + .toResult { InvalidModuleDependencyError(module, to) } + dependencyType.createDependencyIrs(module, to, data) + }.sequence() + data.writer.mutateProjectStructureByModuleConfigurator(module, modulePath) val buildFileIR = run { if (!configurator.needCreateBuildFile) return@run null val dependenciesIRs = buildPersistenceList { - +module.sourcesets.flatMap { sourceset -> - sourceset.dependencies.map { it.toIR(sourceset.sourcesetType.toDependencyType()) } - } + +moduleDependencies with(configurator) { +createModuleIRs(this@createSinglePlatformModule, data, module) } addIfNotNull( configurator.createStdlibType(data, module)?.let { stdlibType -> KotlinStdlibDependencyIR( type = stdlibType, isInMppModule = false, - version = kotlinVersion, + version = data.kotlinVersion, dependencyType = DependencyType.MAIN ) } @@ -122,7 +128,7 @@ class ModulesToIRsConverter( } val moduleIr = SingleplatformModuleIR( - if (modulePath == projectPath) projectName else module.name, + if (modulePath == data.projectPath) data.projectName else module.name, modulePath, dependenciesIRs, module.template, @@ -131,7 +137,7 @@ class ModulesToIRsConverter( SingleplatformSourcesetIR( sourceset.sourcesetType, modulePath / Defaults.SRC_DIR / sourceset.sourcesetType.name, - sourceset.dependencies.map { it.toIR(sourceset.sourcesetType.toDependencyType()) }.toPersistentList(), + persistentListOf(), sourceset ) } @@ -143,17 +149,17 @@ class ModulesToIRsConverter( moduleIr, persistentListOf() ), - pomIr.copy(artifactId = module.name), + data.pomIr.copy(artifactId = module.name), createBuildFileIRs(module, state) ) } - return module.subModules.mapSequence { subModule -> - createBuildFileForModule( - subModule, - state.stateForSubModule(modulePath) - ) - }.map { it.flatten() } + module.subModules.mapSequence { subModule -> + createBuildFileForModule( + subModule, + state.stateForSubModule(modulePath) + ) + }.map { it.flatten() } .map { children -> buildFileIR?.let { children + it } ?: children } @@ -194,7 +200,6 @@ class ModulesToIRsConverter( val sourcesetss = target.sourcesets.map { sourceset -> val sourcesetName = target.name + sourceset.sourcesetType.name.capitalize() val sourcesetIrs = buildList { - +sourceset.dependencies.map { it.toIR(sourceset.sourcesetType.toDependencyType()) } if (sourceset.sourcesetType == SourcesetType.main) { addIfNotNull( target.configurator.createStdlibType(data, target)?.let { stdlibType -> @@ -257,21 +262,4 @@ class ModulesToIRsConverter( addIfNotNull(kotlinPlugin) +with(module.configurator) { createBuildFileIRs(this@createBuildFileIRs, data, module) } } - - private fun SourcesetDependency.toIR(type: DependencyType): DependencyIR = with(data) { - val path = when (this@toIR) { - is ModuleBasedSourcesetDependency -> module.path - is PathBasedSourcesetDependency -> path - } - val modulePomIr = when (this@toIR) { - is ModuleBasedSourcesetDependency -> pomIr.copy(artifactId = module.name) - is PathBasedSourcesetDependency -> pomIr.copy(artifactId = path.parts.last()) - } - return when { - isSingleRootModuleMode - && path.parts.singleOrNull() == rootModules.single().name - && buildSystemType.isGradle -> GradleRootProjectDependencyIR(type) - else -> ModuleDependencyIR(path, modulePomIr, type) - } - } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt index 24e8c35ce24..2388727d19e 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Module.kt @@ -1,5 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem +import kotlinx.collections.immutable.PersistentList import org.jetbrains.kotlin.tools.projectWizard.GeneratedIdentificator import org.jetbrains.kotlin.tools.projectWizard.Identificator import org.jetbrains.kotlin.tools.projectWizard.IdentificatorOwner @@ -33,6 +34,7 @@ class Module( var template: Template?, val sourcesets: List, subModules: List, + val dependencies: MutableList = mutableListOf(), var parent: Module? = null, override val identificator: Identificator = GeneratedIdentificator(name) ) : DisplayableSettingItem, Validatable, IdentificatorOwner { @@ -86,7 +88,16 @@ class Module( }.nullableValue() val sourcesets = listOf(Sourceset(SourcesetType.main), Sourceset(SourcesetType.test)) val (submodules) = map.parseValue(this, path, "subModules", listParser(Module.parser)) { emptyList() } - Module(name, configurator, template, sourcesets, submodules, identificator = identificator) + val (dependencies) = map.parseValue(this, path, "dependencies", listParser(ModuleReference.ByPath.parser)) { emptyList() } + Module( + name, + configurator, + template, + sourcesets, + submodules, + dependencies = dependencies.toMutableList(), + identificator = identificator + ) } private val moduleNameValidator = settingValidator { module -> @@ -138,6 +149,7 @@ val Module.path .asReversed() .let(::ModulePath) + val Sourceset.path get() = ModulePath(parent?.path?.parts.orEmpty() + sourcesetType.name) diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleDependency.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleDependency.kt new file mode 100644 index 00000000000..951bdea5c7e --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleDependency.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem + +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.BuildSystemIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.DependencyType +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.GradleRootProjectDependencyIR +import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleDependencyIR +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.JvmSinglePlatformModuleConfigurator +import org.jetbrains.kotlin.tools.projectWizard.moduleConfigurators.ModuleConfigurator +import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle +import org.jetbrains.kotlin.tools.projectWizard.plugins.kotlin.ModulesToIrConversionData +import kotlin.reflect.KClass + +sealed class ModuleDependencyType( + val from: KClass, + val to: KClass +) { + fun accepts(from: Module, to: Module) = + this.from.isInstance(from.configurator) && this.to.isInstance(to.configurator) + + open fun createDependencyIrs(from: Module, to: Module, data: ModulesToIrConversionData): BuildSystemIR { + val path = to.path + val modulePomIr = data.pomIr.copy(artifactId = to.name) + return when { + data.isSingleRootModuleMode + && to.path.parts.singleOrNull() == data.rootModules.single().name + && data.buildSystemType.isGradle -> GradleRootProjectDependencyIR(DependencyType.MAIN) + else -> ModuleDependencyIR( + path.considerSingleRootModuleMode(data.isSingleRootModuleMode), + modulePomIr, + DependencyType.MAIN + ) + } + } + + + object JVMSinglePlatformToJVMSinglePlatform : ModuleDependencyType( + from = JvmSinglePlatformModuleConfigurator::class, + to = JvmSinglePlatformModuleConfigurator::class + ) + + companion object { + private val ALL = listOf( + JVMSinglePlatformToJVMSinglePlatform + ) + + fun getPossibleDependencyType(from: Module, to: Module): ModuleDependencyType? = + ALL.firstOrNull { it.accepts(from, to) } + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleReference.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleReference.kt new file mode 100644 index 00000000000..d4aaf854cec --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/ModuleReference.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.tools.projectWizard.settings.buildsystem + +import org.jetbrains.kotlin.tools.projectWizard.core.parse +import org.jetbrains.kotlin.tools.projectWizard.core.valueParser + +sealed class ModuleReference { + abstract val path: ModulePath + + data class ByPath(override val path: ModulePath) : ModuleReference() { + companion object { + val parser = valueParser { value, path -> + val (modulePath) = ModulePath.parser.parse(this, value, path) + ByPath(modulePath) + } + } + + override fun toString(): String = path.toString() + } + + data class ByModule(val module: Module) : ModuleReference() { + override val path: ModulePath get() = module.path + override fun toString(): String = module.name + } +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Sourceset.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Sourceset.kt index caddfd9c329..50333392ec2 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Sourceset.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/settings/buildsystem/Sourceset.kt @@ -11,8 +11,22 @@ import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemP import org.jetbrains.kotlin.tools.projectWizard.settings.DisplayableSettingItem inline class ModulePath(val parts: List) { + constructor(path: String) : this(path.trim().split('.')) + fun asString(separator: String = ".") = parts.joinToString(separator) override fun toString(): String = asString() + + companion object { + val parser = valueParser { value, path -> + val (stringPath) = value.parseAs(path) + ModulePath(stringPath) + } + } +} + +fun ModulePath.considerSingleRootModuleMode(isSingleRootMode: Boolean) = when { + isSingleRootMode && parts.size > 1 -> ModulePath(parts.subList(1, parts.size)) + else -> this } @@ -55,7 +69,7 @@ class Sourceset( } @Suppress("EnumEntryName") -enum class SourcesetType: DisplayableSettingItem { +enum class SourcesetType : DisplayableSettingItem { main, test; override val text: String