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:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
class JavaClass {
|
||||
private String myX = "";
|
||||
|
||||
public String getX() {
|
||||
return myX;
|
||||
}
|
||||
|
||||
public JavaClass setX(String x) {
|
||||
myX = x;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fun box(): String {
|
||||
val javaClass = JavaClass()
|
||||
if (javaClass.x.isEmpty()) {
|
||||
javaClass.x = "OK"
|
||||
}
|
||||
return javaClass.x
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
class JavaClass {
|
||||
private String myX = "";
|
||||
|
||||
public String getX() {
|
||||
return myX;
|
||||
}
|
||||
|
||||
public double setX(String x) {
|
||||
myX = x;
|
||||
return 1.0;
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
fun box(): String {
|
||||
val javaClass = JavaClass()
|
||||
if (javaClass.x.isEmpty()) {
|
||||
javaClass.x = "OK"
|
||||
}
|
||||
return javaClass.x
|
||||
}
|
||||
+12
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user