fix: silence Kotlin override-parameter-name and redundant-!! warnings

LocalCache implements both Dao and ICacheProvider, which disagreed on the
parameter names of getOrCreateUser (hex vs pubkey) and
getOrCreateAddressableNote (address vs key), so every override warned about
named-argument mismatches. Align both interfaces on pubkey/address and update
the implementations that used the other name.

Also drop the non-null assertions the compiler already smart-casts away in
LimitsPolicy.capLimits and RelayProberFlowTest, and match the WebSocketListener
parameter names in NegentropyStallRepro.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017X7C797zGYsiui5yj1JQcY
This commit is contained in:
Claude
2026-08-08 00:41:02 +00:00
parent f4640b6ea1
commit dc03209bb5
13 changed files with 25 additions and 25 deletions
@@ -29,7 +29,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey
* needing the full [LocalCache] API.
*/
interface Dao {
fun getOrCreateUser(hex: HexKey): User
fun getOrCreateUser(pubkey: HexKey): User
fun getOrCreateNote(hex: HexKey): Note
@@ -685,12 +685,12 @@ object LocalCache : ILocalCache, ICacheProvider, Dao {
fun load(keys: Set<String>): Set<User> = keys.mapNotNullTo(mutableSetOf(), ::checkGetOrCreateUser)
override fun getOrCreateUser(hex: HexKey): User {
require(isValidHex(key = hex)) { "$hex is not a valid hex" }
override fun getOrCreateUser(pubkey: HexKey): User {
require(isValidHex(key = pubkey)) { "$pubkey is not a valid hex" }
// Pass `this` as the UserContext — User now resolves each pinned
// addressable note (kind:10002 / 10050 / 10019) lazily on first
// read, instead of all-or-nothing at construction time.
return users.getOrCreate(hex) { User(it, userContext) }
return users.getOrCreate(pubkey) { User(it, userContext) }
}
/** [UserContext] bridge to this cache's addressable lookup. */
@@ -2106,7 +2106,7 @@ class AccountViewModel(
fun checkGetOrCreateUser(key: HexKey): User? = LocalCache.checkGetOrCreateUser(key)
override fun getOrCreateUser(hex: HexKey): User = LocalCache.getOrCreateUser(hex)
override fun getOrCreateUser(pubkey: HexKey): User = LocalCache.getOrCreateUser(pubkey)
fun getUserIfExists(hex: HexKey): User? = LocalCache.getUserIfExists(hex)
@@ -39,7 +39,7 @@ import org.junit.Test
class NewMessageTaggerKeyParseTest {
val dao: Dao =
object : Dao {
override fun getOrCreateUser(hex: String): User = User(hex) { addr -> getOrCreateAddressableNoteInternal(addr) }
override fun getOrCreateUser(pubkey: String): User = User(pubkey) { addr -> getOrCreateAddressableNoteInternal(addr) }
override fun getOrCreateNote(hex: String) =
com.vitorpamplona.amethyst.model
@@ -93,7 +93,7 @@ interface ICacheProvider {
* @param address The note's ID in address format
* @return The AddressableNote (existing or newly created)
*/
fun getOrCreateAddressableNote(key: Address): AddressableNote
fun getOrCreateAddressableNote(address: Address): AddressableNote
/**
* Gets the event stream for cache updates.
@@ -181,7 +181,7 @@ class ThreadAssemblerTest {
override fun checkGetOrCreateNote(hexKey: HexKey): Note? = notesById[hexKey]
override fun getOrCreateAddressableNote(key: Address): AddressableNote = error("not used by ThreadAssembler in this test")
override fun getOrCreateAddressableNote(address: Address): AddressableNote = error("not used by ThreadAssembler in this test")
override fun getEventStream(): ICacheEventStream = error("not used by ThreadAssembler in this test")
@@ -90,7 +90,7 @@ class ConcordChannelListLeaveTest {
override fun checkGetOrCreateNote(hexKey: HexKey): Note? = null
override fun getOrCreateAddressableNote(key: Address): AddressableNote = AddressableNote(key)
override fun getOrCreateAddressableNote(address: Address): AddressableNote = AddressableNote(address)
override fun getEventStream(): ICacheEventStream = error("not used")
@@ -88,7 +88,7 @@ class ConcordListLateArrivalTest {
override fun checkGetOrCreateNote(hexKey: HexKey): Note? = null
override fun getOrCreateAddressableNote(key: Address): AddressableNote = notes.getOrPut(key.toValue()) { AddressableNote(key) }
override fun getOrCreateAddressableNote(address: Address): AddressableNote = notes.getOrPut(address.toValue()) { AddressableNote(address) }
override fun getEventStream(): ICacheEventStream = error("not used")
@@ -121,7 +121,7 @@ class ReplyContextTest {
override fun checkGetOrCreateNote(hexKey: HexKey): Note? = notesById[hexKey]
override fun getOrCreateAddressableNote(key: Address): AddressableNote = error("not used by ReplyContext.from")
override fun getOrCreateAddressableNote(address: Address): AddressableNote = error("not used by ReplyContext.from")
override fun getEventStream(): ICacheEventStream = error("not used by ReplyContext.from")
@@ -904,9 +904,9 @@ class DesktopLocalCache : ICacheProvider {
Note(hexKey)
}
override fun getOrCreateAddressableNote(key: Address): AddressableNote =
addressableNotes.getOrCreate(key.toValue()) {
AddressableNote(key)
override fun getOrCreateAddressableNote(address: Address): AddressableNote =
addressableNotes.getOrCreate(address.toValue()) {
AddressableNote(address)
}
// ----- Channel operations -----
@@ -128,8 +128,8 @@ class LimitsPolicy(
*/
private fun capLimits(filters: List<Filter>): List<Filter> {
val max = limits.maxLimit ?: return filters
if (filters.none { it.limit != null && it.limit!! > max }) return filters
return filters.map { if (it.limit != null && it.limit!! > max) it.copy(limit = max) else it }
if (filters.none { it.limit != null && it.limit > max }) return filters
return filters.map { if (it.limit != null && it.limit > max) it.copy(limit = max) else it }
}
private fun targetLimit(current: Int?): Int? =
@@ -327,9 +327,9 @@ class RelayProberFlowTest {
}
check.join()
val verdict = result!![fast]!!
assertEquals(true, verdict.writeAccepted, "the listed relay's OK must still be awaited and recorded")
assertNull(result!![foreign], "the foreign relay must not appear in the result")
val verdicts = result!!
assertEquals(true, verdicts[fast]!!.writeAccepted, "the listed relay's OK must still be awaited and recorded")
assertNull(verdicts[foreign], "the foreign relay must not appear in the result")
}
@Test
@@ -103,10 +103,10 @@ class NegentropyStallRepro {
object : WebSocketListener {
override fun onOpen(
pingMillis: Int,
usingCompression: Boolean,
compression: Boolean,
) {
log(" [<-open] ${url.url} ping=${pingMillis}ms deflate=$usingCompression")
out.onOpen(pingMillis, usingCompression)
log(" [<-open] ${url.url} ping=${pingMillis}ms deflate=$compression")
out.onOpen(pingMillis, compression)
}
override suspend fun onMessage(text: String) {
@@ -130,10 +130,10 @@ class NegentropyStallRepro {
override fun onFailure(
t: Throwable,
code: Int?,
errorMessage: String?,
response: String?,
) {
log(" [<-failure] ${url.url} code=$code msg=$errorMessage err=${t.message}")
out.onFailure(t, code, errorMessage)
log(" [<-failure] ${url.url} code=$code msg=$response err=${t.message}")
out.onFailure(t, code, response)
}
}