Hi! I see an error for the plugins that don't use ...
# arrow-meta
m
Hi! I see an error for the plugins that don't use the default TypeChecker
Copy code
/**
 * The [typeChecker] function allows the user to provide a custom implementation of the [KotlinTypeChecker].
 * With a custom [KotlinTypeChecker], we can redefine what subtyping and type equality means.
 */
fun typeChecker(replace: (KotlinTypeChecker) -> KotlinTypeChecker): arrow.meta.phases.config.StorageComponentContainer =
  storageComponent(
    registerModuleComponents = { container, moduleDescriptor ->
      val defaultTypeChecker = KotlinTypeChecker.DEFAULT
      val replacement = replace(defaultTypeChecker)
      if (replacement != defaultTypeChecker) {
        val defaultTypeCheckerField = KotlinTypeChecker::class.java.getDeclaredField("DEFAULT")
        setFinalStatic(defaultTypeCheckerField, replace(defaultTypeChecker))
      }
    },
    check = { _, _, _ ->
    }
  )
and tries Field::class.java.getDeclaredField("modifiers")
Copy code
@Throws(Exception::class)
internal fun setFinalStatic(field: Field, newValue: Any) {
  field.isAccessible = true

  val modifiersField = Field::class.java.getDeclaredField("modifiers")
  modifiersField.isAccessible = true
  modifiersField.setInt(field, field.modifiers and Modifier.FINAL.inv())

  field.set(null, newValue)
}