From 31c884c8123ad5f6c9376503effce3fb2ded5d55 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sun, 27 Oct 2024 16:26:04 +0100 Subject: Refactor: Optimize NEUInternalName class caching and naming (#2841) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../at/hannibal2/skyhanni/utils/NEUInternalName.kt | 68 ++++++++++------------ 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt index 50444f711..3b155c642 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt @@ -6,73 +6,67 @@ class NEUInternalName private constructor(private val internalName: String) { companion object { - private val map = mutableMapOf() + private val internalNameMap = mutableMapOf() - val NONE = "NONE".asInternalName() - val MISSING_ITEM = "MISSING_ITEM".asInternalName() + val NONE = "NONE".toInternalName() + val MISSING_ITEM = "MISSING_ITEM".toInternalName() - val JASPER_CRYSTAL = "JASPER_CRYSTAL".asInternalName() - val RUBY_CRYSTAL = "RUBY_CRYSTAL".asInternalName() - val SKYBLOCK_COIN = "SKYBLOCK_COIN".asInternalName() - val WISP_POTION = "WISP_POTION".asInternalName() + val JASPER_CRYSTAL = "JASPER_CRYSTAL".toInternalName() + val RUBY_CRYSTAL = "RUBY_CRYSTAL".toInternalName() + val SKYBLOCK_COIN = "SKYBLOCK_COIN".toInternalName() + val WISP_POTION = "WISP_POTION".toInternalName() - fun String.asInternalName(): NEUInternalName { - val internalName = uppercase().replace(" ", "_") - return map.getOrPut(internalName) { NEUInternalName(internalName) } + @Deprecated("Name changed", ReplaceWith("this.toInternalName()")) + fun String.asInternalName() = toInternalName() + + fun String.toInternalName(): NEUInternalName = uppercase().replace(" ", "_").let { + internalNameMap.getOrPut(it) { NEUInternalName(it) } } - fun fromItemNameOrNull(itemName: String): NEUInternalName? = - ItemNameResolver.getInternalNameOrNull(itemName.removeSuffix(" Pet")) ?: getCoins(itemName) + private val itemNameCache = mutableMapOf() - fun fromItemNameOrInternalName(itemName: String): NEUInternalName = - fromItemNameOrNull(itemName) ?: itemName.asInternalName() + fun fromItemNameOrNull(itemName: String): NEUInternalName? = itemNameCache.getOrPut(itemName) { + ItemNameResolver.getInternalNameOrNull(itemName.removeSuffix(" Pet")) ?: getCoins(itemName) + } - private fun getCoins(itemName: String): NEUInternalName? = if (isCoins(itemName)) SKYBLOCK_COIN else null + fun fromItemNameOrInternalName(itemName: String): NEUInternalName = fromItemNameOrNull(itemName) ?: itemName.toInternalName() - private fun isCoins(itemName: String): Boolean = - itemName.lowercase().let { - when (it) { - "coin", "coins", - "skyblock coin", "skyblock coins", - "skyblock_coin", "skyblock_coins", - -> true + private fun getCoins(itemName: String): NEUInternalName? = when { + isCoins(itemName) -> SKYBLOCK_COIN + else -> null + } - else -> false - } - } + private val coinNames = setOf( + "coin", "coins", + "skyblock coin", "skyblock coins", + "skyblock_coin", "skyblock_coins", + ) + private fun isCoins(itemName: String): Boolean = itemName.lowercase() in coinNames fun fromItemName(itemName: String): NEUInternalName = fromItemNameOrNull(itemName) ?: run { val name = "itemName:$itemName" ItemUtils.addMissingRepoItem(name, "Could not find internal name for $name") - return MISSING_ITEM + MISSING_ITEM } } fun asString() = internalName - override fun equals(other: Any?): Boolean { - if (other is NEUInternalName) { - return internalName == other.internalName - } - return super.equals(other) - } + override fun equals(other: Any?) = other is NEUInternalName && internalName == other.internalName override fun toString(): String = "internalName:$internalName" override fun hashCode(): Int = internalName.hashCode() - @Suppress("WrongEqualsTypeParameter") - fun equals(other: String) = internalName == other - fun contains(other: String) = internalName.contains(other) fun startsWith(other: String) = internalName.startsWith(other) fun endsWith(other: String) = internalName.endsWith(other) - fun replace(oldValue: String, newValue: String) = - internalName.replace(oldValue.uppercase(), newValue.uppercase()).asInternalName() + fun replace(oldValue: String, newValue: String): NEUInternalName = + internalName.replace(oldValue, newValue, ignoreCase = true).toInternalName() fun isKnownItem(): Boolean = getItemStackOrNull() != null || this == SKYBLOCK_COIN } -- cgit