diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt index 41d20e83663..7dd5fb5a7cb 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt @@ -294,7 +294,7 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() val gradleSourceSets = ideModule.children.filter { it.data is GradleSourceSetData } as Collection> for (gradleSourceSetNode in gradleSourceSets) { val propertiesForSourceSet = - gradleModel.kotlinTaskProperties.filter { (k, v) -> gradleSourceSetNode.data.externalName == "$moduleNamePrefix:$k" } + gradleModel.kotlinTaskProperties.filter { (k, v) -> gradleSourceSetNode.data.id == "$moduleNamePrefix:$k" } .toList().singleOrNull() gradleSourceSetNode.children.forEach { dataNode -> val data = dataNode.data as? ContentRootData diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt new file mode 100644 index 00000000000..0a182eb622c --- /dev/null +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt @@ -0,0 +1,60 @@ +/* + * Copyright 2010-2019 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.gradle + +import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil +import com.intellij.openapi.module.ModuleManager +import com.intellij.openapi.roots.* +import com.intellij.openapi.roots.impl.ModulesOrderEnumerator +import com.intellij.openapi.util.text.StringUtil +import org.jetbrains.jps.model.java.JavaResourceRootType +import org.jetbrains.jps.model.java.JavaSourceRootType +import org.jetbrains.kotlin.idea.codeInsight.gradle.MultiplePluginVersionGradleImportingTestCase +import org.junit.Test + +class PackagePrefixImportingTest : MultiplePluginVersionGradleImportingTestCase() { + + @Test + fun testPackagePrefixNonMPP() { + configureByFiles() + importProject() + + checkProjectStructure( + project, + projectPath, + exhaustiveModuleList = true, + exhaustiveSourceSourceRootList = true, + exhaustiveDependencyList = false + ) { + module("project") { + } + module("project_main") { + sourceFolder("src/main/java", JavaSourceRootType.SOURCE, "package.prefix.main") + sourceFolder("src/main/kotlin", JavaSourceRootType.SOURCE, "package.prefix.main") + sourceFolder("src/main/resources", JavaResourceRootType.RESOURCE) + } + module("project_test") { + sourceFolder("src/test/java", JavaSourceRootType.TEST_SOURCE, "package.prefix.test") + sourceFolder("src/test/kotlin", JavaSourceRootType.TEST_SOURCE, "package.prefix.test") + sourceFolder("src/test/resources", JavaResourceRootType.TEST_RESOURCE) + } + } + } + + override fun importProject() { + val isCreateEmptyContentRootDirectories = currentExternalProjectSettings.isCreateEmptyContentRootDirectories + currentExternalProjectSettings.isCreateEmptyContentRootDirectories = true + try { + super.importProject() + } finally { + currentExternalProjectSettings.isCreateEmptyContentRootDirectories = isCreateEmptyContentRootDirectories + } + } + + override fun testDataDirName(): String { + return "packagePrefixImport" + } +} \ No newline at end of file diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt.183 b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt.183 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt.as33 b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt.as33 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt.as34 b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt.as34 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt.as35 b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt.as35 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt.as36 b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/PackagePrefixImportingTest.kt.as36 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt index 572c836aaf9..c19f4e89cf0 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt @@ -204,12 +204,19 @@ class ModuleInfo( expectedDependencyNames += moduleEntry.presentableName } - fun sourceFolder(pathInProject: String, rootType: JpsModuleSourceRootType<*>) { + private val ANY_PACKAGE_PREFIX = "any_package_prefix" + + fun sourceFolder(pathInProject: String, rootType: JpsModuleSourceRootType<*>, packagePrefix: String? = ANY_PACKAGE_PREFIX) { val sourceFolder = sourceFolderByPath[pathInProject] if (sourceFolder == null) { projectInfo.messageCollector.report("Module '${module.name}': No source folder found: '$pathInProject'") return } + if (packagePrefix != ANY_PACKAGE_PREFIX && sourceFolder.packagePrefix != packagePrefix) { + projectInfo.messageCollector.report( + "Module '${module.name}', source root '$pathInProject': Expected package prefix $packagePrefix doesn't match the actual one: ${sourceFolder.packagePrefix}" + ) + } expectedSourceRoots += pathInProject val actualRootType = sourceFolder.rootType if (actualRootType != rootType) { diff --git a/idea/testData/gradle/packagePrefixImport/packagePrefixNonMPP/build.gradle b/idea/testData/gradle/packagePrefixImport/packagePrefixNonMPP/build.gradle new file mode 100644 index 00000000000..a9681723f95 --- /dev/null +++ b/idea/testData/gradle/packagePrefixImport/packagePrefixNonMPP/build.gradle @@ -0,0 +1,28 @@ +buildscript { + repositories { + mavenCentral() + maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' } + } + + dependencies { + apply from: "include.gradle" + def kotlinVersion = gradleKotlinPluginVersion('1.3.20') + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + } +} + +apply plugin: 'kotlin' + +repositories { + mavenCentral() + maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' } +} + +compileKotlin { + javaPackagePrefix = "package.prefix.main" +} + +compileTestKotlin { + javaPackagePrefix = "package.prefix.test" +} +