Don't generate final modifier on static interface methods produced by @JvmStatic+@JvmOverloads from interface companion

#KT-35716 Fixed
This commit is contained in:
Mikhael Bogdanov
2020-10-30 19:21:42 +01:00
parent 7d0e9654bd
commit 7ec2d036ae
6 changed files with 53 additions and 2 deletions
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.psi.KtPureClassOrObject
import org.jetbrains.kotlin.psi.KtPureElement
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils.isInterface
import org.jetbrains.kotlin.resolve.calls.components.hasDefaultValue
import org.jetbrains.kotlin.resolve.isInlineClass
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
@@ -134,8 +135,9 @@ class DefaultParameterValueSubstitutor(val state: GenerationState) {
remainingParameters.map { DescriptorToSourceUtils.descriptorToDeclaration(it) as? KtParameter }
val generateAsFinal =
functionDescriptor.modality == Modality.FINAL ||
state.languageVersionSettings.supportsFeature(LanguageFeature.GenerateJvmOverloadsAsFinal)
(functionDescriptor.modality == Modality.FINAL ||
state.languageVersionSettings.supportsFeature(LanguageFeature.GenerateJvmOverloadsAsFinal)) &&
!isInterface(functionDescriptor.containingDeclaration)
val flags =
baseMethodFlags or
(if (isStatic) Opcodes.ACC_STATIC else 0) or
@@ -17739,6 +17739,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/jvmStatic/kt21246a.kt");
}
@TestMetadata("kt35716.kt")
public void testKt35716() throws Exception {
runTest("compiler/testData/codegen/box/jvmStatic/kt35716.kt");
}
@TestMetadata("kt9897_static.kt")
public void testKt9897_static() throws Exception {
runTest("compiler/testData/codegen/box/jvmStatic/kt9897_static.kt");
+29
View File
@@ -0,0 +1,29 @@
// JVM_TARGET: 1.8
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// FILE: Test.java
class Test {
public static String test1() {
return A.sayHello();
}
}
// FILE: simpleCompanionObject.kt
interface A {
companion object {
@JvmStatic
@JvmOverloads
fun sayHello(greeting: String = "OK"): String {
return greeting
}
}
}
fun box(): String {
if (Test.test1() != "OK") return "fail 1"
return "OK"
}
@@ -19139,6 +19139,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/jvmStatic/kt21246a.kt");
}
@TestMetadata("kt35716.kt")
public void testKt35716() throws Exception {
runTest("compiler/testData/codegen/box/jvmStatic/kt35716.kt");
}
@TestMetadata("kt9897_static.kt")
public void testKt9897_static() throws Exception {
runTest("compiler/testData/codegen/box/jvmStatic/kt9897_static.kt");
@@ -19139,6 +19139,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/jvmStatic/kt21246a.kt");
}
@TestMetadata("kt35716.kt")
public void testKt35716() throws Exception {
runTest("compiler/testData/codegen/box/jvmStatic/kt35716.kt");
}
@TestMetadata("kt9897_static.kt")
public void testKt9897_static() throws Exception {
runTest("compiler/testData/codegen/box/jvmStatic/kt9897_static.kt");
@@ -17739,6 +17739,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/jvmStatic/kt21246a.kt");
}
@TestMetadata("kt35716.kt")
public void testKt35716() throws Exception {
runTest("compiler/testData/codegen/box/jvmStatic/kt35716.kt");
}
@TestMetadata("kt9897_static.kt")
public void testKt9897_static() throws Exception {
runTest("compiler/testData/codegen/box/jvmStatic/kt9897_static.kt");