From d90c38328727ab6bc0988325752a15245c47d1c1 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Wed, 24 Jun 2020 22:37:50 +0300 Subject: [PATCH] Fine tuned fake override validator for internals --- .../common/overrides/FakeOverrideChecker.kt | 31 ++++++++++++++++--- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrideChecker.kt b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrideChecker.kt index 0c778696575..996684da726 100644 --- a/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrideChecker.kt +++ b/compiler/ir/serialization.common/src/org/jetbrains/kotlin/backend/common/overrides/FakeOverrideChecker.kt @@ -40,7 +40,14 @@ class FakeOverrideChecker( .filter { it.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE } .filterNot { it.visibility == Visibilities.PRIVATE || it.visibility == Visibilities.INVISIBLE_FAKE } - val descriptorSignatures = descriptorFakeOverrides + val (internalDescriptorFakeOverrides, restDescriptorFakeOverrides) = + descriptorFakeOverrides.partition{ it.visibility == Visibilities.INTERNAL } + + val internalDescriptorSignatures = internalDescriptorFakeOverrides + .map { with(descriptorMangler) { it.signatureString }} + .sorted() + + val restDescriptorSignatures = restDescriptorFakeOverrides .map { with(descriptorMangler) { it.signatureString }} .sorted() @@ -52,14 +59,28 @@ class FakeOverrideChecker( checkOverriddenSymbols(it) } - val irSignatures = irFakeOverrides + val (internalIrFakeOverrides, restIrFakeOverrides) = + irFakeOverrides.partition{ it.visibility == Visibilities.INTERNAL } + + val internalIrSignatures = internalIrFakeOverrides .map { with(irMangler) { it.signatureString }} .sorted() - assert(descriptorSignatures == irSignatures) { + val restIrSignatures = restIrFakeOverrides + .map { with(irMangler) { it.signatureString }} + .sorted() + + require(restDescriptorSignatures == restIrSignatures) { "[IR VALIDATION] Fake override mismatch for ${clazz.fqNameWhenAvailable!!}\n" + - "\tDescriptor based: $descriptorSignatures\n" + - "\tIR based : $irSignatures" + "\tDescriptor based: $restDescriptorSignatures\n" + + "\tIR based : $restIrSignatures" + } + + // There can be internal fake overrides in IR absent in descriptors. + require(internalIrSignatures.containsAll(internalDescriptorSignatures)) { + "[IR VALIDATION] Internal fake override mismatch for ${clazz.fqNameWhenAvailable!!}\n" + + "\tDescriptor based: $internalDescriptorSignatures\n" + + "\tIR based : $internalIrSignatures" } }