Skip to content

Commit

Permalink
refactor: Convert NameCriteria to a functional interface
Browse files Browse the repository at this point in the history
  • Loading branch information
felipebz committed May 18, 2024
1 parent d9e0702 commit 1f6af00
Showing 1 changed file with 6 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,37 +21,30 @@ package org.sonar.plugins.plsqlopen.api.matchers

import java.util.*

@FunctionalInterface
interface NameCriteria {
fun interface NameCriteria {

fun matches(name: String): Boolean

companion object {

@JvmStatic
fun any(): NameCriteria =
object : NameCriteria {
override fun matches(name: String) = true
}
NameCriteria { true }

@JvmStatic
fun `is`(exactName: String): NameCriteria =
object : NameCriteria {
override fun matches(name: String) = exactName.equals(name, ignoreCase = true)
}
NameCriteria { name -> exactName.equals(name, ignoreCase = true) }

@JvmStatic
fun startsWith(prefix: String): NameCriteria =
object : NameCriteria {
override fun matches(name: String) = name.uppercase(Locale.getDefault())
NameCriteria { name ->
name.uppercase(Locale.getDefault())
.startsWith(prefix.uppercase(Locale.getDefault()))
}

@JvmStatic
fun `in`(vararg prefix: String): NameCriteria =
object : NameCriteria {
override fun matches(name: String) = prefix.any { name.equals(it, ignoreCase = true) }
}
NameCriteria { name -> prefix.any { name.equals(it, ignoreCase = true) } }

}

Expand Down

0 comments on commit 1f6af00

Please sign in to comment.