Fix KotlinReflectionInternalError on invoking callBy with defaults in supertypes
There are two parts in this change: 1) Previously, we looked up $default methods with the incorrect signature in supertypes. For example in defaultInSuperClass.kt, we'd try to find a method foo$default with the signature `(B, String, String, int, Object)` in the class A. Now we're modifying the array of parameter types on each step if we're looking for a static $default method, by assigning its first element to be the containing class. This fixes cases when defaults come from a superclass. 2) For interfaces, $default methods are actually located in the corresponding DefaultImpls class. Now we look up that class and search for the $default method there. Note that this is needed because of KT-33430. This fixes cases when defaults come from a superinterface. #KT-13936 Fixed
This commit is contained in:
+10
@@ -20614,6 +20614,16 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/reflection/callBy/defaultAndNonDefaultIntertwined.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInSuperClass.kt")
|
||||
public void testDefaultInSuperClass() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/reflection/callBy/defaultInSuperClass.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("defaultInSuperInterface.kt")
|
||||
public void testDefaultInSuperInterface() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/reflection/callBy/defaultInSuperInterface.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("extensionFunction.kt")
|
||||
public void testExtensionFunction() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/reflection/callBy/extensionFunction.kt");
|
||||
|
||||
Reference in New Issue
Block a user