diff options
| author | Linnea Gräf <nea@nea.moe> | 2023-11-18 06:06:18 +0100 |
|---|---|---|
| committer | Linnea Gräf <nea@nea.moe> | 2023-12-04 20:46:40 +0100 |
| commit | ac14fe8fe04c44e2e08fa90b5cc8fdce293c2ab1 (patch) | |
| tree | 79a72c3593d4e0304419c259559b371f12bd5249 /src/main/java/at/hannibal2/skyhanni/utils/repopatterns/RepoPatternImpl.kt | |
| parent | d9a1a8dda967f40bd4a7a2707bf3ff5411093e7d (diff) | |
| download | SkyHanni-repopatterns.tar.gz SkyHanni-repopatterns.tar.bz2 SkyHanni-repopatterns.zip | |
Add RepoPatternsrepopatterns
RepoPatterns allow us to easily update regexes without creating a new release.
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils/repopatterns/RepoPatternImpl.kt')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/repopatterns/RepoPatternImpl.kt | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/repopatterns/RepoPatternImpl.kt b/src/main/java/at/hannibal2/skyhanni/utils/repopatterns/RepoPatternImpl.kt new file mode 100644 index 000000000..89e9f99ec --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/repopatterns/RepoPatternImpl.kt @@ -0,0 +1,49 @@ +package at.hannibal2.skyhanni.utils.repopatterns + +import java.util.regex.Pattern +import kotlin.reflect.KProperty + +/** + * Internal class implementing [RepoPattern]. Obtain via [RepoPattern.pattern]. + */ +class RepoPatternImpl( + override val defaultPattern: String, + override val key: String, +) : RepoPattern { + var compiledPattern: Pattern = Pattern.compile(defaultPattern) + var wasLoadedRemotely = false + override var wasOverridden = false + + /** + * Whether the pattern has obtained a lock on a code location and a key. + * Once set, no other code locations can access this repo pattern (and therefore the key). + * @see RepoPatternManager.checkExclusivity + */ + var hasObtainedLock = false + + override fun getValue(thisRef: Any?, property: KProperty<*>): Pattern { + verifyLock(thisRef, property) + return super.getValue(thisRef, property) + } + + /** + * Try to lock the [key] to this key location. + * @see RepoPatternManager.checkExclusivity + */ + fun verifyLock(thisRef: Any?, property: KProperty<*>) { + if (hasObtainedLock) return + hasObtainedLock = true + val owner = RepoPatternKeyOwner(thisRef?.javaClass, property) + RepoPatternManager.checkExclusivity(owner, key) + } + + + override val value: Pattern + get() { + return compiledPattern + } + override val isLoadedRemotely: Boolean + get() { + return wasLoadedRemotely + } +} |
