JVM_IR: don't remap current method signature when detecting clashes
TODO: don't repeatedly map signatures of inherited functions either.
This commit is contained in:
+5
-3
@@ -376,11 +376,13 @@ open class ClassCodegen protected constructor(
|
||||
}
|
||||
|
||||
private fun generateMethod(method: IrFunction) {
|
||||
jvmSignatureClashDetector.trackMethod(method)
|
||||
if (method.origin == IrDeclarationOrigin.FAKE_OVERRIDE) {
|
||||
jvmSignatureClashDetector.trackFakeOverrideMethod(method)
|
||||
return
|
||||
}
|
||||
|
||||
if (method.origin == IrDeclarationOrigin.FAKE_OVERRIDE) return
|
||||
val signature = FunctionCodegen(method, this).generate().asmMethod
|
||||
|
||||
jvmSignatureClashDetector.trackMethod(method, RawSignature(signature.name, signature.descriptor, MemberKind.METHOD))
|
||||
when (val metadata = method.metadata) {
|
||||
is MetadataSource.Property -> {
|
||||
// We can't check for JvmLoweredDeclarationOrigin.SYNTHETIC_METHOD_FOR_PROPERTY_ANNOTATIONS because for interface methods
|
||||
|
||||
+7
-7
@@ -27,9 +27,13 @@ class JvmSignatureClashDetector(
|
||||
fieldsBySignature.getOrPut(rawSignature) { SmartSet.create() }.add(irField)
|
||||
}
|
||||
|
||||
fun trackMethod(irFunction: IrFunction) {
|
||||
if (irFunction is IrSimpleFunction && irFunction.isFakeOverride && irFunction.dispatchReceiverParameter != null) {
|
||||
for (overriddenFunction in getOverriddenFunctions(irFunction)) {
|
||||
fun trackMethod(irFunction: IrFunction, rawSignature: RawSignature) {
|
||||
methodsBySignature.getOrPut(rawSignature) { SmartSet.create() }.add(irFunction)
|
||||
}
|
||||
|
||||
fun trackFakeOverrideMethod(irFunction: IrFunction) {
|
||||
if (irFunction.dispatchReceiverParameter != null) {
|
||||
for (overriddenFunction in getOverriddenFunctions(irFunction as IrSimpleFunction)) {
|
||||
trackMethod(irFunction, mapRawSignature(overriddenFunction))
|
||||
}
|
||||
} else {
|
||||
@@ -42,10 +46,6 @@ class JvmSignatureClashDetector(
|
||||
return RawSignature(jvmSignature.asmMethod.name, jvmSignature.asmMethod.descriptor, MemberKind.METHOD)
|
||||
}
|
||||
|
||||
private fun trackMethod(irFunction: IrFunction, rawSignature: RawSignature) {
|
||||
methodsBySignature.getOrPut(rawSignature) { SmartSet.create() }.add(irFunction)
|
||||
}
|
||||
|
||||
private fun getOverriddenFunctions(irFunction: IrSimpleFunction): Set<IrFunction> {
|
||||
val result = HashSet<IrFunction>()
|
||||
collectOverridesOf(irFunction, result)
|
||||
|
||||
Reference in New Issue
Block a user