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