diff --git a/jps/jps-plugin/build.gradle.kts b/jps/jps-plugin/build.gradle.kts
index 7f9473809a5..2f9dc67a4ce 100644
--- a/jps/jps-plugin/build.gradle.kts
+++ b/jps/jps-plugin/build.gradle.kts
@@ -77,6 +77,7 @@ dependencies {
testRuntimeOnly(toolsJar())
testRuntimeOnly(project(":kotlin-reflect"))
testRuntimeOnly(project(":kotlin-script-runtime"))
+ testImplementation("org.projectlombok:lombok:1.18.16")
}
sourceSets {
diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractKotlinJpsBuildTestCase.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractKotlinJpsBuildTestCase.kt
index af2fd43a72c..7c720a34ac6 100644
--- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractKotlinJpsBuildTestCase.kt
+++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractKotlinJpsBuildTestCase.kt
@@ -47,6 +47,10 @@ abstract class AbstractKotlinJpsBuildTestCase : BaseKotlinJpsBuildTestCase() {
return addDependency(KotlinJpsLibrary.JsStdLib)
}
+ protected fun addKotlinLombokDependency(): JpsLibrary {
+ return addDependency(KotlinJpsLibrary.Lombok)
+ }
+
private fun addDependency(library: KotlinJpsLibrary): JpsLibrary {
return addDependency(myProject, library)
}
diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt
index 8532229cf94..05b660732cf 100644
--- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt
+++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt
@@ -957,6 +957,11 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() {
}
}
+ fun testKotlinLombokProjectBuild() {
+ initProject(LOMBOK)
+ buildAllModules().assertSuccessful()
+ }
+
private fun BuildResult.checkErrors() {
val actualErrors = getMessages(BuildMessage.Kind.ERROR)
.map { it as CompilerMessage }
diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt
index 8afb685cb9d..dcb8937249d 100644
--- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt
+++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestBase.kt
@@ -12,10 +12,11 @@ import org.jetbrains.jps.model.java.JpsJavaExtensionService
import org.jetbrains.jps.model.module.JpsModule
import org.jetbrains.jps.util.JpsPathUtil
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
+import org.jetbrains.kotlin.config.CompilerSettings
import org.jetbrains.kotlin.config.KotlinFacetSettings
import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension
import org.jetbrains.kotlin.platform.js.JsPlatforms
-import org.jetbrains.kotlin.test.util.KtTestUtil
+import org.jetbrains.kotlin.utils.PathUtil
import java.io.File
import java.nio.file.Paths
@@ -62,6 +63,7 @@ abstract class KotlinJpsBuildTestBase : AbstractKotlinJpsBuildTestCase() {
JVM_FULL_RUNTIME,
JS_STDLIB_WITHOUT_FACET,
JS_STDLIB,
+ LOMBOK
}
protected fun initProject(libraryDependency: LibraryDependency = LibraryDependency.NONE) {
@@ -77,6 +79,10 @@ abstract class KotlinJpsBuildTestBase : AbstractKotlinJpsBuildTestCase() {
addKotlinJavaScriptStdlibDependency()
setupKotlinJSFacet()
}
+ LibraryDependency.LOMBOK -> {
+ addKotlinLombokDependency()
+ setupKotlinLombokFacet()
+ }
}
}
@@ -93,6 +99,21 @@ abstract class KotlinJpsBuildTestBase : AbstractKotlinJpsBuildTestCase() {
}
}
+ private fun setupKotlinLombokFacet() {
+ myProject.modules.forEach {
+ val facet = KotlinFacetSettings()
+ facet.useProjectSettings = false
+ facet.compilerSettings = CompilerSettings().also {
+ it.additionalArguments = "-Xallow-no-source-files -Xplugin=${PathUtil.kotlinPathsForDistDirectory.lombokPluginJarPath}"
+ }
+
+ it.container.setChild(
+ JpsKotlinFacetModuleExtension.KIND,
+ JpsKotlinFacetModuleExtension(facet)
+ )
+ }
+ }
+
companion object {
const val JDK_NAME = "IDEA_JDK"
const val PROJECT_NAME = "kotlinProject"
diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinLibraries.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinLibraries.kt
index e717e5256c5..16757a2350c 100644
--- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinLibraries.kt
+++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinLibraries.kt
@@ -36,6 +36,11 @@ enum class KotlinJpsLibrary(val id: String, vararg val roots: File) {
JsTest(
"KotlinJavaScriptTest",
PathUtil.kotlinPathsForDistDirectory.jsKotlinTestJarPath
+ ),
+ Lombok(
+ "lombok",
+ PathUtil.kotlinPathsForDistDirectory.stdlibPath,
+ File(lombok.Lombok::class.java.protectionDomain.codeSource.location.toURI().path)
);
fun create(project: JpsProject): JpsLibrary {
diff --git a/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/kotlinProject.iml b/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/kotlinProject.iml
new file mode 100644
index 00000000000..c90834f2d60
--- /dev/null
+++ b/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/kotlinProject.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/kotlinProject.ipr b/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/kotlinProject.ipr
new file mode 100644
index 00000000000..52e3d65e4fb
--- /dev/null
+++ b/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/kotlinProject.ipr
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/src/JavaUsage.java b/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/src/JavaUsage.java
new file mode 100644
index 00000000000..f6f2ddc700c
--- /dev/null
+++ b/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/src/JavaUsage.java
@@ -0,0 +1,10 @@
+public class JavaUsage {
+
+ public static void main(String[] args) {
+ SomePojo obj = new SomePojo();
+ obj.setAge(12);
+ boolean v = obj.isHuman();
+ obj.setHuman(!v);
+ System.out.println(obj);
+ }
+}
diff --git a/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/src/KotlinUsage.kt b/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/src/KotlinUsage.kt
new file mode 100644
index 00000000000..d96d2a0d51a
--- /dev/null
+++ b/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/src/KotlinUsage.kt
@@ -0,0 +1,8 @@
+fun main() {
+ val obj = SomePojo()
+ obj.name = "test"
+ obj.age = 12
+ val v = obj.isHuman
+ obj.isHuman = !v
+ println(obj)
+}
diff --git a/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/src/SomePojo.java b/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/src/SomePojo.java
new file mode 100644
index 00000000000..050f023be43
--- /dev/null
+++ b/jps/jps-plugin/testData/general/KotlinLombokProjectBuild/src/SomePojo.java
@@ -0,0 +1,12 @@
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter @Setter @ToString
+public class SomePojo {
+
+ private String name;
+ private int age;
+ private boolean human;
+
+}