diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/properties/privateFakeOverrideFromSuperclass.kt b/compiler/testData/codegen/boxWithStdlib/reflection/properties/privateFakeOverrideFromSuperclass.kt new file mode 100644 index 00000000000..718470fbfbd --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/reflection/properties/privateFakeOverrideFromSuperclass.kt @@ -0,0 +1,6 @@ +open class A(private val p: Int) +class B : A(42) + +fun box() = + if (B::class.properties.isEmpty()) "OK" + else "Fail: invisible fake overrides should not appear in KClass.properties" diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index da6c2574d52..166b912bb8e 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -2890,6 +2890,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode doTestWithStdlib(fileName); } + @TestMetadata("privateFakeOverrideFromSuperclass.kt") + public void testPrivateFakeOverrideFromSuperclass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/properties/privateFakeOverrideFromSuperclass.kt"); + doTestWithStdlib(fileName); + } + @TestMetadata("simpleGetProperties.kt") public void testSimpleGetProperties() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/properties/simpleGetProperties.kt"); diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt index 40db574ea77..69a5fe6ab7e 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt @@ -17,6 +17,7 @@ package kotlin.reflect.jvm.internal import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.serialization.deserialization.findClassAcrossModuleDependencies import kotlin.reflect.* @@ -66,7 +67,8 @@ class KClassImpl(override val jClass: Class) : KCallableContainerImpl(), K .filterIsInstance() .filter { descriptor -> (descriptor.getExtensionReceiverParameter() != null) == extension && - (descriptor.getKind().isReal() || !declared) + (descriptor.getKind().isReal() || !declared) && + descriptor.getVisibility() != Visibilities.INVISIBLE_FAKE } .map(create) .toList()