/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import androidx.build.CompilationTarget
import androidx.build.LibraryGroups
import androidx.build.Publish

import static androidx.build.dependencies.DependenciesKt.*

plugins {
    id('AndroidXPlugin')
    id('java-library')
}

dependencies {
    api('androidx.annotation:annotation:1.1.0')
    implementation(JAVAPOET)

    // For testing, add in the compiled classes from appsearch to get access to annotations.
    testImplementation fileTree(
            dir: "${new File(project(":appsearch:appsearch").buildDir, "libJar")}",
            include : "*.jar"
    )
    testImplementation(GOOGLE_COMPILE_TESTING)
}

tasks.findByName('compileJava').dependsOn(":appsearch:appsearch::jarDebug")

androidx {
    name = 'AndroidX AppSearch Compiler'
    publish = Publish.SNAPSHOT_AND_RELEASE
    toolingProject = true
    mavenGroup = LibraryGroups.APPSEARCH
    inceptionYear = '2019'
    description = 'Compiler for AndroidX AppSearch data classes'
    failOnDeprecationWarnings = false
    compilationTarget = CompilationTarget.HOST
}
