migrate AGP compile time dependency 3.6.4->7.2.1
diff --git a/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts
index 3ea3200..9cb07f1 100644
--- a/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts
+++ b/libraries/tools/kotlin-gradle-plugin-api/build.gradle.kts
@@ -10,7 +10,7 @@
     commonImplementation(project(":kotlin-tooling-core"))
 
     commonCompileOnly(project(":kotlin-gradle-compiler-types"))
-    commonCompileOnly("com.android.tools.build:gradle:3.6.4") {
+    commonCompileOnly("com.android.tools.build:gradle:7.2.1") {
         // Without it - Gradle dependency resolution fails with unexpected error
         // Caused by: java.lang.IllegalStateException: Unexpected parent dependency id 131. Seen ids: [129, 2, 130, 9, 10, 138, 11, 139, 140, 14, 153, 154, 155, 156, 157, 158, 161, 164, 177, 178, 51, 179, 52, 180, 53, 54, 55, 183, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 195, 68, 200, 201, 202, 203, 206, 211, 212, 215, 222, 223, 224, 231, 232, 105, 233, 106, 107, 108, 109, 110, 111, 112, 113, 114, 242, 115, 243, 116, 244, 117, 118, 119, 120, 121, 122]
         //        at org.gradle.api.internal.artifacts.ivyservice.resolveengine.oldresult.TransientConfigurationResultsBuilder.deserialize(TransientConfigurationResultsBuilder.java:171)
diff --git a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts
index 1ff9fb1..494e141 100644
--- a/libraries/tools/kotlin-gradle-plugin/build.gradle.kts
+++ b/libraries/tools/kotlin-gradle-plugin/build.gradle.kts
@@ -49,14 +49,17 @@
     commonCompileOnly(project(":kotlin-scripting-compiler"))
     commonCompileOnly(project(":kotlin-gradle-statistics"))
     commonCompileOnly(project(":kotlin-gradle-build-metrics"))
-    commonCompileOnly("com.android.tools.build:gradle:3.6.4")
-    commonCompileOnly("com.android.tools.build:gradle-api:3.6.4")
-    commonCompileOnly("com.android.tools.build:builder:3.6.4")
+    commonCompileOnly("com.android.tools.build:gradle:7.2.1")
+    commonCompileOnly("com.android.tools.build:gradle-api:7.2.1")
+    commonCompileOnly("com.android.tools.build:builder:7.2.1")
+    commonCompileOnly("com.android.tools:common:30.2.1")
+    commonCompileOnly("org.jetbrains.kotlin:kotlin-reflect")
+    commonCompileOnly("com.android.tools:sdklib:30.2.1")
     commonCompileOnly("com.android.tools.build:builder-model:3.6.4")
     commonCompileOnly("org.codehaus.groovy:groovy-all:2.4.12")
     commonCompileOnly(intellijCore())
     commonCompileOnly(commonDependency("org.jetbrains.teamcity:serviceMessages"))
-    commonCompileOnly("com.gradle:gradle-enterprise-gradle-plugin:3.11.2")
+    commonCompileOnly("com.gradle:gradle-enterprise-gradle-plugin:3.9")
     commonCompileOnly(commonDependency("com.google.code.gson:gson"))
     commonCompileOnly(commonDependency("com.google.guava:guava"))
     commonCompileOnly("de.undercouch:gradle-download-task:4.1.1")
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt
index 641d5b5..91a401e 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidDependencyResolver.kt
@@ -60,7 +60,8 @@
                 AndroidSdkHandler::class.java.getMethodOrNull("getInstance", androidLocationsProvider, Path::class.java) ?: return null
             getInstance(null, androidLocationBuildService, androidExtension.sdkDirectory.toPath()) as AndroidSdkHandler
         } else {
-            AndroidSdkHandler.getInstance(androidExtension.sdkDirectory)
+            val getInstance = AndroidSdkHandler::class.java.getMethodOrNull("getInstance", File::class.java) ?: return null
+            getInstance(null, androidExtension.sdkDirectory) as AndroidSdkHandler
         }
         val logger = LoggerProgressIndicatorWrapper(LoggerWrapper(project.logger))
         val androidTarget =
@@ -73,8 +74,9 @@
             jar = (getPath(androidTarget, IAndroidTarget.ANDROID_JAR) as Path).toFile()
             sources = (getPath(androidTarget, IAndroidTarget.SOURCES) as Path).toFile()
         } else {
-            jar = File(androidTarget.getPath(IAndroidTarget.ANDROID_JAR))
-            sources = File(androidTarget.getPath(IAndroidTarget.SOURCES))
+            val getPath = IAndroidTarget::class.java.getMethodOrNull("getPath", Int::class.java) ?: return null
+            jar = File(getPath(androidTarget, IAndroidTarget.ANDROID_JAR) as String)
+            sources = File(getPath(androidTarget, IAndroidTarget.SOURCES) as String)
         }
         return AndroidDependency(
             androidTarget.fullName,
@@ -104,7 +106,7 @@
             null
         }
 
-    private fun Class<*>.getMethodOrNull(name: String, vararg parameterTypes: Class<*>) =
+    fun Class<*>.getMethodOrNull(name: String, vararg parameterTypes: Class<*>) =
         try {
             getMethod(name, *parameterTypes)
         } catch (e: Exception) {
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt
index caa283e..db94aae 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/internal/AndroidSubplugin.kt
@@ -117,7 +117,7 @@
             )
             kotlinCompilation.compileKotlinTaskProvider.configure {
                 it.androidLayoutResourceFiles.from(
-                    sourceSet.res.sourceDirectoryTrees.layoutDirectories
+                    sourceSet.res.getSourceDirectoryTrees().layoutDirectories
                 )
             }
         }
@@ -189,7 +189,7 @@
 
         fun addSourceSetAsVariant(name: String) {
             val sourceSet = androidExtension.sourceSets.findByName(name) ?: return
-            val srcDirs = sourceSet.res.sourceDirectoryTrees
+            val srcDirs = sourceSet.res.getSourceDirectoryTrees()
             if (srcDirs.isNotEmpty()) {
                 addVariant(sourceSet.name, srcDirs)
             }
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/forEachAndroidVariant.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/forEachAndroidVariant.kt
index 8930777..4cb332b 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/forEachAndroidVariant.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/utils/forEachAndroidVariant.kt
@@ -8,6 +8,8 @@
 import com.android.build.gradle.*
 import com.android.build.gradle.api.BaseVariant
 import org.gradle.api.Project
+import org.gradle.api.internal.DefaultDomainObjectSet
+import org.jetbrains.kotlin.gradle.targets.android.internal.AndroidDependencyResolver.getMethodOrNull
 
 internal fun Project.forAllAndroidVariants(action: (BaseVariant) -> Unit) {
     val androidExtension = this.extensions.getByName("android")
@@ -16,7 +18,9 @@
         is LibraryExtension -> {
             androidExtension.libraryVariants.all(action)
             if (androidExtension is FeatureExtension) {
-                androidExtension.featureVariants.all(action)
+                val getFeature = androidExtension::class.java.getMethodOrNull("getFeatureVariants")
+                val featureVariants = getFeature?.invoke(androidExtension) as? DefaultDomainObjectSet<BaseVariant>
+                featureVariants?.all(action)
             }
         }