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; + +}