Support @JvmStatic and @JvmOverload in annotation companion
This commit is contained in:
+2
-1
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.codegen
|
||||
|
||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil.getDispatchReceiverParameterForConstructorCall
|
||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface
|
||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
@@ -137,7 +138,7 @@ class DefaultParameterValueSubstitutor(val state: GenerationState) {
|
||||
val generateAsFinal =
|
||||
(functionDescriptor.modality == Modality.FINAL ||
|
||||
state.languageVersionSettings.supportsFeature(LanguageFeature.GenerateJvmOverloadsAsFinal)) &&
|
||||
!isInterface(functionDescriptor.containingDeclaration)
|
||||
!isJvmInterface(functionDescriptor.containingDeclaration)
|
||||
val flags =
|
||||
baseMethodFlags or
|
||||
(if (isStatic) Opcodes.ACC_STATIC else 0) or
|
||||
|
||||
@@ -188,8 +188,7 @@ public class DescriptorAsmUtil {
|
||||
|
||||
if (functionDescriptor.getModality() == Modality.FINAL && !(functionDescriptor instanceof ConstructorDescriptor)) {
|
||||
DeclarationDescriptor containingDeclaration = functionDescriptor.getContainingDeclaration();
|
||||
if (!(containingDeclaration instanceof ClassDescriptor) ||
|
||||
((ClassDescriptor) containingDeclaration).getKind() != ClassKind.INTERFACE) {
|
||||
if (!isJvmInterface(containingDeclaration)) {
|
||||
flags |= ACC_FINAL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.codegen
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.UnsignedTypes
|
||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil.isJvmInterface
|
||||
import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
||||
import org.jetbrains.kotlin.codegen.context.CodegenContext
|
||||
import org.jetbrains.kotlin.codegen.context.FieldOwnerContext
|
||||
@@ -244,7 +245,7 @@ fun CallableDescriptor.isJvmStaticInObjectOrClassOrInterface(): Boolean =
|
||||
DescriptorUtils.isNonCompanionObject(it) ||
|
||||
// This is necessary because for generation of @JvmStatic methods from companion of class A
|
||||
// we create a synthesized descriptor containing in class A
|
||||
DescriptorUtils.isClassOrEnumClass(it) || DescriptorUtils.isInterface(it)
|
||||
DescriptorUtils.isClassOrEnumClass(it) || isJvmInterface(it)
|
||||
}
|
||||
|
||||
fun CallableDescriptor.isJvmStaticInCompanionObject(): Boolean =
|
||||
|
||||
Reference in New Issue
Block a user