plugins {
    id 'com.github.johnrengelman.shadow'
}
apply plugin: 'net.corda.plugins.publish-utils'
apply plugin: 'com.jfrog.artifactory'
apply plugin: 'idea'

description 'Corda deterministic JVM sandbox'

ext {
    // Shaded version of ASM to avoid conflict with root project.
    asm_version = '6.2.1'
}

repositories {
    maven {
        url "$artifactory_contextUrl/corda-dev"
    }
}

configurations {
    testCompile.extendsFrom shadow
    jdkRt.resolutionStrategy {
        // Always check the repository for a newer SNAPSHOT.
        cacheChangingModulesFor 0, 'seconds'
    }
}

dependencies {
    shadow "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    shadow "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
    shadow "org.slf4j:slf4j-api:$slf4j_version"

    // ASM: byte code manipulation library
    compile "org.ow2.asm:asm:$asm_version"
    compile "org.ow2.asm:asm-commons:$asm_version"

    // ClassGraph: classpath scanning
    shadow "io.github.classgraph:classgraph:$class_graph_version"

    // Test utilities
    testCompile "junit:junit:$junit_version"
    testCompile "org.assertj:assertj-core:$assertj_version"
    testCompile "org.apache.logging.log4j:log4j-slf4j-impl:$log4j_version"
    jdkRt "net.corda:deterministic-rt:latest.integration"
}

jar.enabled = false

shadowJar {
    baseName 'corda-djvm'
    classifier ''
    relocate 'org.objectweb.asm', 'djvm.org.objectweb.asm'
    
    // These particular classes are only needed to "bootstrap"
    // the compilation of the other sandbox classes. At runtime,
    // we will generate better versions from deterministic-rt.jar.
    exclude 'sandbox/java/lang/Appendable.class'
    exclude 'sandbox/java/lang/CharSequence.class'
    exclude 'sandbox/java/lang/Character\$Subset.class'
    exclude 'sandbox/java/lang/Character\$Unicode*.class'
    exclude 'sandbox/java/lang/Comparable.class'
    exclude 'sandbox/java/lang/Enum.class'
    exclude 'sandbox/java/lang/Iterable.class'
    exclude 'sandbox/java/lang/StackTraceElement.class'
    exclude 'sandbox/java/lang/StringBuffer.class'
    exclude 'sandbox/java/lang/StringBuilder.class'
    exclude 'sandbox/java/nio/**'
    exclude 'sandbox/java/util/**'
}
assemble.dependsOn shadowJar

tasks.withType(Test) {
    systemProperty 'deterministic-rt.path', configurations.jdkRt.asPath
}

artifacts {
    publish shadowJar
}

publish {
    dependenciesFrom configurations.shadow
    name shadowJar.baseName
}

idea {
    module {
        downloadJavadoc = true
        downloadSources = true
    }
}