mirror of
https://github.com/corda/corda.git
synced 2025-06-18 15:18:16 +00:00
Reducing the size of the CorDapp jars used in tests (#4600)
The helper method enclosedCordapp is a replacement to scanning the current package (which pulls in a lot more into the jar than intended).
This commit is contained in:
@ -25,7 +25,7 @@ import java.util.zip.ZipEntry
|
||||
* disparate classes. The CorDapp metadata that's present in the MANIFEST can also be tailored.
|
||||
*/
|
||||
data class CustomCordapp(
|
||||
val packages: Set<String>,
|
||||
val packages: Set<String> = emptySet(),
|
||||
val name: String = "custom-cordapp",
|
||||
val versionId: Int = 1,
|
||||
val targetPlatformVersion: Int = PLATFORM_VERSION,
|
||||
|
@ -28,6 +28,7 @@ import net.corda.testing.node.InMemoryMessagingNetwork
|
||||
import net.corda.testing.node.TestCordapp
|
||||
import net.corda.testing.node.User
|
||||
import net.corda.testing.node.testContext
|
||||
import org.apache.commons.lang.ClassUtils
|
||||
import org.slf4j.LoggerFactory
|
||||
import rx.Observable
|
||||
import rx.subjects.AsyncSubject
|
||||
@ -65,6 +66,13 @@ val FINANCE_WORKFLOWS_CORDAPP: TestCordappImpl = findCordapp("net.corda.finance.
|
||||
@JvmField
|
||||
val FINANCE_CORDAPPS: Set<TestCordappInternal> = setOf(FINANCE_CONTRACTS_CORDAPP, FINANCE_WORKFLOWS_CORDAPP)
|
||||
|
||||
/**
|
||||
* *Custom* CorDapp containing the contents of the `net.corda.testing.contracts` package, i.e. the dummy contracts. This is not a real CorDapp
|
||||
* in the way that [FINANCE_CONTRACTS_CORDAPP] and [FINANCE_WORKFLOWS_CORDAPP] are.
|
||||
*/
|
||||
@JvmField
|
||||
val DUMMY_CONTRACTS_CORDAPP: CustomCordapp = cordappWithPackages("net.corda.testing.contracts")
|
||||
|
||||
fun cordappsForPackages(vararg packageNames: String): Set<CustomCordapp> = cordappsForPackages(packageNames.asList())
|
||||
|
||||
fun cordappsForPackages(packageNames: Iterable<String>): Set<CustomCordapp> {
|
||||
@ -88,6 +96,25 @@ fun cordappForClasses(vararg classes: Class<*>): CustomCordapp = CustomCordapp(p
|
||||
*/
|
||||
fun findCordapp(scanPackage: String): TestCordappImpl = TestCordapp.findCordapp(scanPackage) as TestCordappImpl
|
||||
|
||||
/** Create a *custom* CorDapp which just contains the enclosed classes of the receiver class. */
|
||||
fun Any.enclosedCordapp(): CustomCordapp {
|
||||
val receiverClass = javaClass.enclosingClass ?: javaClass // In case this is called in the companion object
|
||||
val classes = HashSet<Class<*>>()
|
||||
receiverClass.collectEnclosedClasses(classes)
|
||||
ClassUtils.getAllSuperclasses(receiverClass).forEach { (it as Class<*>).collectEnclosedClasses(classes) }
|
||||
ClassUtils.getAllInterfaces(receiverClass).forEach { (it as Class<*>).collectEnclosedClasses(classes) }
|
||||
require(classes.isNotEmpty()) { "${receiverClass.name} does not contain any enclosed classes to build a CorDapp out of" }
|
||||
return CustomCordapp(name = receiverClass.name, classes = classes)
|
||||
}
|
||||
|
||||
private fun Class<*>.collectEnclosedClasses(classes: MutableSet<Class<*>>) {
|
||||
val enclosedClasses = declaredClasses
|
||||
if (enclosedClasses.isNotEmpty() || enclosingClass != null) {
|
||||
classes += this
|
||||
}
|
||||
enclosedClasses.forEach { it.collectEnclosedClasses(classes) }
|
||||
}
|
||||
|
||||
private fun getCallerClass(directCallerClass: KClass<*>): Class<*>? {
|
||||
val stackTrace = Throwable().stackTrace
|
||||
val index = stackTrace.indexOfLast { it.className == directCallerClass.java.name }
|
||||
|
Reference in New Issue
Block a user