From 11de0ae4a33e132f6dfa810ab1e766dfa42a78c0 Mon Sep 17 00:00:00 2001 From: yairm210 Date: Wed, 23 Jul 2025 00:05:28 +0300 Subject: [PATCH] chore(purity): MultiFilter --- build.gradle.kts | 2 +- core/src/com/unciv/logic/MultiFilter.kt | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index f08587c27c..1b805f2dfb 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -37,7 +37,7 @@ plugins { // This is *with* gradle 8.2 downloaded according the project specs, no idea what that's about kotlin("multiplatform") version "1.9.24" kotlin("plugin.serialization") version "1.9.24" - id("io.github.yairm210.purity-plugin") version "0.0.33" apply(false) + id("io.github.yairm210.purity-plugin") version "0.0.34" apply(false) } allprojects { diff --git a/core/src/com/unciv/logic/MultiFilter.kt b/core/src/com/unciv/logic/MultiFilter.kt index 98db3d4599..86fcfc04cb 100644 --- a/core/src/com/unciv/logic/MultiFilter.kt +++ b/core/src/com/unciv/logic/MultiFilter.kt @@ -1,5 +1,6 @@ package com.unciv.logic +import yairm210.purity.annotations.LocalState import yairm210.purity.annotations.Readonly import yairm210.purity.annotations.Pure @@ -20,7 +21,7 @@ object MultiFilter { * @param filterFunction The single filter implementation * @param forUniqueValidityTests Inverts the `non-[filter]` test because Unique validity doesn't check for actual matching */ - @Readonly @Suppress("purity") // Calls function invoke + @Readonly fun multiFilter( input: String, filterFunction: (String) -> Boolean, @@ -37,13 +38,15 @@ object MultiFilter { return filterFunction(input) } - @Pure @Suppress("purity") // calls flatmap{} + @Pure fun getAllSingleFilters(input: String): Sequence = when { - input.hasSurrounding(andPrefix, andSuffix) && input.contains(andSeparator) -> + input.hasSurrounding(andPrefix, andSuffix) && input.contains(andSeparator) -> { // Resolve "AND" filters - input.removeSurrounding(andPrefix, andSuffix) + @LocalState + val filters = input.removeSurrounding(andPrefix, andSuffix) .splitToSequence(andSeparator) - .flatMap { getAllSingleFilters(it) } + filters.flatMap { getAllSingleFilters(it) } + } input.hasSurrounding(notPrefix, notSuffix) -> // Simply remove "non" syntax getAllSingleFilters(input.removeSurrounding(notPrefix, notSuffix))