Support @JvmStatic in inline class companion object
#KT-27107
This commit is contained in:
@@ -330,7 +330,8 @@ public class FunctionCodegen {
|
||||
@NotNull DeclarationDescriptor containingDeclaration
|
||||
) {
|
||||
return !canDelegateMethodBodyToInlineClass(origin, functionDescriptor, contextKind, containingDeclaration) ||
|
||||
!functionDescriptor.getOverriddenDescriptors().isEmpty();
|
||||
!functionDescriptor.getOverriddenDescriptors().isEmpty() ||
|
||||
CodegenUtilKt.isJvmStaticInInlineClass(functionDescriptor);
|
||||
}
|
||||
|
||||
private static boolean canDelegateMethodBodyToInlineClass(
|
||||
@@ -343,6 +344,9 @@ public class FunctionCodegen {
|
||||
if (contextKind == OwnerKind.ERASED_INLINE_CLASS) return false;
|
||||
if (origin.getOriginKind() == JvmDeclarationOriginKind.UNBOX_METHOD_OF_INLINE_CLASS) return false;
|
||||
|
||||
// Synthesized class member descriptors corresponding to JvmStatic members of companion object
|
||||
if (CodegenUtilKt.isJvmStaticInInlineClass(functionDescriptor)) return false;
|
||||
|
||||
// descriptor corresponds to the underlying value
|
||||
if (functionDescriptor instanceof PropertyAccessorDescriptor) {
|
||||
PropertyDescriptor property = ((PropertyAccessorDescriptor) functionDescriptor).getCorrespondingProperty();
|
||||
|
||||
@@ -33,17 +33,13 @@ import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.renderer.DescriptorRenderer
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.*
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils.isSubclass
|
||||
import org.jetbrains.kotlin.resolve.annotations.hasJvmStaticAnnotation
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getFirstArgumentExpression
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||
import org.jetbrains.kotlin.resolve.isInlineClassType
|
||||
import org.jetbrains.kotlin.resolve.jvm.AsmTypes
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
||||
@@ -257,6 +253,9 @@ fun CallableDescriptor.isJvmStaticInObjectOrClassOrInterface(): Boolean =
|
||||
fun CallableDescriptor.isJvmStaticInCompanionObject(): Boolean =
|
||||
isJvmStaticIn { DescriptorUtils.isCompanionObject(it) }
|
||||
|
||||
fun CallableDescriptor.isJvmStaticInInlineClass(): Boolean =
|
||||
isJvmStaticIn { it.isInlineClass() }
|
||||
|
||||
private fun CallableDescriptor.isJvmStaticIn(predicate: (DeclarationDescriptor) -> Boolean): Boolean =
|
||||
when (this) {
|
||||
is PropertyAccessorDescriptor -> {
|
||||
|
||||
Reference in New Issue
Block a user