[IR] KnownSignatures WIP
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrFunctionSignature.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrFunctionSignature.kt
new file mode 100644
index 0000000..eefa7fb
--- /dev/null
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/IrFunctionSignature.kt
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.backend.common
+
+import org.jetbrains.kotlin.backend.common.IrFunctionSignature.ParameterSignature
+import org.jetbrains.kotlin.ir.declarations.IrFunction
+import org.jetbrains.kotlin.name.CallableId
+import org.jetbrains.kotlin.name.ClassId
+import org.jetbrains.kotlin.name.FqName
+import org.jetbrains.kotlin.name.Name
+import kotlin.reflect.KProperty
+
+sealed class IrSignatureContainer(parent: IrSignatureContainer?) {
+    val name: FqName = (parent?.name ?: FqName.ROOT).child(Name.identifier(this.javaClass.simpleName))
+}
+
+open class IrPackageSignature(parent: IrSignatureContainer?) : IrSignatureContainer(parent) {
+    protected val Fun = IrFunctionSignature(
+        callableId = null,
+        extensionParameter = IrFunctionSignature.ParameterSignature.MISSING,
+        dispatchParameter = IrFunctionSignature.ParameterSignature.MISSING,
+        regularParameters = null,
+    )
+}
+
+open class IrClassSignature(parent: IrSignatureContainer?) : IrSignatureContainer(parent), IrTypeSignature {
+    val classId = ClassId(name.parent(), name.shortName()) // fixme
+
+    override val classifier: ClassId?
+        get() = classId
+    override val isNullable: Boolean?
+        get() = false
+
+    protected val Fun = IrFunctionSignature(
+        callableId = null,
+        extensionParameter = ParameterSignature(IrTypeSignatureImpl(classId)),
+        dispatchParameter = IrFunctionSignature.ParameterSignature.MISSING,
+        regularParameters = null,
+    )
+}
+
+data class IrFunctionSignature(
+    val callableId: CallableId?,
+    val dispatchParameter: ParameterSignature?,
+    val extensionParameter: ParameterSignature?,
+    val regularParameters: List<ParameterSignature>?,
+) {
+    operator fun invoke(vararg regularParameters: IrTypeSignature): IrFunctionSignature =
+        copy(regularParameters = regularParameters.map { ParameterSignature(it) })
+
+    fun extension(clazzType: IrClassSignature): IrFunctionSignature =
+        copy(extensionParameter = ParameterSignature(IrTypeSignatureImpl(clazzType.classId)))
+
+    operator fun provideDelegate(thisArg: Any?, property: KProperty<*>): IrFunctionSignature =
+        copy(callableId = CallableId(Name.identifier(property.name)))
+
+    @Suppress("NOTHING_TO_INLINE")
+    inline operator fun getValue(thisArg: Any?, property: KProperty<*>): IrFunctionSignature = this
+
+    data class ParameterSignature(val type: IrTypeSignature) {
+        companion object {
+            val MISSING = ParameterSignature(IrTypeSignature.MISSING)
+            val WILDCARD = ParameterSignature(IrTypeSignature.WILDCARD)
+        }
+    }
+}
+
+sealed interface IrTypeSignature {
+    val classifier: ClassId?
+    val isNullable: Boolean?
+
+    companion object {
+        val MISSING = IrTypeSignatureImpl(null, null)
+        val WILDCARD = IrTypeSignatureImpl(null, null)
+
+        inline fun <reified T> type(): IrTypeSignature = TODO()
+    }
+}
+
+val IrTypeSignature.asNullable: IrTypeSignature
+    get() = IrTypeSignatureImpl(classifier, true)
+
+data class IrTypeSignatureImpl(
+    override val classifier: ClassId?,
+    override val isNullable: Boolean? = false,
+) : IrTypeSignature
+
+
+fun IrFunction.matches(signature: IrFunctionSignature): Boolean = TODO()
\ No newline at end of file
diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/KnownSignatures.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/KnownSignatures.kt
new file mode 100644
index 0000000..0ae1c30
--- /dev/null
+++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/KnownSignatures.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.backend.common
+
+import org.jetbrains.kotlin.backend.common.IrTypeSignature.Companion.WILDCARD
+import org.jetbrains.kotlin.ir.declarations.IrFunction
+
+@Suppress("ClassName")
+object KnownSignatures {
+
+    object kotlin : IrPackageSignature(null) {
+        object Any : IrClassSignature(this) {
+            val toString by Fun()
+            val equals by Fun(Any.asNullable)
+            val hashCode by Fun()
+        }
+
+        object Boolean : IrClassSignature(this)
+        object Int : IrClassSignature(this)
+
+        object Array : IrClassSignature(this) {
+            val get by Fun(Int)
+            val set by Fun(Int, WILDCARD)
+        }
+
+        object collections : IrPackageSignature(this) {
+            object List : IrClassSignature(this)
+        }
+    }
+
+    object java : IrPackageSignature(null) {
+        object util : IrPackageSignature(this) {
+            object List : IrClassSignature(this)
+        }
+    }
+}
+
+
+private fun test(function: IrFunction) {
+    function.matches(KnownSignatures.kotlin.Array.get)
+}
\ No newline at end of file