diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinEntitiy.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinEntitiy.kt index 53a72f77c61..8c599bd09ce 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinEntitiy.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinEntitiy.kt @@ -12,4 +12,7 @@ annotation class IdeaKotlinEntity annotation class IdeaKotlinModel @IdeaKotlinEntity -annotation class IdeaKotlinService \ No newline at end of file +annotation class IdeaKotlinService + +@IdeaKotlinEntity +annotation class IdeaKotlinExtra \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/ReflectionTestUtils.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/ReflectionTestUtils.kt deleted file mode 100644 index 3649202a741..00000000000 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/ReflectionTestUtils.kt +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2010-2022 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.idea.tcs - -import org.reflections.Reflections -import kotlin.reflect.KClass - -object ReflectionTestUtils { - - const val ideaTcsPackage = "org.jetbrains.kotlin.gradle.idea.tcs" - val ideaTcsReflections = Reflections(ideaTcsPackage) - - const val kotlinPackage = "org.jetbrains.kotlin" - val kotlinReflections = Reflections(kotlinPackage) - - fun KClass<*>.displayName() = java.name - .removePrefix("org.jetbrains.kotlin") - .removePrefix(".gradle") - .removePrefix(".idea") - .removePrefix(".tcs") - .removePrefix(".") -} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/GradleProjectBackwardsCompatibilityDeserializationTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/GradleProjectBackwardsCompatibilityDeserializationTest.kt similarity index 91% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/GradleProjectBackwardsCompatibilityDeserializationTest.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/GradleProjectBackwardsCompatibilityDeserializationTest.kt index f7f8157c496..01fa6c2209e 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/GradleProjectBackwardsCompatibilityDeserializationTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/GradleProjectBackwardsCompatibilityDeserializationTest.kt @@ -3,19 +3,22 @@ * 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.idea.kpm +package org.jetbrains.kotlin.gradle.idea.test.kpm import org.gradle.api.internal.project.ProjectInternal import org.gradle.kotlin.dsl.create import org.gradle.testfixtures.ProjectBuilder +import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmFragment +import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmProject +import org.jetbrains.kotlin.gradle.idea.kpm.name import org.jetbrains.kotlin.gradle.idea.testFixtures.kpm.TestIdeaKpmExtra import org.jetbrains.kotlin.gradle.idea.testFixtures.serialize.TestIdeaExtrasSerializationExtension.anySerializableKey import org.jetbrains.kotlin.gradle.idea.testFixtures.utils.copy import org.jetbrains.kotlin.gradle.idea.testFixtures.utils.createProxyInstance import org.jetbrains.kotlin.gradle.idea.testFixtures.utils.unwrapProxyInstance -import org.jetbrains.kotlin.gradle.idea.testUtils.buildIdeaKpmProject -import org.jetbrains.kotlin.gradle.idea.testUtils.createKpmProject -import org.jetbrains.kotlin.gradle.idea.testUtils.deserializeIdeaKpmProjectWithBackwardsCompatibleClasses +import org.jetbrains.kotlin.gradle.idea.test.testUtils.buildIdeaKpmProject +import org.jetbrains.kotlin.gradle.idea.test.testUtils.createKpmProject +import org.jetbrains.kotlin.gradle.idea.test.testUtils.deserializeIdeaKpmProjectWithBackwardsCompatibleClasses import org.jetbrains.kotlin.gradle.plugin.KotlinPm20PluginWrapper import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmIosX64Variant import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmLinuxX64Variant diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/IdeaKpmProjectBackwardsCompatibilityDeserializationTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/IdeaKpmProjectBackwardsCompatibilityDeserializationTest.kt similarity index 85% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/IdeaKpmProjectBackwardsCompatibilityDeserializationTest.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/IdeaKpmProjectBackwardsCompatibilityDeserializationTest.kt index c8d7678b2da..dc404877b7e 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/IdeaKpmProjectBackwardsCompatibilityDeserializationTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/IdeaKpmProjectBackwardsCompatibilityDeserializationTest.kt @@ -3,14 +3,16 @@ * 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.idea.kpm +package org.jetbrains.kotlin.gradle.idea.test.kpm +import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmProject +import org.jetbrains.kotlin.gradle.idea.kpm.name import org.jetbrains.kotlin.gradle.idea.testFixtures.kpm.TestIdeaKpmInstances import org.jetbrains.kotlin.gradle.idea.testFixtures.kpm.assertContainsFragment import org.jetbrains.kotlin.gradle.idea.testFixtures.kpm.assertContainsModule import org.jetbrains.kotlin.gradle.idea.testFixtures.utils.copy import org.jetbrains.kotlin.gradle.idea.testFixtures.utils.createProxyInstance -import org.jetbrains.kotlin.gradle.idea.testUtils.deserializeIdeaKpmProjectWithBackwardsCompatibleClasses +import org.jetbrains.kotlin.gradle.idea.test.testUtils.deserializeIdeaKpmProjectWithBackwardsCompatibleClasses import org.junit.Test import kotlin.test.assertEquals diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/IdeaKpmProjectContainerTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/IdeaKpmProjectContainerTest.kt similarity index 89% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/IdeaKpmProjectContainerTest.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/IdeaKpmProjectContainerTest.kt index cdb973ef5d3..7dc1c34e39c 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/IdeaKpmProjectContainerTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/IdeaKpmProjectContainerTest.kt @@ -3,8 +3,11 @@ * 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.idea.kpm +package org.jetbrains.kotlin.gradle.idea.test.kpm +import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmProjectBinaryContainer +import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmProjectContainer +import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmProjectInstanceContainer import org.jetbrains.kotlin.gradle.idea.testFixtures.kpm.TestIdeaKpmInstances import kotlin.test.* diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/IdeaKpmProjectObjectGraphTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/IdeaKpmProjectObjectGraphTest.kt similarity index 96% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/IdeaKpmProjectObjectGraphTest.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/IdeaKpmProjectObjectGraphTest.kt index c2cb789d59c..e3a3d7989b8 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/kpm/IdeaKpmProjectObjectGraphTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/kpm/IdeaKpmProjectObjectGraphTest.kt @@ -3,8 +3,10 @@ * 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.idea.kpm +package org.jetbrains.kotlin.gradle.idea.test.kpm +import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmProject +import org.jetbrains.kotlin.gradle.idea.kpm.WriteReplacedModel import org.jetbrains.kotlin.tooling.core.AbstractExtras import org.jetbrains.kotlin.tooling.core.Extras import org.jetbrains.kotlin.tooling.core.MutableExtras diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaJavaIoSerializableExtrasSerializerTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaJavaIoSerializableExtrasSerializerTest.kt similarity index 93% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaJavaIoSerializableExtrasSerializerTest.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaJavaIoSerializableExtrasSerializerTest.kt index af465bf7037..d8fba3f6d68 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaJavaIoSerializableExtrasSerializerTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaJavaIoSerializableExtrasSerializerTest.kt @@ -3,8 +3,10 @@ * 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.idea.serialize +package org.jetbrains.kotlin.gradle.idea.test.serialize +import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializer +import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinJavaIoSerializableExtrasSerializer import org.jetbrains.kotlin.gradle.idea.testFixtures.serialize.TestIdeaKotlinSerializationContext import org.jetbrains.kotlin.tooling.core.withLinearClosure import org.junit.Test diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializerTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaKotlinBooleanExtrasSerializerTest.kt similarity index 91% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializerTest.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaKotlinBooleanExtrasSerializerTest.kt index ad7bf95b4bc..499993ed4ba 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinBooleanExtrasSerializerTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaKotlinBooleanExtrasSerializerTest.kt @@ -3,8 +3,9 @@ * 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.idea.serialize +package org.jetbrains.kotlin.gradle.idea.test.serialize +import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinBooleanExtrasSerializer import org.jetbrains.kotlin.gradle.idea.testFixtures.serialize.TestIdeaKotlinSerializationContext import kotlin.test.Test import kotlin.test.assertEquals diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializerTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaKotlinIntExtrasSerializerTest.kt similarity index 94% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializerTest.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaKotlinIntExtrasSerializerTest.kt index 82c80b7bf05..7baec3a47c0 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinIntExtrasSerializerTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaKotlinIntExtrasSerializerTest.kt @@ -3,7 +3,7 @@ * 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.idea.serialize +package org.jetbrains.kotlin.gradle.idea.test.serialize import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinIntExtrasSerializer.deserialize import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinIntExtrasSerializer.serialize diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializerTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaKotlinStringExtrasSerializerTest.kt similarity index 93% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializerTest.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaKotlinStringExtrasSerializerTest.kt index c69f2e8a2cb..b665d5ee755 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/serialize/IdeaKotlinStringExtrasSerializerTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/serialize/IdeaKotlinStringExtrasSerializerTest.kt @@ -3,7 +3,7 @@ * 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.idea.serialize +package org.jetbrains.kotlin.gradle.idea.test.serialize import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinStringExtrasSerializer.deserialize import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinStringExtrasSerializer.serialize diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinEntityAnnotationUtils.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinEntityAnnotationUtils.kt similarity index 66% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinEntityAnnotationUtils.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinEntityAnnotationUtils.kt index 7bd83f0ec3e..608058c3af9 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinEntityAnnotationUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinEntityAnnotationUtils.kt @@ -3,8 +3,12 @@ * 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.idea.tcs +package org.jetbrains.kotlin.gradle.idea.test.tcs +import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinEntity +import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinExtra +import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinModel +import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinService import kotlin.reflect.KClass import kotlin.reflect.full.allSuperclasses import kotlin.reflect.full.findAnnotation @@ -17,4 +21,6 @@ fun KClass<*>.findIdeaKotlinEntityAnnotations(): List { val KClass<*>.isIdeaKotlinModel get() = findIdeaKotlinEntityAnnotations().singleOrNull() is IdeaKotlinModel +val KClass<*>.isIdeaKotlinExtra get() = findIdeaKotlinEntityAnnotations().singleOrNull() is IdeaKotlinExtra + val KClass<*>.isIdeaKotlinService get() = findIdeaKotlinEntityAnnotations().singleOrNull() is IdeaKotlinService diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinEntityTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinEntityTest.kt similarity index 67% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinEntityTest.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinEntityTest.kt index 7639a545b39..cdd4ad98ca0 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinEntityTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinEntityTest.kt @@ -3,14 +3,15 @@ * 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.idea.tcs +package org.jetbrains.kotlin.gradle.idea.test.tcs -import org.jetbrains.kotlin.gradle.idea.tcs.ReflectionTestUtils.displayName -import org.jetbrains.kotlin.gradle.idea.tcs.ReflectionTestUtils.ideaTcsPackage -import org.jetbrains.kotlin.gradle.idea.tcs.ReflectionTestUtils.ideaTcsReflections +import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinEntity +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.displayName +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.getAllKotlinClasses +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.ideaTcsPackage +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.ideaTcsReflections import org.junit.runner.RunWith import org.junit.runners.Parameterized -import org.reflections.scanners.Scanners import kotlin.reflect.KClass import kotlin.test.Test import kotlin.test.fail @@ -35,10 +36,9 @@ class IdeaKotlinEntityTest(private val node: KClass<*>, private val clazzName: S @JvmStatic @Parameterized.Parameters(name = "{1}") fun findClasses(): List> { - return ideaTcsReflections.getAll(Scanners.SubTypes) - .map { Class.forName(it) } - .filter { !it.isAnnotation } - .map { it.kotlin } + return ideaTcsReflections.getAllKotlinClasses() + .filter { !it.java.isAnnotation } + .filter { !it.isCompanion } .filter { it.qualifiedName.orEmpty().startsWith(ideaTcsPackage) } .map { clazz -> arrayOf(clazz, checkNotNull(clazz.displayName())) } diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinExtraTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinExtraTest.kt new file mode 100644 index 00000000000..a892c635f72 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinExtraTest.kt @@ -0,0 +1,70 @@ +/* + * Copyright 2010-2022 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.idea.test.tcs + +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.displayName +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.getAllKotlinClasses +import org.jetbrains.kotlin.tooling.core.Extras +import org.junit.runner.RunWith +import org.junit.runners.Parameterized +import java.io.Serializable +import kotlin.reflect.KClass +import kotlin.reflect.full.companionObject +import kotlin.reflect.full.isSubclassOf +import kotlin.reflect.full.memberProperties +import kotlin.test.Test +import kotlin.test.fail + +@RunWith(Parameterized::class) +class IdeaKotlinExtraTest(private val node: KClass<*>, private val clazzName: String) { + + @Test + fun `test - node is data class`() { + if (!node.isData) fail("Expected $clazzName to be marked as data class") + } + + @Test + fun `test - node is Serializable`() { + if (!node.isSubclassOf(Serializable::class)) fail("Expected $clazzName to implement ${Serializable::class}") + } + + @Test + fun `test - contains serialVersionUID`() { + assertNodeContainsSerialVersionUID(node) + } + + @Test + fun `test - all members properties are nullable`() { + node.memberProperties.forEach { member -> + if (!member.returnType.isMarkedNullable) fail("Expected $clazzName.${member.name} to be marked nullable") + } + } + + @Test + fun `test - node has companion with key`() { + val companion = node.companionObject ?: fail("Missing companion on $clazzName") + val keyProperty = companion.memberProperties.find { it.name == "key" } ?: fail("Missing .key on $clazzName.${companion.simpleName}") + val keyType = keyProperty.returnType + + val isCorrectType = when { + keyType.classifier != Extras.Key::class -> false + keyType.arguments.singleOrNull()?.type?.classifier != node -> false + else -> true + } + + if (!isCorrectType) fail("Expected key to be type Extras.Key<${node.simpleName}>. Found $keyType") + } + + companion object { + @JvmStatic + @Parameterized.Parameters(name = "{1}") + fun findClasses(): List> { + return ReflectionTestUtils.ideaTcsReflections.getAllKotlinClasses() + .filter { it.isIdeaKotlinExtra } + .map { arrayOf(it, it.displayName()) } + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinModelObjectGraphTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinModelObjectGraphTest.kt similarity index 69% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinModelObjectGraphTest.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinModelObjectGraphTest.kt index 5d47175e754..6369ce03336 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinModelObjectGraphTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinModelObjectGraphTest.kt @@ -3,20 +3,19 @@ * 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.idea.tcs +package org.jetbrains.kotlin.gradle.idea.test.tcs -import org.jetbrains.kotlin.gradle.idea.tcs.ReflectionTestUtils.displayName -import org.jetbrains.kotlin.gradle.idea.tcs.ReflectionTestUtils.ideaTcsReflections -import org.jetbrains.kotlin.gradle.idea.tcs.ReflectionTestUtils.kotlinReflections +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.displayName +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.getAllKotlinClasses +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.ideaTcsReflections +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.kotlinReflections import org.jetbrains.kotlin.tooling.core.AbstractExtras import org.jetbrains.kotlin.tooling.core.Extras import org.jetbrains.kotlin.tooling.core.MutableExtras import org.junit.runner.RunWith import org.junit.runners.Parameterized import org.junit.runners.Parameterized.Parameters -import org.reflections.scanners.Scanners import java.io.Serializable -import java.lang.reflect.Field import java.lang.reflect.Modifier import kotlin.reflect.KClass import kotlin.reflect.full.memberProperties @@ -25,6 +24,13 @@ import kotlin.test.* @RunWith(Parameterized::class) class IdeaKotlinModelObjectGraphTest(private val node: KClass<*>, private val clazzName: String) { + @Test + fun `test - node is sealed`() { + if (node.java.isInterface || node.isAbstract) { + assertTrue(node.isSealed, "Expected $clazzName to be sealed") + } + } + @Test fun `test - node implements Serializable`() { assertTrue( @@ -33,47 +39,13 @@ class IdeaKotlinModelObjectGraphTest(private val node: KClass<*>, private val cl ) } - @Test - fun `test - node is sealed`() { - if (node.java.isInterface || node.isAbstract) { - assertTrue(node.isSealed, "Expected $clazzName to be sealed") - } - } - @Test fun `test - node implementations contain serialVersionUID`() { if (!node.java.isInterface && !Modifier.isAbstract(node.java.modifiers)) { - val serialVersionUID = assertNotNull( - node.java.getDeclaredFieldOrNull("serialVersionUID"), - "Expected $node to declare 'serialVersionUID' field" - ) - - assertTrue( - Modifier.isStatic(serialVersionUID.modifiers), - "Expected $node to declare 'serialVersionUID' statically" - ) - - assertTrue( - serialVersionUID.type.isPrimitive, - "Expected $node to declare primitive 'serialVersionUID'" - ) - - assertEquals( - serialVersionUID.type, Long::class.javaPrimitiveType, - "Expected $node to declare 'serialVersionUID' of type Long" - ) + assertNodeContainsSerialVersionUID(node) } } - private fun Class<*>.getDeclaredFieldOrNull(name: String): Field? { - return try { - getDeclaredField(name) - } catch (t: NoSuchFieldException) { - return null - } - } - - companion object { private val ignoredNodes = setOf( /* @@ -90,9 +62,7 @@ class IdeaKotlinModelObjectGraphTest(private val node: KClass<*>, private val cl val resolveQueue = ArrayDeque>() - resolveQueue += ideaTcsReflections.getAll(Scanners.SubTypes) - .map { Class.forName(it) } - .map { it.kotlin } + resolveQueue += ideaTcsReflections.getAllKotlinClasses() .filter { it.isIdeaKotlinModel } while (resolveQueue.isNotEmpty()) { diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/ReflectionTestUtils.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/ReflectionTestUtils.kt new file mode 100644 index 00000000000..d69f77fb480 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/ReflectionTestUtils.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2022 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.idea.test.tcs + +import javassist.bytecode.ClassFile +import org.reflections.Reflections +import org.reflections.scanners.Scanner +import org.reflections.scanners.Scanners +import java.lang.reflect.Field +import kotlin.reflect.KClass +import kotlin.reflect.full.superclasses + +object ReflectionTestUtils { + + const val ideaTcsPackage = "org.jetbrains.kotlin.gradle.idea.tcs" + val ideaTcsReflections = Reflections(ideaTcsPackage, AllClassScanner, Scanners.SubTypes, Scanners.TypesAnnotated) + + const val kotlinPackage = "org.jetbrains.kotlin" + val kotlinReflections = Reflections(kotlinPackage, AllClassScanner, Scanners.SubTypes, Scanners.TypesAnnotated) + + fun KClass<*>.displayName() = java.name + .removePrefix("org.jetbrains.kotlin") + .removePrefix(".gradle") + .removePrefix(".idea") + .removePrefix(".tcs") + .removePrefix(".") + + + fun Reflections.getAllKotlinClasses(): Set> { + return getAll(AllClassScanner) + .mapNotNull { runCatching { Class.forName(it) }.getOrNull() } + .mapNotNull { runCatching { it.kotlin }.getOrNull() } + .filter { runCatching { it.superclasses }.isSuccess } // Filter out Packages and file facades + .filter { !it.qualifiedName.orEmpty().startsWith("$ideaTcsPackage.test") } // Filter out test sources + .toSet() + } + + private object AllClassScanner : Scanner { + override fun scan(classFile: ClassFile): MutableList> { + return mutableListOf(entry(classFile.name, classFile.name)) + } + } + + fun Class<*>.getDeclaredFieldOrNull(name: String): Field? { + return try { + getDeclaredField(name) + } catch (t: NoSuchFieldException) { + return null + } + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/assertNodeContainsSerialVersionUID.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/assertNodeContainsSerialVersionUID.kt new file mode 100644 index 00000000000..e0ffc06394c --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/assertNodeContainsSerialVersionUID.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2022 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.idea.test.tcs + +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.displayName +import org.jetbrains.kotlin.gradle.idea.test.tcs.ReflectionTestUtils.getDeclaredFieldOrNull +import java.lang.reflect.Modifier +import kotlin.reflect.KClass +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertTrue + +fun assertNodeContainsSerialVersionUID(node: KClass<*>) { + if (!node.java.isInterface && !Modifier.isAbstract(node.java.modifiers)) { + val serialVersionUID = assertNotNull( + node.java.getDeclaredFieldOrNull("serialVersionUID"), + "Expected ${node.displayName()} to declare 'serialVersionUID' field" + ) + + assertTrue( + Modifier.isStatic(serialVersionUID.modifiers), + "Expected ${node.displayName()} to declare 'serialVersionUID' statically" + ) + + assertTrue( + serialVersionUID.type.isPrimitive, + "Expected ${node.displayName()} to declare primitive 'serialVersionUID'" + ) + + assertEquals( + serialVersionUID.type, Long::class.javaPrimitiveType, + "Expected ${node.displayName()} to declare 'serialVersionUID' of type Long" + ) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/testUtils/CompatibilityTestUtil.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/testUtils/CompatibilityTestUtil.kt similarity index 97% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/testUtils/CompatibilityTestUtil.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/testUtils/CompatibilityTestUtil.kt index 3472c23ed84..8f4ac60d5ed 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/testUtils/CompatibilityTestUtil.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/testUtils/CompatibilityTestUtil.kt @@ -3,7 +3,7 @@ * 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.idea.testUtils +package org.jetbrains.kotlin.gradle.idea.test.testUtils import org.jetbrains.kotlin.gradle.idea.kpm.IdeaKpmProject import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinSerializationLogger diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/testUtils/gradleUtils.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/testUtils/gradleUtils.kt similarity index 97% rename from libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/testUtils/gradleUtils.kt rename to libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/testUtils/gradleUtils.kt index cc0592be217..e46f23784e9 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/testUtils/gradleUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/testUtils/gradleUtils.kt @@ -3,7 +3,7 @@ * 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.idea.testUtils +package org.jetbrains.kotlin.gradle.idea.test.testUtils import org.gradle.api.Project import org.gradle.api.artifacts.verification.DependencyVerificationMode