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:
@@ -669,7 +669,7 @@ public class FunctionCodegen {
|
|||||||
getDeprecatedAccessFlag(functionDescriptor) |
|
getDeprecatedAccessFlag(functionDescriptor) |
|
||||||
ACC_SYNTHETIC;
|
ACC_SYNTHETIC;
|
||||||
if (!(functionDescriptor instanceof ConstructorDescriptor)) {
|
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
|
// $default methods are never private to be accessible from other class files (e.g. inner) without the need of synthetic accessors
|
||||||
flags &= ~ACC_PRIVATE;
|
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
|
||||||
+9
@@ -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);
|
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")
|
@TestMetadata("compiler/testData/writeFlags/hidden")
|
||||||
|
|||||||
@@ -61,6 +61,30 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("inlineFunctionInlined")
|
||||||
public void testInlineFunctionInlined() throws Exception {
|
public void testInlineFunctionInlined() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("jps-plugin/testData/incremental/multiModule/inlineFunctionInlined/");
|
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
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
module1->
|
||||||
|
module2->module1
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package a
|
||||||
|
|
||||||
|
class A {
|
||||||
|
fun foo(s: String, x: Int = 10) {
|
||||||
|
}
|
||||||
|
}
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package a
|
||||||
|
|
||||||
|
class A {
|
||||||
|
fun foo(s: String, x: Int = 10, y:Int = 20) {}
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
package usage
|
||||||
|
|
||||||
|
import a.A
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
A().foo("")
|
||||||
|
}
|
||||||
+14
@@ -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
|
||||||
Vendored
+2
@@ -0,0 +1,2 @@
|
|||||||
|
module1->
|
||||||
|
module2->module1
|
||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package a
|
||||||
|
|
||||||
|
fun foo(s: String, x: Int = 10) {}
|
||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package a
|
||||||
|
|
||||||
|
fun foo(s: String, x: Int = 10, y:Int = 20) {}
|
||||||
Vendored
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package usage
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
a.foo("")
|
||||||
|
}
|
||||||
+13
@@ -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
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
module1->
|
||||||
|
module2->module1
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package a
|
||||||
|
|
||||||
|
class A {
|
||||||
|
fun foo(x:Int = 10) {
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
package a
|
||||||
|
|
||||||
|
class A {
|
||||||
|
fun foo() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
package usage
|
||||||
|
|
||||||
|
fun b(param: a.A) {
|
||||||
|
param.foo()
|
||||||
|
}
|
||||||
|
|
||||||
Vendored
+14
@@ -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
|
||||||
Vendored
+2
@@ -0,0 +1,2 @@
|
|||||||
|
module1->
|
||||||
|
module2->module1
|
||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package a
|
||||||
|
|
||||||
|
fun foo(x: Int = 10) {}
|
||||||
Vendored
+3
@@ -0,0 +1,3 @@
|
|||||||
|
package a
|
||||||
|
|
||||||
|
fun foo() {}
|
||||||
Vendored
+5
@@ -0,0 +1,5 @@
|
|||||||
|
package usage
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
a.foo()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user