KT-10747 "Incompatible stack heights" when compiling call to Java setter with non-void return type using property syntax

#KT-10747 Fixed
This commit is contained in:
Valentin Kipyatkov
2016-01-20 20:14:58 +03:00
parent d2d0f399db
commit 3a7ed33de1
6 changed files with 55 additions and 0 deletions
@@ -1168,6 +1168,11 @@ public abstract class StackValue {
else {
coerce(topOfStackType, ArraysKt.last(setter.getParameterTypes()), v);
setter.genInvokeInstruction(v);
Type returnType = setter.getReturnType();
if (returnType != Type.VOID_TYPE) {
pop(v, returnType);
}
}
}
@@ -0,0 +1,12 @@
class JavaClass {
private String myX = "";
public String getX() {
return myX;
}
public JavaClass setX(String x) {
myX = x;
return this;
}
}
@@ -0,0 +1,7 @@
fun box(): String {
val javaClass = JavaClass()
if (javaClass.x.isEmpty()) {
javaClass.x = "OK"
}
return javaClass.x
}
@@ -0,0 +1,12 @@
class JavaClass {
private String myX = "";
public String getX() {
return myX;
}
public double setX(String x) {
myX = x;
return 1.0;
}
}
@@ -0,0 +1,7 @@
fun box(): String {
val javaClass = JavaClass()
if (javaClass.x.isEmpty()) {
javaClass.x = "OK"
}
return javaClass.x
}
@@ -904,6 +904,18 @@ public class BlackBoxAgainstJavaCodegenTestGenerated extends AbstractBlackBoxCod
doTestAgainstJava(fileName);
}
@TestMetadata("setterNonVoid1.kt")
public void testSetterNonVoid1() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxAgainstJava/syntheticExtensions/setterNonVoid1.kt");
doTestAgainstJava(fileName);
}
@TestMetadata("setterNonVoid2.kt")
public void testSetterNonVoid2() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxAgainstJava/syntheticExtensions/setterNonVoid2.kt");
doTestAgainstJava(fileName);
}
@TestMetadata("_protected.kt")
public void test_protected() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxAgainstJava/syntheticExtensions/_protected.kt");