WIP
try to implement ic test for reflekt lib, but fail because master of reflect is 1.5.31 and it does not support 1.7
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt
index f83a5f5..366c9e2 100644
--- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/IncrementalCompilationMultiProjectIT.kt
@@ -5,6 +5,7 @@
import org.jetbrains.kotlin.gradle.testbase.*
import org.jetbrains.kotlin.gradle.util.checkedReplace
import org.junit.jupiter.api.DisplayName
+import java.io.File
import java.nio.file.Path
import kotlin.io.path.*
@@ -64,6 +65,44 @@
}
}
+ @DisplayName("Reflect plugin")
+ @GradleTest
+ fun testReflectPlugin(gradleVersion: GradleVersion) {
+ project("reflectProject", gradleVersion){
+ val src = projectPath.resolve("src")
+ val expectedSources = src.allKotlinSources
+ build("build") {
+ assertCompiledKotlinSources(expectedSources, output)
+ }
+ val newClassWithAnnotation = kotlinSourcesDir().resolve("new.kt")
+ newClassWithAnnotation.writeText(
+ """
+ @A
+ object D:B
+ """.trimIndent()
+ )
+
+ build {
+ assertIncrementalCompilation(
+ listOf(kotlinSourcesDir().resolve("new.kt"), kotlinSourcesDir().resolve("app.kt"))
+ .map {
+ it.relativeTo(projectPath).toString()
+ })
+ }
+ }
+// val project = Project("reflectProject")
+// project.build("build") {
+// assertSuccessful()
+// }
+//
+//
+//
+// project.build("build") {
+// assertSuccessful()
+// assertCompiledKotlinSources(listOf("src/main/kotlin/new.kt", "src/main/kotlin/app.kt"))
+// }
+ }
+
@DisplayName(
"checks that multi-project ic is disabled when there is a task that outputs to javaDestination dir " +
"that is not JavaCompile or KotlinCompile"
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/build.gradle.kts
new file mode 100644
index 0000000..57a3268
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/build.gradle.kts
@@ -0,0 +1,52 @@
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+import org.jetbrains.reflekt.plugin.reflekt
+
+plugins {
+// id("tanvd.kosogor") version "1.0.10" apply true
+ id("org.jetbrains.reflekt") version "1.5.31" apply true
+ kotlin("jvm") version "1.5.31" apply true
+
+}
+
+group = "org.example"
+version = "1.0-SNAPSHOT"
+
+repositories {
+
+ mavenCentral()
+ google()
+ mavenLocal()
+ maven(url = uri("https://packages.jetbrains.team/maven/p/reflekt/reflekt"))
+
+}
+
+dependencies {
+ implementation(kotlin("stdlib"))
+ testImplementation("org.junit.jupiter:junit-jupiter-api:5.6.0")
+ testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
+
+ implementation("org.jetbrains.reflekt", "reflekt-dsl", "1.5.31")
+ implementation("com.github.gumtreediff", "core", "2.1.2")
+}
+
+tasks.getByName<Test>("test") {
+ useJUnitPlatform()
+}
+reflekt {
+ // Enable or disable Reflekt plugin
+ enabled = true
+ // List of external libraries for dependencies search
+ // Use only DependencyHandlers which have canBeResolve = True
+ // Note: Reflekt works only with kt files from libraries
+ librariesToIntrospect = listOf("io.kotless:kotless-dsl:0.1.6")
+}
+tasks.withType<KotlinCompile> {
+ kotlinOptions {
+ useIR = true
+ languageVersion = "1.5"
+ apiVersion = "1.5"
+ jvmTarget = "11"
+ // Current Reflekt version does not support incremental compilation process
+ incremental = true
+ }
+}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/gradle.properties b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/gradle.properties
new file mode 100644
index 0000000..29e08e8
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/gradle.properties
@@ -0,0 +1 @@
+kotlin.code.style=official
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/settings.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/settings.gradle.kts
new file mode 100644
index 0000000..e5d2d71
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/settings.gradle.kts
@@ -0,0 +1,21 @@
+rootProject.name = "reflect-sandbox"
+pluginManagement {
+ // Uncomment to use a released version
+// resolutionStrategy {
+// this.eachPlugin {
+//
+// if (requested.id.id == "org.jetbrains.reflekt") {
+// useModule("org.jetbrains.reflekt:gradle-plugin:${this.requested.version}")
+// }
+// }
+// }
+
+ repositories {
+ mavenLocal()
+ // add the dependency to Reflekt Maven repository
+ // Uncomment to use a released version
+ maven(url = uri("https://packages.jetbrains.team/maven/p/reflekt/reflekt"))
+ // Necessary only for this example, for Kotless library
+ maven(url = uri("https://plugins.gradle.org/m2/"))
+ }
+}
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/src/main/kotlin/A.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/src/main/kotlin/A.kt
new file mode 100644
index 0000000..4e6f76d
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/src/main/kotlin/A.kt
@@ -0,0 +1,5 @@
+annotation class A
+interface B
+
+@A
+object C:B
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/src/main/kotlin/app.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/src/main/kotlin/app.kt
new file mode 100644
index 0000000..0ae7468
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/reflectProject/src/main/kotlin/app.kt
@@ -0,0 +1,7 @@
+import org.jetbrains.reflekt.Reflekt
+
+fun main() {
+ val a = Reflekt.objects().withAnnotations<B>(A::class).toList()
+ println(a.toString())
+ println("asd")
+}
\ No newline at end of file