Simplify registration

This commit is contained in:
Dominic Fox 2019-03-04 14:19:04 +00:00
parent 4f7ea8cd52
commit a8f5e82bb7

View File

@ -34,24 +34,18 @@ object CordappResolver {
fun register(cordapp: Cordapp) { fun register(cordapp: Cordapp) {
val existingClasses = cordappClasses.keys val existingClasses = cordappClasses.keys
val classesToRegister = cordapp.cordappClasses.toSet() val classesToRegister = cordapp.cordappClasses.toSet()
val alreadyRegisteredClasses = existingClasses.intersect(classesToRegister) val notAlreadyRegisteredClasses = classesToRegister - existingClasses
val notAlreadyRegisteredClasses = classesToRegister - alreadyRegisteredClasses val alreadyRegistered= HashMap(cordappClasses).apply { keys.retainAll(classesToRegister) }
notAlreadyRegisteredClasses.forEach { cordappClasses[it] = setOf(cordapp) } notAlreadyRegisteredClasses.forEach { cordappClasses[it] = setOf(cordapp) }
val toRegister = cordappClasses.entries.asSequence() for ((className, registeredCordapps) in alreadyRegistered) {
.filter { (className, _) -> className in alreadyRegisteredClasses} if (registeredCordapps.any { it.jarHash == cordapp.jarHash }) continue
.filter { (_, registeredCordapps) -> registeredCordapps.none { it.jarHash == cordapp.jarHash } }
.map { (className, registeredCordapps) -> className to registeredCordapps + cordapp }
.toMap()
for (className in toRegister.keys) {
if (duplicateRegistrationFilter.shouldNotify(className, cordapp::class.java.classLoader)) { if (duplicateRegistrationFilter.shouldNotify(className, cordapp::class.java.classLoader)) {
logger.warn("More than one CorDapp registered for $className.") logger.warn("More than one CorDapp registered for $className.")
} }
cordappClasses[className] = registeredCordapps + cordapp
} }
cordappClasses.putAll(toRegister)
} }
/* /*