Rebuild when language/api version is changed (JPS)

#KT-20757 fixed

Original commit: 913a997f24
This commit is contained in:
Alexey Tsvetkov
2017-11-22 18:38:04 +03:00
parent 4266515228
commit e06f002f45
5 changed files with 90 additions and 12 deletions
@@ -26,6 +26,7 @@ import com.intellij.testFramework.LightVirtualFile
import com.intellij.testFramework.UsefulTestCase
import com.intellij.util.io.URLUtil
import com.intellij.util.io.ZipUtil
import junit.framework.TestCase
import org.jetbrains.jps.ModuleChunk
import org.jetbrains.jps.api.CanceledStatus
import org.jetbrains.jps.builders.BuildResult
@@ -51,15 +52,19 @@ import org.jetbrains.jps.model.library.JpsOrderRootType
import org.jetbrains.jps.model.module.JpsModule
import org.jetbrains.jps.util.JpsPathUtil
import org.jetbrains.kotlin.cli.common.Usage
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
import org.jetbrains.kotlin.codegen.AsmUtil
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
import org.jetbrains.kotlin.config.ApiVersion
import org.jetbrains.kotlin.config.IncrementalCompilation
import org.jetbrains.kotlin.config.KotlinCompilerVersion.TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY
import org.jetbrains.kotlin.config.LanguageVersion
import org.jetbrains.kotlin.incremental.CacheVersion
import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.withIC
import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings
import org.jetbrains.kotlin.jps.build.KotlinJpsBuildTest.LibraryDependency.*
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
import org.jetbrains.kotlin.name.FqName
@@ -76,6 +81,8 @@ import java.net.URLClassLoader
import java.util.*
import java.util.regex.Pattern
import java.util.zip.ZipOutputStream
import kotlin.reflect.KMutableProperty1
import kotlin.reflect.KProperty1
class KotlinJpsBuildTestIncremental : KotlinJpsBuildTest() {
var isICEnabledBackup: Boolean = false
@@ -136,6 +143,40 @@ class KotlinJpsBuildTestIncremental : KotlinJpsBuildTest() {
packagePartClass("kotlinProject", "src/Bar.kt", "foo.MainKt"),
module("kotlinProject")))
}
@WorkingDir("LanguageOrApiVersionChanged")
fun testLanguageVersionChanged() {
languageOrApiVersionChanged(CommonCompilerArguments::languageVersion)
}
@WorkingDir("LanguageOrApiVersionChanged")
fun testApiVersionChanged() {
languageOrApiVersionChanged(CommonCompilerArguments::apiVersion)
}
private fun languageOrApiVersionChanged(versionProperty: KMutableProperty1<CommonCompilerArguments, String?>) {
initProject(JVM_MOCK_RUNTIME)
assertEquals(1, myProject.modules.size)
val module = myProject.modules.first()
val args = JpsKotlinCompilerSettings.getCommonCompilerArguments(module)
fun setVersion(newVersion: String) {
versionProperty.set(args, newVersion)
JpsKotlinCompilerSettings.setCommonCompilerArguments(myProject, args)
}
assertNull(args.apiVersion)
buildAllModules().assertSuccessful()
setVersion(LanguageVersion.LATEST_STABLE.versionString)
buildAllModules().assertSuccessful()
assertCompiled(KotlinBuilder.KOTLIN_BUILDER_NAME)
setVersion(LanguageVersion.KOTLIN_1_0.versionString)
buildAllModules().assertSuccessful()
assertCompiled(KotlinBuilder.KOTLIN_BUILDER_NAME, "src/Bar.kt", "src/Foo.kt")
}
}
open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() {
@@ -293,7 +334,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() {
override fun doGetProjectDir(): File = workDir
private fun initProject(libraryDependency: LibraryDependency = NONE) {
protected fun initProject(libraryDependency: LibraryDependency = NONE) {
addJdk(JDK_NAME)
loadProject(workDir.absolutePath + File.separator + PROJECT_NAME + ".ipr")