diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JavaUpToDateIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JavaUpToDateIT.kt new file mode 100644 index 00000000000..b9ba4e2892a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/JavaUpToDateIT.kt @@ -0,0 +1,72 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. 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.gradle + +import org.jetbrains.kotlin.gradle.util.modify +import org.junit.Test + +class JavaUpToDateIT : BaseGradleIT() { + @Test + fun testKotlinMethodBodyIsChanged() { + val project = Project("javaUpToDate", GradleVersionRequired.AtLeast("4.3")) + + project.build("build") { + assertSuccessful() + assertTasksExecuted(":compileKotlin", ":compileJava", ":compileTestKotlin", ":compileTestJava") + } + + project.projectFile("MainKotlinClass.kt").modify { + it.replace( + "fun number(): Int = 0", + "fun number(): Int = 1" + ) + } + project.build("build") { + assertSuccessful() + assertTasksExecuted(":compileKotlin", ":compileTestKotlin") + assertTasksUpToDate(":compileJava", ":compileTestJava") + } + } + + @Test + fun testKotlinNewLineAdded() { + val project = Project("javaUpToDate", GradleVersionRequired.AtLeast("4.3")) + + project.build("build") { + assertSuccessful() + assertTasksExecuted(":compileKotlin", ":compileJava", ":compileTestKotlin", ":compileTestJava") + } + + project.projectFile("MainKotlinClass.kt").modify { "\n$it" } + project.build("build") { + assertSuccessful() + assertTasksExecuted(":compileKotlin", ":compileTestKotlin") + assertTasksUpToDate(":compileJava", ":compileTestJava") + } + } + + @Test + fun testPrivateMethodSignatureChanged() { + val project = Project("javaUpToDate", GradleVersionRequired.AtLeast("4.3")) + + project.build("build") { + assertSuccessful() + assertTasksExecuted(":compileKotlin", ":compileJava", ":compileTestKotlin", ":compileTestJava") + } + + project.projectFile("MainKotlinClass.kt").modify { + it.replace( + "private fun privateMethod() = 0", + "private fun privateMethod() = \"0\"" + ) + } + project.build("build") { + assertSuccessful() + // see https://github.com/gradle/gradle/issues/5013 + assertTasksExecuted(":compileKotlin", ":compileJava", ":compileTestKotlin", ":compileTestJava") + } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/build.gradle new file mode 100644 index 00000000000..1e12b34c08a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/build.gradle @@ -0,0 +1,21 @@ +buildscript { + repositories { + mavenLocal() + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +apply plugin: "kotlin" +apply plugin: "java" + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/main/java/foo/MainJavaClass.java b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/main/java/foo/MainJavaClass.java new file mode 100644 index 00000000000..400537492a8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/main/java/foo/MainJavaClass.java @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package foo; + +public class MainJavaClass { + public int numberFromKotlin() { + return (new MainKotlinClass()).number(); + } + + public int number() { + return 0; + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/main/kotlin/foo/MainKotlinClass.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/main/kotlin/foo/MainKotlinClass.kt new file mode 100644 index 00000000000..87801657213 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/main/kotlin/foo/MainKotlinClass.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package foo + +class MainKotlinClass { + fun numberFromJava(): Int = MainJavaClass().number() + + fun number(): Int = 0 + + private fun privateMethod() = 0 +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/test/java/foo/TestJavaClass.java b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/test/java/foo/TestJavaClass.java new file mode 100644 index 00000000000..892b876f6f1 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/test/java/foo/TestJavaClass.java @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package foo; + +public class TestJavaClass { + public int numberFromMainKotlin() { + return (new MainKotlinClass()).number(); + } + + public int numberFromMainJava() { + return (new MainJavaClass()).number(); + } + + public int numberFromTestKotlin() { + return (new TestKotlinClass()).number(); + } + + public int number() { + return 0; + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/test/kotlin/foo/TestKotlinClass.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/test/kotlin/foo/TestKotlinClass.kt new file mode 100644 index 00000000000..645f193fb04 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/javaUpToDate/src/test/kotlin/foo/TestKotlinClass.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package foo + +class TestKotlinClass { + fun numberFromMainKotlin(): Int = MainKotlinClass().number() + + fun numberFromMainJava(): Int = MainJavaClass().number() + + fun numberFromTestJava(): Int = TestJavaClass().number() + + fun number(): Int = 0 +} \ No newline at end of file