diff --git a/.idea/protoeditor.xml b/.idea/protoeditor.xml
new file mode 100644
index 00000000000..036b7cc1fd1
--- /dev/null
+++ b/.idea/protoeditor.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 71db9cc0259..733b8e2f09d 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -366,6 +366,7 @@ val gradlePluginProjects = listOf(
":kotlin-gradle-plugin",
":kotlin-gradle-plugin-api",
":kotlin-gradle-plugin-idea",
+ ":kotlin-gradle-plugin-idea-proto",
":kotlin-gradle-plugin-kpm-android",
":kotlin-allopen",
":kotlin-annotation-processing-gradle",
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 6d2a443ae39..e55bb9c2f24 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -20,6 +20,7 @@
+
@@ -1990,6 +1991,12 @@
+
+
+
+
+
+
@@ -2012,6 +2019,12 @@
+
+
+
+
+
+
diff --git a/libraries/tools/kotlin-gradle-plugin-idea-for-compatibility-tests/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-idea-for-compatibility-tests/build.gradle.kts
index fcddde84a96..ab3bffcd4ba 100644
--- a/libraries/tools/kotlin-gradle-plugin-idea-for-compatibility-tests/build.gradle.kts
+++ b/libraries/tools/kotlin-gradle-plugin-idea-for-compatibility-tests/build.gradle.kts
@@ -15,6 +15,7 @@ if (isSnapshotTest) {
repositories {
clear()
mavenLocal()
+ mavenCentral()
}
}
@@ -29,6 +30,8 @@ val incomingClasspath by configurations.creating {
dependencies {
incomingClasspath(kotlin("gradle-plugin-idea", resolvedTestedVersion))
+ incomingClasspath(testFixtures(kotlin("gradle-plugin-idea", resolvedTestedVersion)))
+ incomingClasspath(kotlin("gradle-plugin-idea-proto", resolvedTestedVersion))
}
val syncClasspath by tasks.register("syncClasspath") {
diff --git a/libraries/tools/kotlin-gradle-plugin-idea-proto/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-idea-proto/build.gradle.kts
new file mode 100644
index 00000000000..d5437f59293
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin-idea-proto/build.gradle.kts
@@ -0,0 +1,74 @@
+plugins {
+ kotlin("jvm")
+}
+
+kotlin {
+ sourceSets.all {
+ languageSettings.optIn("org.jetbrains.kotlin.gradle.kpm.idea.InternalKotlinGradlePluginApi")
+ }
+}
+
+publish()
+javadocJar()
+sourcesJar()
+
+dependencies {
+ api(project(":kotlin-gradle-plugin-idea"))
+ implementation("com.google.protobuf:protobuf-java:3.19.4")
+ implementation("com.google.protobuf:protobuf-kotlin:3.19.4")
+ testImplementation(project(":kotlin-test:kotlin-test-junit"))
+ testImplementation(testFixtures(project(":kotlin-gradle-plugin-idea")))
+}
+
+configureKotlinCompileTasksGradleCompatibility()
+
+sourceSets.main.configure {
+ java.srcDir("src/generated/java")
+ java.srcDir("src/generated/kotlin")
+}
+
+tasks.register("protoc") {
+ val protoSources = file("src/main/proto")
+ val javaOutput = file("src/generated/java/")
+ val kotlinOutput = file("src/generated/kotlin/")
+
+ inputs.dir(protoSources)
+ outputs.dir(javaOutput)
+ outputs.dir(kotlinOutput)
+
+ doFirst {
+ javaOutput.deleteRecursively()
+ kotlinOutput.deleteRecursively()
+ javaOutput.mkdirs()
+ kotlinOutput.mkdirs()
+ }
+
+ workingDir(project.projectDir)
+
+ commandLine(
+ *arrayOf(
+ "protoc",
+ "-I=$protoSources",
+ "--java_out=${javaOutput.absolutePath}",
+ "--kotlin_out=${kotlinOutput.absolutePath}"
+ ) + protoSources.listFiles().orEmpty()
+ .filter { it.extension == "proto" }
+ .map { it.path },
+ )
+
+ doLast {
+ kotlinOutput.walkTopDown()
+ .filter { it.extension == "kt" }
+ .forEach { file -> file.writeText(file.readText().replace("public", "internal")) }
+
+ javaOutput.walkTopDown()
+ .filter { it.extension == "java" }
+ .forEach { file ->
+ file.writeText(
+ file.readText()
+ .replace("public final class", "final class")
+ .replace("public interface", "interface")
+ )
+ }
+ }
+}
diff --git a/libraries/tools/kotlin-gradle-plugin-idea/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-idea/build.gradle.kts
index 31b42e56df6..03a3c9484a9 100644
--- a/libraries/tools/kotlin-gradle-plugin-idea/build.gradle.kts
+++ b/libraries/tools/kotlin-gradle-plugin-idea/build.gradle.kts
@@ -18,7 +18,7 @@ dependencies {
testImplementation(gradleApi())
testImplementation(gradleKotlinDsl())
testImplementation(project(":kotlin-gradle-plugin"))
- testImplementation(project(":kotlin-gradle-statistics"))
+ testImplementation(project(":kotlin-gradle-plugin-idea-proto"))
testImplementation(project(":kotlin-test:kotlin-test-junit"))
testImplementation("org.reflections:reflections:0.10.2") {
@@ -28,6 +28,7 @@ dependencies {
testFixturesImplementation(gradleApi())
testFixturesImplementation(gradleKotlinDsl())
testFixturesImplementation(project(":kotlin-tooling-core"))
+ testFixturesImplementation(project(":kotlin-gradle-plugin-idea-proto"))
testFixturesImplementation(project(":kotlin-test:kotlin-test-junit"))
}
diff --git a/settings.gradle b/settings.gradle
index ec0f07e7499..0d399a590a5 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -241,6 +241,7 @@ include ":kotlin-sam-with-receiver-compiler-plugin",
":kotlin-project-model",
":kotlin-gradle-plugin-api",
":kotlin-gradle-plugin-idea",
+ ":kotlin-gradle-plugin-idea-proto",
":kotlin-gradle-plugin-idea-for-compatibility-tests",
":kotlin-gradle-plugin-dsl-codegen",
":kotlin-gradle-plugin-npm-versions-codegen",
@@ -724,6 +725,7 @@ project(':tools:kotlinp').projectDir = "$rootDir/libraries/tools/kotlinp" as Fil
project(':kotlin-project-model').projectDir = "$rootDir/libraries/tools/kotlin-project-model" as File
project(':kotlin-gradle-plugin-api').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-api" as File
project(':kotlin-gradle-plugin-idea').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-idea" as File
+project(':kotlin-gradle-plugin-idea-proto').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-idea-proto" as File
project(':kotlin-gradle-plugin-idea-for-compatibility-tests').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-idea-for-compatibility-tests" as File
project(':kotlin-gradle-plugin-dsl-codegen').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-dsl-codegen" as File
project(':kotlin-gradle-plugin-npm-versions-codegen').projectDir = "$rootDir/libraries/tools/kotlin-gradle-plugin-npm-versions-codegen" as File