diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java index 0c66a13f97f..ae813003af1 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java @@ -21,7 +21,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.resolve.DescriptorUtils; -import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt; public class AccessorForFunctionDescriptor extends AbstractAccessorForFunctionDescriptor implements AccessorForCallableDescriptor { private final FunctionDescriptor calleeDescriptor; @@ -39,7 +38,7 @@ public class AccessorForFunctionDescriptor extends AbstractAccessorForFunctionDe this.superCallTarget = superCallTarget; initialize(DescriptorUtils.getReceiverParameterType(descriptor.getExtensionReceiverParameter()), - descriptor instanceof ConstructorDescriptor || AnnotationUtilKt.isPlatformStaticInObjectOrClass(descriptor) + descriptor instanceof ConstructorDescriptor || CodegenUtilKt.isJvmStaticInObjectOrClass(descriptor) ? null : descriptor.getDispatchReceiverParameter(), copyTypeParameters(descriptor), diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index de61b9ebc5d..b0d39770156 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -178,7 +178,7 @@ public class AsmUtil { public static boolean isStaticMethod(OwnerKind kind, CallableMemberDescriptor functionDescriptor) { return isStaticKind(kind) || KotlinTypeMapper.isStaticAccessor(functionDescriptor) || - AnnotationUtilKt.isPlatformStaticInObjectOrClass(functionDescriptor); + CodegenUtilKt.isJvmStaticInObjectOrClass(functionDescriptor); } public static boolean isStaticKind(OwnerKind kind) { @@ -198,7 +198,7 @@ public class AsmUtil { flags |= Opcodes.ACC_NATIVE; } - if (AnnotationUtilKt.isPlatformStaticInCompanionObject(functionDescriptor)) { + if (CodegenUtilKt.isJvmStaticInCompanionObject(functionDescriptor)) { // Native method will be a member of the class, the companion object method will be delegated to it flags &= ~Opcodes.ACC_NATIVE; } @@ -636,7 +636,7 @@ public class AsmUtil { ) { KotlinType type = parameter.getReturnType(); if (type == null || isNullableType(type)) return; - + int index = frameMap.getIndex(parameter); Type asmType = typeMapper.mapType(type); if (asmType.getSort() == Type.OBJECT || asmType.getSort() == Type.ARRAY) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 8462aa94a03..0c677741446 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -68,7 +68,6 @@ import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.BindingContextUtils; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; import org.jetbrains.kotlin.resolve.DescriptorUtils; -import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt; import org.jetbrains.kotlin.resolve.bindingContextUtil.BindingContextUtilsKt; import org.jetbrains.kotlin.resolve.calls.callResolverUtil.CallResolverUtilKt; import org.jetbrains.kotlin.resolve.calls.callUtil.CallUtilKt; @@ -3089,7 +3088,7 @@ public class ExpressionCodegen extends KtVisitor impleme boolean isSingleton = calleeContainingClass.getKind().isSingleton(); if (isSingleton) { if (calleeContainingClass.equals(context.getThisDescriptor()) && - !AnnotationUtilKt.isPlatformStaticInObjectOrClass(context.getContextDescriptor())) { + !CodegenUtilKt.isJvmStaticInObjectOrClass(context.getContextDescriptor())) { return StackValue.local(0, typeMapper.mapType(calleeContainingClass)); } else if (isEnumEntry(calleeContainingClass)) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java index d89831cc1af..db65861304d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/FunctionCodegen.java @@ -49,7 +49,6 @@ import org.jetbrains.kotlin.psi.KtNamedFunction; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; import org.jetbrains.kotlin.resolve.DescriptorUtils; -import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt; import org.jetbrains.kotlin.resolve.constants.ArrayValue; import org.jetbrains.kotlin.resolve.constants.ConstantValue; import org.jetbrains.kotlin.resolve.constants.KClassValue; @@ -202,7 +201,7 @@ public class FunctionCodegen { generateDelegateForDefaultImpl(functionDescriptor, origin.getElement()); } - boolean staticInCompanionObject = AnnotationUtilKt.isPlatformStaticInCompanionObject(functionDescriptor); + boolean staticInCompanionObject = CodegenUtilKt.isJvmStaticInCompanionObject(functionDescriptor); if (staticInCompanionObject) { ImplementationBodyCodegen parentBodyCodegen = (ImplementationBodyCodegen) memberCodegen.getParentCodegen(); parentBodyCodegen.addAdditionalTask(new JvmStaticGenerator(functionDescriptor, origin, state, parentBodyCodegen)); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index 38cdc7ca617..5421facebd5 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -43,7 +43,6 @@ import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.BindingContextUtils; import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils; -import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt; import org.jetbrains.kotlin.resolve.constants.ConstantValue; import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator; import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt; @@ -698,7 +697,7 @@ public abstract class MemberCodegen Boolean): Boolean = + when (this) { + is PropertyAccessorDescriptor -> { + val propertyDescriptor = correspondingProperty + predicate(propertyDescriptor.containingDeclaration) && + (hasJvmStaticAnnotation() || propertyDescriptor.hasJvmStaticAnnotation()) + } + else -> predicate(containingDeclaration) && hasJvmStaticAnnotation() + } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java index cb67e396a17..4d6d6029a8a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.java @@ -59,7 +59,6 @@ import org.jetbrains.kotlin.psi.KtFile; import org.jetbrains.kotlin.psi.KtFunctionLiteral; import org.jetbrains.kotlin.psi.KtLambdaExpression; import org.jetbrains.kotlin.resolve.*; -import org.jetbrains.kotlin.resolve.annotations.AnnotationUtilKt; import org.jetbrains.kotlin.resolve.calls.model.DefaultValueArgument; import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; import org.jetbrains.kotlin.resolve.calls.model.ResolvedValueArgument; @@ -683,7 +682,7 @@ public class KotlinTypeMapper { boolean isStaticInvocation = (isStaticDeclaration(functionDescriptor) && !(functionDescriptor instanceof ImportedFromObjectCallableDescriptor)) || isStaticAccessor(functionDescriptor) || - AnnotationUtilKt.isPlatformStaticInObjectOrClass(functionDescriptor); + CodegenUtilKt.isJvmStaticInObjectOrClass(functionDescriptor); if (isStaticInvocation) { invokeOpcode = INVOKESTATIC; } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt index 7098b636f62..2ee89b4fd43 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationUtil.kt @@ -16,10 +16,10 @@ package org.jetbrains.kotlin.resolve.annotations -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.descriptors.MemberDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor -import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget -import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.constants.ConstantValue @@ -44,22 +44,6 @@ private val STRICTFP_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.Strictfp") fun DeclarationDescriptor.findStrictfpAnnotation() = DescriptorUtils.getAnnotationByFqName(annotations, STRICTFP_ANNOTATION_FQ_NAME) -fun CallableDescriptor.isPlatformStaticInObjectOrClass(): Boolean = - isPlatformStaticIn { DescriptorUtils.isNonCompanionObject(it) || DescriptorUtils.isClassOrEnumClass(it) } - -fun CallableDescriptor.isPlatformStaticInCompanionObject(): Boolean = - isPlatformStaticIn { DescriptorUtils.isCompanionObject(it) } - -private fun CallableDescriptor.isPlatformStaticIn(predicate: (DeclarationDescriptor) -> Boolean): Boolean = - when (this) { - is PropertyAccessorDescriptor -> { - val propertyDescriptor = correspondingProperty - predicate(propertyDescriptor.containingDeclaration) && - (hasJvmStaticAnnotation() || propertyDescriptor.hasJvmStaticAnnotation()) - } - else -> predicate(containingDeclaration) && hasJvmStaticAnnotation() - } - fun AnnotationDescriptor.argumentValue(parameterName: String): Any? { val constant: ConstantValue<*>? = allValueArguments.entries .singleOrNull { it.key.name.asString() == parameterName }