buildscript {
    repositories {
        mavenLocal() //for local testing of mockito-release-tools
        google()
        maven { url 'https://plugins.gradle.org/m2/' }
    }

    dependencies {
        classpath 'gradle.plugin.com.hierynomus.gradle.plugins:license-gradle-plugin:0.16.1'
        classpath 'net.ltgt.gradle:gradle-errorprone-plugin:2.0.2'

        classpath "io.github.gradle-nexus:publish-plugin:1.1.0"
        classpath 'org.shipkit:shipkit-changelog:1.1.15'
        classpath 'org.shipkit:shipkit-auto-version:1.1.19'

        classpath 'com.google.googlejavaformat:google-java-format:1.13.0'
        classpath 'com.android.tools.build:gradle:4.2.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10"
    }
}

plugins {
    id 'com.diffplug.spotless' version '6.2.0'
    id 'eclipse'
    id 'com.github.ben-manes.versions' version '0.41.0'
    id 'biz.aQute.bnd.builder' version '6.1.0'
    id 'ru.vyarus.animalsniffer' version '1.5.2'
}

description = 'Mockito mock objects library core API and implementation'

apply plugin: 'base'
archivesBaseName = 'mockito-core'

apply from: 'gradle/shipkit.gradle'

apply from: 'gradle/root/ide.gradle'
apply from: 'gradle/root/gradle-fix.gradle'
apply from: 'gradle/java-library.gradle'
apply from: 'gradle/license.gradle'
apply from: 'gradle/root/coverage.gradle'

apply from: 'gradle/mockito-core/inline-mock.gradle'
apply from: 'gradle/mockito-core/osgi.gradle'
apply from: 'gradle/mockito-core/javadoc.gradle'
apply from: 'gradle/mockito-core/testing.gradle'

apply from: 'gradle/dependencies.gradle'

allprojects { proj ->
    repositories {
        mavenCentral()
        google()
    }
    plugins.withId('java') {
        proj.apply from: "$rootDir/gradle/errorprone.gradle"
    }
    tasks.withType(JavaCompile) {
        //I don't believe those warnings add value given modern IDEs
        options.warnings = false
        options.encoding = 'UTF-8'
    }
    tasks.withType(Javadoc) {
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
        options.addStringOption('charSet', 'UTF-8')
        options.setSource('8')
    }

    tasks.withType(AbstractArchiveTask) {
        preserveFileTimestamps = false
        reproducibleFileOrder = true
    }

    apply plugin: 'checkstyle'
    checkstyle {
       configFile = rootProject.file('config/checkstyle/checkstyle.xml')
    }
}

configurations {
    testUtil //TODO move to separate project
}

dependencies {
    api libraries.bytebuddy, libraries.bytebuddyagent

    compileOnly libraries.junit4, libraries.hamcrest, libraries.opentest4j
    implementation libraries.objenesis

    testImplementation libraries.assertj

    //putting 'provided' dependencies on test compile and runtime classpath
    testCompileOnly configurations.compileOnly
    testRuntimeOnly configurations.compileOnly

    testUtil sourceSets.test.output

    signature 'org.codehaus.mojo.signature:java18:1.0@signature'
    signature 'net.sf.androidscents.signature:android-api-level-24:7.0_r2@signature'
}

animalsniffer {
    sourceSets = [sourceSets.main]
    annotation = 'org.mockito.internal.SuppressSignatureCheck'
}

spotless {
    // We run the check separately on CI, so don't run this by default
    enforceCheck = false

    java {
        licenseHeaderFile rootProject.file('config/spotless/spotless.header')

        custom 'google-java-format', { source ->
            com.google.googlejavaformat.java.JavaFormatterOptions options = new com.google.googlejavaformat.java.JavaFormatterOptions.Builder()
                    .style(com.google.googlejavaformat.java.JavaFormatterOptions.Style.AOSP)
                    .formatJavadoc(false)
                    .build()
            com.google.googlejavaformat.java.Formatter formatter = new com.google.googlejavaformat.java.Formatter(options)
            return formatter.formatSource(source)
        }

        // This test contains emulation of same-line stubbings. The formatter would put them on a separate line.
        targetExclude 'src/test/java/org/mockitousage/internal/junit/UnusedStubbingsFinderTest.java'
    }
}


//workaround for #1444, delete when Shipkit bug is fixed
subprojects {
	eclipse {
		project {
			name = rootProject.name + '-' + project.name
		}
	}

    afterEvaluate {
        def lib = publishing.publications.javaLibrary
        if(lib && !lib.artifactId.startsWith("mockito-")) {
            lib.artifactId = "mockito-" + lib.artifactId
        }
    }
}
//end workaround
