fix KT-9843 Bug in incremental compilation: module is not recompiled when optional parameter added

and KT-8434 Removing parameter with default value from function in different module breaks incremental compilation

#KT-9843 Fixed

#KT-8434 Fixed
This commit is contained in:
Michael Nedzelsky
2015-11-05 20:48:33 +03:00
parent 3dbb117598
commit 981d471ebe
26 changed files with 194 additions and 1 deletions
@@ -669,7 +669,7 @@ public class FunctionCodegen {
getDeprecatedAccessFlag(functionDescriptor) |
ACC_SYNTHETIC;
if (!(functionDescriptor instanceof ConstructorDescriptor)) {
flags |= ACC_STATIC;
flags |= ACC_STATIC | ACC_BRIDGE;
}
// $default methods are never private to be accessible from other class files (e.g. inner) without the need of synthetic accessors
flags &= ~ACC_PRIVATE;
@@ -0,0 +1,7 @@
class MyClass() {
fun test(s: String = "") {}
}
// TESTED_OBJECT_KIND: function
// TESTED_OBJECTS: MyClass, test$default
// FLAGS: ACC_PUBLIC, ACC_STATIC, ACC_BRIDGE, ACC_SYNTHETIC
@@ -0,0 +1,9 @@
class MyClass() {
companion object {
fun test(s: String, x:Int = 10) {}
}
}
// TESTED_OBJECT_KIND: function
// TESTED_OBJECTS: MyClass$Companion, test$default
// FLAGS: ACC_PUBLIC, ACC_STATIC, ACC_BRIDGE, ACC_SYNTHETIC
@@ -0,0 +1,5 @@
fun test(s: String = "") {}
// TESTED_OBJECT_KIND: function
// TESTED_OBJECTS: TopLevelFunKt, test$default
// FLAGS: ACC_PUBLIC, ACC_STATIC, ACC_BRIDGE, ACC_SYNTHETIC
@@ -516,6 +516,33 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest {
doTest(fileName);
}
}
@TestMetadata("compiler/testData/writeFlags/function/withDefaultArguments")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class WithDefaultArguments extends AbstractWriteFlagsTest {
public void testAllFilesPresentInWithDefaultArguments() throws Exception {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/function/withDefaultArguments"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("funInClass.kt")
public void testFunInClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/function/withDefaultArguments/funInClass.kt");
doTest(fileName);
}
@TestMetadata("funInClassObject.kt")
public void testFunInClassObject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/function/withDefaultArguments/funInClassObject.kt");
doTest(fileName);
}
@TestMetadata("topLevelFun.kt")
public void testTopLevelFun() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/function/withDefaultArguments/topLevelFun.kt");
doTest(fileName);
}
}
}
@TestMetadata("compiler/testData/writeFlags/hidden")
@@ -61,6 +61,30 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest {
doTest(fileName);
}
@TestMetadata("defaultParameterAdded")
public void testDefaultParameterAdded() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/defaultParameterAdded/");
doTest(fileName);
}
@TestMetadata("defaultParameterAddedForTopLevelFun")
public void testDefaultParameterAddedForTopLevelFun() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/defaultParameterAddedForTopLevelFun/");
doTest(fileName);
}
@TestMetadata("defaultParameterRemoved")
public void testDefaultParameterRemoved() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/defaultParameterRemoved/");
doTest(fileName);
}
@TestMetadata("defaultParameterRemovedForTopLevelFun")
public void testDefaultParameterRemovedForTopLevelFun() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/defaultParameterRemovedForTopLevelFun/");
doTest(fileName);
}
@TestMetadata("inlineFunctionInlined")
public void testInlineFunctionInlined() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/inlineFunctionInlined/");
@@ -0,0 +1,13 @@
Cleaning output files:
out/production/module1/a/A.class
End of files
Compiling files:
module1/src/module1_a.kt
End of files
Cleaning output files:
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/usage/Module2_usageKt.class
End of files
Compiling files:
module2/src/module2_usage.kt
End of files
@@ -0,0 +1,2 @@
module1->
module2->module1
@@ -0,0 +1,6 @@
package a
class A {
fun foo(s: String, x: Int = 10) {
}
}
@@ -0,0 +1,5 @@
package a
class A {
fun foo(s: String, x: Int = 10, y:Int = 20) {}
}
@@ -0,0 +1,7 @@
package usage
import a.A
fun main(args: Array<String>) {
A().foo("")
}
@@ -0,0 +1,14 @@
Cleaning output files:
out/production/module1/META-INF/module1.kotlin_module
out/production/module1/a/Module1_aKt.class
End of files
Compiling files:
module1/src/module1_a.kt
End of files
Cleaning output files:
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/usage/Module2_usageKt.class
End of files
Compiling files:
module2/src/module2_usage.kt
End of files
@@ -0,0 +1,2 @@
module1->
module2->module1
@@ -0,0 +1,3 @@
package a
fun foo(s: String, x: Int = 10) {}
@@ -0,0 +1,3 @@
package a
fun foo(s: String, x: Int = 10, y:Int = 20) {}
@@ -0,0 +1,5 @@
package usage
fun main(args: Array<String>) {
a.foo("")
}
@@ -0,0 +1,13 @@
Cleaning output files:
out/production/module1/a/A.class
End of files
Compiling files:
module1/src/module1_a.kt
End of files
Cleaning output files:
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/usage/Module2_usageKt.class
End of files
Compiling files:
module2/src/module2_usage.kt
End of files
@@ -0,0 +1,2 @@
module1->
module2->module1
@@ -0,0 +1,6 @@
package a
class A {
fun foo(x:Int = 10) {
}
}
@@ -0,0 +1,7 @@
package a
class A {
fun foo() {
}
}
@@ -0,0 +1,6 @@
package usage
fun b(param: a.A) {
param.foo()
}
@@ -0,0 +1,14 @@
Cleaning output files:
out/production/module1/META-INF/module1.kotlin_module
out/production/module1/a/Module1_aKt.class
End of files
Compiling files:
module1/src/module1_a.kt
End of files
Cleaning output files:
out/production/module2/META-INF/module2.kotlin_module
out/production/module2/usage/Module2_usageKt.class
End of files
Compiling files:
module2/src/module2_usage.kt
End of files
@@ -0,0 +1,2 @@
module1->
module2->module1
@@ -0,0 +1,3 @@
package a
fun foo(x: Int = 10) {}
@@ -0,0 +1,3 @@
package a
fun foo() {}
@@ -0,0 +1,5 @@
package usage
fun main(args: Array<String>) {
a.foo()
}