KT-43196 member extension property can't be "primary" in inline class

This commit is contained in:
Dmitry Petrov
2020-11-16 11:30:37 +03:00
parent b6f958f856
commit 93f868fb96
5 changed files with 89 additions and 1 deletions
@@ -0,0 +1,15 @@
inline class Z1(val s: Int) {
val String.ext: Int get() = 239
}
inline class Z2(val s: Int) {
val String.s: Int get() = 239
}
interface StrS {
val String.s: Int
}
inline class Z3(val s: Int) : StrS {
override val String.s: Int get() = 239
}
@@ -0,0 +1,63 @@
@kotlin.Metadata
public interface StrS {
// source: 'memberExtensionProperty.kt'
public abstract method getS(@org.jetbrains.annotations.NotNull p0: java.lang.String): int
}
@kotlin.Metadata
public final class Z1 {
// source: 'memberExtensionProperty.kt'
private final field s: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): Z1
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final static method getExt-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public final method getS(): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.Metadata
public final class Z2 {
// source: 'memberExtensionProperty.kt'
private final field s: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): Z2
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getS(): int
public final static method getS-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@kotlin.Metadata
public final class Z3 {
// source: 'memberExtensionProperty.kt'
private final field s: int
private synthetic method <init>(p0: int): void
public synthetic final static method box-impl(p0: int): Z3
public static method constructor-impl(p0: int): int
public method equals(p0: java.lang.Object): boolean
public static method equals-impl(p0: int, p1: java.lang.Object): boolean
public final static method equals-impl0(p0: int, p1: int): boolean
public final method getS(): int
public method getS(@org.jetbrains.annotations.NotNull p0: java.lang.String): int
public static method getS-impl(p0: int, @org.jetbrains.annotations.NotNull p1: java.lang.String): int
public method hashCode(): int
public static method hashCode-impl(p0: int): int
public method toString(): java.lang.String
public static method toString-impl(p0: int): java.lang.String
public synthetic final method unbox-impl(): int
}
@@ -957,6 +957,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithManyKindsOfMembers.kt");
}
@TestMetadata("memberExtensionProperty.kt")
public void testMemberExtensionProperty() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/memberExtensionProperty.kt");
}
@TestMetadata("noArgConstructorForInlineClassParameter.kt")
public void testNoArgConstructorForInlineClassParameter() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/noArgConstructorForInlineClassParameter.kt");
@@ -927,6 +927,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/inlineClassWithManyKindsOfMembers.kt");
}
@TestMetadata("memberExtensionProperty.kt")
public void testMemberExtensionProperty() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/memberExtensionProperty.kt");
}
@TestMetadata("noArgConstructorForInlineClassParameter.kt")
public void testNoArgConstructorForInlineClassParameter() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/noArgConstructorForInlineClassParameter.kt");
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.resolve
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.TypeSubstitutor
import org.jetbrains.kotlin.types.TypeUtils
@@ -64,6 +63,7 @@ fun CallableDescriptor.isGetterOfUnderlyingPropertyOfInlineClass() =
this is PropertyGetterDescriptor && correspondingProperty.isUnderlyingPropertyOfInlineClass()
fun VariableDescriptor.isUnderlyingPropertyOfInlineClass(): Boolean {
if (extensionReceiverParameter != null) return false
val containingDeclaration = this.containingDeclaration
if (!containingDeclaration.isInlineClass()) return false