[KAPT4] Create basic infrastructure for KAPT4

This commit is contained in:
Pavel Mikhailovskii
2023-07-07 11:09:16 +00:00
committed by Space Team
parent fc57f48c8f
commit 083f54aceb
19 changed files with 220 additions and 26 deletions
+1
View File
@@ -357,6 +357,7 @@
/plugins/kapt3/kapt3-compiler/test/ "Kotlin Compiler Core" "Kotlin JVM" /plugins/kapt3/kapt3-compiler/test/ "Kotlin Compiler Core" "Kotlin JVM"
/plugins/kapt3/kapt3-compiler/testData/ "Kotlin Compiler Core" "Kotlin JVM" /plugins/kapt3/kapt3-compiler/testData/ "Kotlin Compiler Core" "Kotlin JVM"
/plugins/kapt3/kapt3-compiler/tests-gen/ "Kotlin Compiler Core" "Kotlin JVM" /plugins/kapt3/kapt3-compiler/tests-gen/ "Kotlin Compiler Core" "Kotlin JVM"
/plugins/kapt4/ "Kotlin Compiler Core" "Kotlin JVM"
/plugins/kotlinx-serialization/ Sergey.Shanshin Leonid.Startsev /plugins/kotlinx-serialization/ Sergey.Shanshin Leonid.Startsev
/plugins/lombok/ "Kotlin Compiler Core" /plugins/lombok/ "Kotlin Compiler Core"
/plugins/noarg/ "Kotlin Compiler Core" /plugins/noarg/ "Kotlin Compiler Core"
+2
View File
@@ -810,6 +810,8 @@ tasks {
register("kaptTests") { register("kaptTests") {
dependsOn(":kotlin-annotation-processing:test") dependsOn(":kotlin-annotation-processing:test")
dependsOn(":kotlin-annotation-processing:testJdk11") dependsOn(":kotlin-annotation-processing:testJdk11")
dependsOn(":kotlin-annotation-processing-compiler:test")
dependsOn(":kotlin-annotation-processing-compiler:testJdk11")
dependsOn(":kotlin-annotation-processing-base:test") dependsOn(":kotlin-annotation-processing-base:test")
dependsOn(":kotlin-annotation-processing-cli:test") dependsOn(":kotlin-annotation-processing-cli:test")
} }
@@ -76,6 +76,7 @@ import org.jetbrains.kotlin.extensions.*
import org.jetbrains.kotlin.extensions.internal.CandidateInterceptor import org.jetbrains.kotlin.extensions.internal.CandidateInterceptor
import org.jetbrains.kotlin.extensions.internal.InternalNonStableExtensionPoints import org.jetbrains.kotlin.extensions.internal.InternalNonStableExtensionPoints
import org.jetbrains.kotlin.extensions.internal.TypeResolutionInterceptor import org.jetbrains.kotlin.extensions.internal.TypeResolutionInterceptor
import org.jetbrains.kotlin.fir.extensions.FirAnalysisHandlerExtension
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter
import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.js.translate.extensions.JsSyntheticTranslateExtension import org.jetbrains.kotlin.js.translate.extensions.JsSyntheticTranslateExtension
@@ -673,6 +674,7 @@ class KotlinCoreEnvironment private constructor(
FirExtensionRegistrarAdapter.registerExtensionPoint(project) FirExtensionRegistrarAdapter.registerExtensionPoint(project)
TypeAttributeTranslatorExtension.registerExtensionPoint(project) TypeAttributeTranslatorExtension.registerExtensionPoint(project)
AssignResolutionAltererExtension.registerExtensionPoint(project) AssignResolutionAltererExtension.registerExtensionPoint(project)
FirAnalysisHandlerExtension.registerExtensionPoint(project)
} }
internal fun registerExtensionsFromPlugins(project: MockProject, configuration: CompilerConfiguration) { internal fun registerExtensionsFromPlugins(project: MockProject, configuration: CompilerConfiguration) {
@@ -78,6 +78,7 @@ fun copyK2JVMCompilerArguments(from: K2JVMCompilerArguments, to: K2JVMCompilerAr
to.typeEnhancementImprovementsInStrictMode = from.typeEnhancementImprovementsInStrictMode to.typeEnhancementImprovementsInStrictMode = from.typeEnhancementImprovementsInStrictMode
to.useFastJarFileSystem = from.useFastJarFileSystem to.useFastJarFileSystem = from.useFastJarFileSystem
to.useJavac = from.useJavac to.useJavac = from.useJavac
to.useKapt4 = from.useKapt4
to.useOldBackend = from.useOldBackend to.useOldBackend = from.useOldBackend
to.useOldClassFilesReading = from.useOldClassFilesReading to.useOldClassFilesReading = from.useOldClassFilesReading
to.useOldInlineClassesManglingScheme = from.useOldInlineClassesManglingScheme to.useOldInlineClassesManglingScheme = from.useOldInlineClassesManglingScheme
@@ -846,6 +846,15 @@ Also sets `-jvm-target` value equal to the selected JDK version"""
field = value field = value
} }
@Argument(
value = "-Xuse-kapt4",
description = "Enable the experimental KAPT 4."
)
var useKapt4 = false
set(value) {
checkFrozen()
field = value
}
override fun configureAnalysisFlags(collector: MessageCollector, languageVersion: LanguageVersion): MutableMap<AnalysisFlag<*>, Any> { override fun configureAnalysisFlags(collector: MessageCollector, languageVersion: LanguageVersion): MutableMap<AnalysisFlag<*>, Any> {
val result = super.configureAnalysisFlags(collector, languageVersion) val result = super.configureAnalysisFlags(collector, languageVersion)
@@ -56,17 +56,18 @@ fun CompilerConfiguration.setupCommonArguments(
buildHmppModuleStructure(arguments)?.let { put(CommonConfigurationKeys.HMPP_MODULE_STRUCTURE, it) } buildHmppModuleStructure(arguments)?.let { put(CommonConfigurationKeys.HMPP_MODULE_STRUCTURE, it) }
} }
fun switchToFallbackModeIfNecessary(arguments: CommonCompilerArguments, messageCollector: MessageCollector) { private fun switchToFallbackModeIfNecessary(arguments: CommonCompilerArguments, messageCollector: MessageCollector) {
val isK2 = arguments.useK2 || (arguments.languageVersion?.startsWith('2') ?: (LanguageVersion.LATEST_STABLE >= LanguageVersion.KOTLIN_2_0)) fun warn(message: String) {
if (isK2) { if (!arguments.suppressVersionWarnings) messageCollector.report(CompilerMessageSeverity.STRONG_WARNING, message)
val isKaptUsed = arguments.pluginOptions?.any { it.startsWith("plugin:org.jetbrains.kotlin.kapt3") } == true }
if (isKaptUsed) {
if (!arguments.suppressVersionWarnings) { if (arguments !is K2JVMCompilerArguments) return
messageCollector.report( val isK2 =
CompilerMessageSeverity.STRONG_WARNING, arguments.useK2 || (arguments.languageVersion?.startsWith('2') ?: (LanguageVersion.LATEST_STABLE >= LanguageVersion.KOTLIN_2_0))
"Kapt currently doesn't support language version 2.0+.\nFalling back to 1.9." val isKaptUsed = arguments.pluginOptions?.any { it.startsWith("plugin:org.jetbrains.kotlin.kapt3") } == true
) when {
} isK2 && isKaptUsed && !arguments.useKapt4 -> {
warn("Kapt currently doesn't support language version 2.0+. Falling back to 1.9.")
arguments.languageVersion = LanguageVersion.KOTLIN_1_9.versionString arguments.languageVersion = LanguageVersion.KOTLIN_1_9.versionString
if (arguments.apiVersion?.startsWith("2") == true) { if (arguments.apiVersion?.startsWith("2") == true) {
arguments.apiVersion = ApiVersion.KOTLIN_1_9.versionString arguments.apiVersion = ApiVersion.KOTLIN_1_9.versionString
@@ -74,8 +75,11 @@ fun switchToFallbackModeIfNecessary(arguments: CommonCompilerArguments, messageC
arguments.useK2 = false arguments.useK2 = false
arguments.skipMetadataVersionCheck = true arguments.skipMetadataVersionCheck = true
arguments.skipPrereleaseCheck = true arguments.skipPrereleaseCheck = true
(arguments as? K2JVMCompilerArguments)?.allowUnstableDependencies = true arguments.allowUnstableDependencies = true
} }
isK2 && isKaptUsed && arguments.useKapt4 -> warn("Kapt 4 is still experimental. Use with caution.")
arguments.useKapt4 && !isK2 -> warn("-Xuse-kapt4 flag can be only used with language version 2.0+.")
arguments.useKapt4 && !isKaptUsed -> warn("-Xuse-kapt4 flag is present but no Kapt configuration options are provided.")
} }
} }
@@ -0,0 +1,32 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.fir.extensions
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
abstract class FirAnalysisHandlerExtension {
companion object : ProjectExtensionDescriptor<FirAnalysisHandlerExtension>(
"org.jetbrains.kotlin.fir.firAnalyzeCompleteHandlerExtension",
FirAnalysisHandlerExtension::class.java
)
/**
* Checks whether [doAnalysis] should be called
* @param configuration compiler configuration
* @return true if [doAnalysis] should be called
*/
abstract fun isApplicable(configuration: CompilerConfiguration): Boolean
/**
* Performs code analysis
* @param configuration compiler configuration
* @return true if analysis completed successfully. There can be different causes of failure, an incorrect configuration for example.
* A failure means that there's no reason to continue building the project.
*/
abstract fun doAnalysis(configuration: CompilerConfiguration): Boolean
}
+1
View File
@@ -143,6 +143,7 @@ where advanced options include:
See KT-45671 for more details See KT-45671 for more details
-Xuse-fast-jar-file-system Use fast implementation on Jar FS. This may speed up compilation time, but currently it's an experimental mode -Xuse-fast-jar-file-system Use fast implementation on Jar FS. This may speed up compilation time, but currently it's an experimental mode
-Xuse-javac Use javac for Java source and class files analysis -Xuse-javac Use javac for Java source and class files analysis
-Xuse-kapt4 Enable the experimental KAPT 4.
-Xuse-old-backend Use the old JVM backend -Xuse-old-backend Use the old JVM backend
-Xuse-old-class-files-reading Use old class files reading implementation. This may slow down the build and cause problems with Groovy interop. -Xuse-old-class-files-reading Use old class files reading implementation. This may slow down the build and cause problems with Groovy interop.
Should be used in case of problems with the new implementation Should be used in case of problems with the new implementation
+2 -1
View File
@@ -59,8 +59,9 @@ dependencies {
testApi(projectTests(":plugins:jvm-abi-gen")) testApi(projectTests(":plugins:jvm-abi-gen"))
testApi(projectTests(":plugins:android-extensions-compiler")) testApi(projectTests(":plugins:android-extensions-compiler"))
testApi(projectTests(":plugins:parcelize:parcelize-compiler")) testApi(projectTests(":plugins:parcelize:parcelize-compiler"))
testApi(projectTests(":kotlin-annotation-processing")) testApi(projectTests(":kotlin-annotation-processing-compiler"))
testApi(projectTests(":kotlin-annotation-processing-cli")) testApi(projectTests(":kotlin-annotation-processing-cli"))
testApi(projectTests(":kotlin-annotation-processing"))
testApi(projectTests(":kotlin-allopen-compiler-plugin")) testApi(projectTests(":kotlin-allopen-compiler-plugin"))
testApi(projectTests(":kotlin-noarg-compiler-plugin")) testApi(projectTests(":kotlin-noarg-compiler-plugin"))
testApi(projectTests(":kotlin-lombok-compiler-plugin")) testApi(projectTests(":kotlin-lombok-compiler-plugin"))
+6 -1
View File
@@ -114,7 +114,12 @@ private fun transformKaptToolArgs(args: List<String>, messageCollector: MessageC
} }
if (!aptModePassed) { if (!aptModePassed) {
transformed.addAll(0, kaptArg(KaptCliOption.APT_MODE_OPTION, "compile")) val isK2 = "-Xuse-kapt4" in transformed && ("-Xuse-k2" in transformed ||
transformed.any { it.startsWith("-language-version=2") } ||
transformed.lastIndexOf("-language-version").takeIf { it >= 0 }
?.let { transformed.getOrNull(it + 1)?.startsWith('2') } == true)
transformed.addAll(0, kaptArg(KaptCliOption.APT_MODE_OPTION, if (isK2) "stubsAndApt" else "compile"))
} }
if (!isTest && !isAtLeastJava9() && !areJavacComponentsAvailable() && !toolsJarPassed) { if (!isTest && !isAtLeastJava9() && !areJavacComponentsAvailable() && !toolsJarPassed) {
@@ -47,8 +47,7 @@ output/sources/generated/Test.java
Test.kt Test.kt
# output # output
warning: kapt currently doesn't support language version 2.0+. warning: kapt currently doesn't support language version 2.0+. Falling back to 1.9.
Falling back to 1.9.
# java # java
-cp output/classes:output/javaClasses:output/ap.jar:%KOTLIN_STDLIB% -cp output/classes:output/javaClasses:output/ap.jar:%KOTLIN_STDLIB%
@@ -21,13 +21,13 @@ import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.base.kapt3.* import org.jetbrains.kotlin.base.kapt3.*
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.cli.common.messages.MessageRenderer import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot import org.jetbrains.kotlin.cli.jvm.config.JavaSourceRoot
import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot import org.jetbrains.kotlin.cli.jvm.config.JvmClasspathRoot
import org.jetbrains.kotlin.compiler.plugin.* import org.jetbrains.kotlin.compiler.plugin.*
import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CommonConfigurationKeys.USE_FIR
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey import org.jetbrains.kotlin.config.CompilerConfigurationKey
import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.config.JVMConfigurationKeys
@@ -59,7 +59,7 @@ import java.io.File
import java.io.ObjectInputStream import java.io.ObjectInputStream
import java.util.* import java.util.*
private val KAPT_OPTIONS = CompilerConfigurationKey.create<KaptOptions.Builder>("Kapt options") val KAPT_OPTIONS = CompilerConfigurationKey.create<KaptOptions.Builder>("Kapt options")
class Kapt3CommandLineProcessor : CommandLineProcessor { class Kapt3CommandLineProcessor : CommandLineProcessor {
override val pluginId: String = ANNOTATION_PROCESSING_COMPILER_PLUGIN_ID override val pluginId: String = ANNOTATION_PROCESSING_COMPILER_PLUGIN_ID
@@ -71,12 +71,6 @@ class Kapt3CommandLineProcessor : CommandLineProcessor {
if (option !is KaptCliOption) { if (option !is KaptCliOption) {
throw CliOptionProcessingException("Unknown option: ${option.optionName}") throw CliOptionProcessingException("Unknown option: ${option.optionName}")
} }
if (configuration.getBoolean(CommonConfigurationKeys.USE_FIR)) {
configuration[CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY]?.report(
CompilerMessageSeverity.ERROR,
"kapt currently doesn't support language version 2.0\nPlease use language version 1.9 or below"
)
}
val kaptOptions = configuration[KAPT_OPTIONS] val kaptOptions = configuration[KAPT_OPTIONS]
?: KaptOptions.Builder().also { configuration.put(KAPT_OPTIONS, it) } ?: KaptOptions.Builder().also { configuration.put(KAPT_OPTIONS, it) }
@@ -173,6 +167,7 @@ class Kapt3CommandLineProcessor : CommandLineProcessor {
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
class Kapt3ComponentRegistrar : ComponentRegistrar { class Kapt3ComponentRegistrar : ComponentRegistrar {
override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) { override fun registerProjectComponents(project: MockProject, configuration: CompilerConfiguration) {
if (configuration.getBoolean(USE_FIR)) return
doOpenInternalPackagesIfRequired() doOpenInternalPackagesIfRequired()
val contentRoots = configuration[CLIConfigurationKeys.CONTENT_ROOTS] ?: emptyList() val contentRoots = configuration[CLIConfigurationKeys.CONTENT_ROOTS] ?: emptyList()
+59
View File
@@ -0,0 +1,59 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
description = "Annotation Processor for Kotlin"
plugins {
kotlin("jvm")
id("jps-compatible")
}
dependencies {
compileOnly(project(":compiler:frontend.java"))
compileOnly(project(":compiler:plugin-api"))
implementation(project(":kotlin-annotation-processing-compiler"))
embedded(project(":kotlin-annotation-processing-compiler")) { isTransitive = false }
}
optInToExperimentalCompilerApi()
sourceSets {
"main" { projectDefault() }
"test" {
projectDefault()
generatedTestDir()
}
}
testsJar {}
kaptTestTask("test", JavaLanguageVersion.of(8))
kaptTestTask("testJdk11", JavaLanguageVersion.of(11))
kaptTestTask("testJdk17", JavaLanguageVersion.of(17))
fun Project.kaptTestTask(name: String, javaLanguageVersion: JavaLanguageVersion) {
val service = extensions.getByType<JavaToolchainService>()
projectTest(taskName = name, parallel = true) {
useJUnitPlatform {
excludeTags = setOf("IgnoreJDK11")
}
workingDir = rootDir
dependsOn(":dist")
javaLauncher.set(service.launcherFor { languageVersion.set(javaLanguageVersion) })
}
}
publish()
runtimeJar()
sourcesJar()
javadocJar()
allprojects {
tasks.withType(KotlinCompile::class).all {
kotlinOptions {
freeCompilerArgs += "-Xcontext-receivers"
}
}
}
@@ -0,0 +1,6 @@
#
# Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
# Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
#
org.jetbrains.kotlin.kapt4.Kapt4CompilerPluginRegistrar
@@ -0,0 +1,38 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.kapt4
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.fir.extensions.FirAnalysisHandlerExtension
import org.jetbrains.kotlin.kapt3.KAPT_OPTIONS
class Kapt4AnalysisHandlerExtension : FirAnalysisHandlerExtension() {
override fun isApplicable(configuration: CompilerConfiguration): Boolean =
configuration.getBoolean(CommonConfigurationKeys.USE_FIR) && configuration[KAPT_OPTIONS] != null
override fun doAnalysis(configuration: CompilerConfiguration): Boolean {
TODO("Not yet implemented")
}
}
class Kapt4CompilerPluginRegistrar : CompilerPluginRegistrar() {
override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
Companion.registerExtensions(this)
}
override val supportsK2: Boolean
get() = true
companion object {
fun registerExtensions(extensionStorage: ExtensionStorage) = with(extensionStorage) {
FirAnalysisHandlerExtension.registerExtension(Kapt4AnalysisHandlerExtension())
}
}
}
+2 -1
View File
@@ -86,9 +86,10 @@ val outputJar = fileFrom(buildDir, "libs", "$compilerBaseName.jar")
val compilerModules: Array<String> by rootProject.extra val compilerModules: Array<String> by rootProject.extra
val distLibraryProjects = listOfNotNull( val distLibraryProjects = listOfNotNull(
":kotlin-annotation-processing", ":kotlin-annotation-processing-compiler",
":kotlin-annotation-processing-cli", ":kotlin-annotation-processing-cli",
":kotlin-annotation-processing-runtime", ":kotlin-annotation-processing-runtime",
":kotlin-annotation-processing",
":kotlin-annotations-jvm", ":kotlin-annotations-jvm",
":kotlin-ant", ":kotlin-ant",
":kotlin-daemon", ":kotlin-daemon",
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-annotation-processing-compiler</artifactId>
<version>ArtifactsTest.version</version>
<name>Kotlin Annotation Processing Compiler</name>
<description>Annotation Processor for Kotlin</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
</project>
@@ -25,4 +25,12 @@
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection> <developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url> <url>https://github.com/JetBrains/kotlin</url>
</scm> </scm>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-annotation-processing-compiler</artifactId>
<version>ArtifactsTest.version</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</project> </project>
+3 -1
View File
@@ -226,6 +226,7 @@ include ":kotlin-imports-dumper-compiler-plugin",
":kotlin-annotation-processing-base", ":kotlin-annotation-processing-base",
":kotlin-annotation-processing-runtime", ":kotlin-annotation-processing-runtime",
":kotlin-annotation-processing-embeddable", ":kotlin-annotation-processing-embeddable",
":kotlin-annotation-processing-compiler",
":kotlin-daemon-embeddable", ":kotlin-daemon-embeddable",
":kotlin-annotations-jvm", ":kotlin-annotations-jvm",
":kotlin-scripting-common", ":kotlin-scripting-common",
@@ -749,10 +750,11 @@ project(':examples:annotation-processor-example').projectDir = "$rootDir/librari
project(':kotlin-script-util').projectDir = "$rootDir/libraries/tools/kotlin-script-util" as File project(':kotlin-script-util').projectDir = "$rootDir/libraries/tools/kotlin-script-util" as File
project(':kotlin-annotation-processing-embeddable').projectDir = "$rootDir/plugins/kapt3/kotlin-annotation-processing-embeddable" as File project(':kotlin-annotation-processing-embeddable').projectDir = "$rootDir/plugins/kapt3/kotlin-annotation-processing-embeddable" as File
project(':kotlin-daemon-embeddable').projectDir = "$rootDir/prepare/kotlin-daemon-embeddable" as File project(':kotlin-daemon-embeddable').projectDir = "$rootDir/prepare/kotlin-daemon-embeddable" as File
project(':kotlin-annotation-processing').projectDir = "$rootDir/plugins/kapt3/kapt3-compiler" as File project(':kotlin-annotation-processing-compiler').projectDir = "$rootDir/plugins/kapt3/kapt3-compiler" as File
project(':kotlin-annotation-processing-cli').projectDir = "$rootDir/plugins/kapt3/kapt3-cli" as File project(':kotlin-annotation-processing-cli').projectDir = "$rootDir/plugins/kapt3/kapt3-cli" as File
project(':kotlin-annotation-processing-base').projectDir = "$rootDir/plugins/kapt3/kapt3-base" as File project(':kotlin-annotation-processing-base').projectDir = "$rootDir/plugins/kapt3/kapt3-base" as File
project(':kotlin-annotation-processing-runtime').projectDir = "$rootDir/plugins/kapt3/kapt3-runtime" as File project(':kotlin-annotation-processing-runtime').projectDir = "$rootDir/plugins/kapt3/kapt3-runtime" as File
project(':kotlin-annotation-processing').projectDir = "$rootDir/plugins/kapt4" as File
project(':kotlin-annotations-jvm').projectDir = "$rootDir/libraries/tools/kotlin-annotations-jvm" as File project(':kotlin-annotations-jvm').projectDir = "$rootDir/libraries/tools/kotlin-annotations-jvm" as File
project(':kotlin-scripting-common').projectDir = "$rootDir/libraries/scripting/common" as File project(':kotlin-scripting-common').projectDir = "$rootDir/libraries/scripting/common" as File
project(':kotlin-scripting-jvm').projectDir = "$rootDir/libraries/scripting/jvm" as File project(':kotlin-scripting-jvm').projectDir = "$rootDir/libraries/scripting/jvm" as File