tschuchort
05/06/2019, 1:10 PMclass Name<K : Name.Kind, E : Name.NamedElement>(val kind: K, val namedElement: E) {
sealed class Kind {
object Simple : Kind()
object Qualified : Kind()
}
sealed class Element {
object Type : Element()
object Package : Element()
object Method : Element()
}
}
fun onlyQualifiedNames(n: Name<Name.Kind.Qualified, *>)
fun onlyMethodNames(n: Name<*, Name.Element.Method>)
fun onlySimplePackageNames(n: Name<Name.Kind.Simple, Name.Element.Package>)
fun anyName(n: Name<*,*>)
What do you think? It feels way over engineered.
If we were only interested in either qualified/simple or type/package/method then I would use sealed classes of course. But here we have a 2-dimensional relationship.