Fixed import of package prefix in non-MPP projects

#KT-33038 Fixed
This commit is contained in:
Andrey Uskov
2019-07-30 14:32:58 +03:00
parent eedebcfe4c
commit a6f50c71bd
9 changed files with 97 additions and 2 deletions
@@ -294,7 +294,7 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension()
val gradleSourceSets = ideModule.children.filter { it.data is GradleSourceSetData } as Collection<DataNode<GradleSourceSetData>>
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
@@ -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"
}
}
@@ -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) {
@@ -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"
}