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