evaluationDependsOn(":checker-qual")

task copySources(type: Copy) {
    description 'Copy checker-qual source to checker-qual-android'

    includeEmptyDirs = false
    doFirst {
        // Delete the directory in case a previously copied file should no longer be in checker-qual
        delete file('src')
    }
    from files('../checker-qual/src/main')
    include "**/*.java"
    exclude "**/SignednessUtilExtra.java"
    into file('src/main')

    // Not read only because "replaceAnnotations" tasks writes to the files.
    fileMode(0666)
    dirMode(0777)
}

/**
* Types annotated with runtime annotations are always kept in the main dex by the default Android Gradle plugin.
* Using the standard Checker Framework annotations can lead to main dex overflows;
* users of the Checker framework may find themselves unable to build their Android apps.
* By contrast, class-retention annotations are stripped out before packaging by all build systems as a convention.
*/
task replaceAnnotations {
    doLast {
        fileTree(dir: 'src', include: "**/*.java").each {
            it.text = it.text.replaceAll("RetentionPolicy.RUNTIME", "RetentionPolicy.CLASS")
        }
    }
}
replaceAnnotations.dependsOn copySources

compileJava.dependsOn replaceAnnotations

clean {
    delete file('src')
}

apply from: rootProject.file("gradle-mvn-push.gradle")

/** Adds information to the publication for uploading to Maven repositories. */
final checkerQualAndroidPom(publication) {
    sharedPublicationConfiguration(publication)
    publication.from components.java
    publication.pom {
        name = 'Checker Qual Android'
        description = 'checker-qual-android contains annotations (type qualifiers) that a programmer\n' +
                        'writes to specify Java code for type-checking by the Checker Framework.\n' +
                        '\n' +
                        'The checker-qual-android artifact is identical to the checker-qual\n' +
                        'artifact, except that in checker-qual-android annotations have classfile\n' +
                        'retention.  The default Android Gradle plugin retains types annotated with\n' +
                        'runtime annotations in the main dex, but strips out class-retention\n' +
                        'annotations.\n'
        licenses {
            license {
                name = 'The MIT License'
                url = 'http://opensource.org/licenses/MIT'
                distribution = 'repo'
            }
        }
    }
}
publishing {
    publications {
        checkerQualAndroid(MavenPublication) {
            checkerQualAndroidPom it
        }
    }
}
signing {
    sign publishing.publications.checkerQualAndroid
}
