From cc346aef64945012ab584e794e42454da03afe43 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Tue, 23 Jan 2018 14:03:51 +0100 Subject: [PATCH] Support @JvmStatic for interface companion objects in backend --- .../AccessorForFunctionDescriptor.java | 2 +- .../AccessorForPropertyDescriptor.java | 2 +- .../org/jetbrains/kotlin/codegen/AsmUtil.java | 3 +-- .../kotlin/codegen/CallReceiver.java | 2 +- .../kotlin/codegen/ExpressionCodegen.java | 2 +- .../kotlin/codegen/MemberCodegen.java | 2 +- .../jetbrains/kotlin/codegen/StackValue.java | 2 +- .../jetbrains/kotlin/codegen/codegenUtil.kt | 4 +-- .../codegen/state/KotlinTypeMapper.java | 2 +- .../testData/codegen/box/jvmStatic/kt6301.kt | 27 +++++++++++++++++++ .../codegen/box/jvmStatic/kt6301_2.kt | 27 +++++++++++++++++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 12 +++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 12 +++++++++ .../LightAnalysisModeTestGenerated.java | 12 +++++++++ 14 files changed, 100 insertions(+), 11 deletions(-) create mode 100644 compiler/testData/codegen/box/jvmStatic/kt6301.kt create mode 100644 compiler/testData/codegen/box/jvmStatic/kt6301_2.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java index d10ac35b5e2..cfb88c1e7f5 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.java @@ -45,7 +45,7 @@ public class AccessorForFunctionDescriptor extends AbstractAccessorForFunctionDe this.nameSuffix = nameSuffix; initialize(DescriptorUtils.getReceiverParameterType(descriptor.getExtensionReceiverParameter()), - descriptor instanceof ConstructorDescriptor || CodegenUtilKt.isJvmStaticInObjectOrClass(descriptor) + descriptor instanceof ConstructorDescriptor || CodegenUtilKt.isJvmStaticInObjectOrClassOrInterface(descriptor) ? null : descriptor.getDispatchReceiverParameter(), copyTypeParameters(descriptor), diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java index 1911ee71391..154f76e6b7a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.java @@ -47,7 +47,7 @@ public class AccessorForPropertyDescriptor extends PropertyDescriptorImpl implem ) { this(property, property.getType(), DescriptorUtils.getReceiverParameterType(property.getExtensionReceiverParameter()), /* dispatchReceiverParameter = */ - CodegenUtilKt.isJvmStaticInObjectOrClass(property) ? null : property.getDispatchReceiverParameter(), + CodegenUtilKt.isJvmStaticInObjectOrClassOrInterface(property) ? null : property.getDispatchReceiverParameter(), containingDeclaration, superCallTarget, nameSuffix, getterAccessorRequired, setterAccessorRequired); } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index f09e9ae8af2..7d9fd09d72f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -33,7 +33,6 @@ import org.jetbrains.kotlin.codegen.serialization.JvmStringTable; import org.jetbrains.kotlin.codegen.state.GenerationState; import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper; import org.jetbrains.kotlin.config.JvmTarget; -import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.load.java.JavaVisibilities; @@ -194,7 +193,7 @@ public class AsmUtil { public static boolean isStaticMethod(OwnerKind kind, CallableMemberDescriptor functionDescriptor) { return isStaticKind(kind) || KotlinTypeMapper.isStaticAccessor(functionDescriptor) || - CodegenUtilKt.isJvmStaticInObjectOrClass(functionDescriptor); + CodegenUtilKt.isJvmStaticInObjectOrClassOrInterface(functionDescriptor); } public static boolean isStaticKind(OwnerKind kind) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/CallReceiver.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/CallReceiver.java index ec46d15e72a..63efb709bae 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/CallReceiver.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/CallReceiver.java @@ -92,7 +92,7 @@ public class CallReceiver extends StackValue { CallableDescriptor descriptor = resolvedCall.getResultingDescriptor(); - if (CodegenUtilKt.isJvmStaticInObjectOrClass(descriptor)) { + if (CodegenUtilKt.isJvmStaticInObjectOrClassOrInterface(descriptor)) { return Type.VOID_TYPE; } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 5e5e6b8d83d..80396eed99e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2631,7 +2631,7 @@ public class ExpressionCodegen extends KtVisitor impleme } if (thisOrOuterClass.equals(context.getThisDescriptor()) && - !CodegenUtilKt.isJvmStaticInObjectOrClass(context.getFunctionDescriptor())) { + !CodegenUtilKt.isJvmStaticInObjectOrClassOrInterface(context.getFunctionDescriptor())) { return StackValue.local(0, typeMapper.mapType(thisOrOuterClass)); } else if (shouldGenerateSingletonAsThisOrOuterFromContext(thisOrOuterClass)) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index 6f57bf7ab66..ec3e4e701f2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -822,7 +822,7 @@ public abstract class MemberCodegen