/*
 * 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.LibraryType

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

dependencies {
    api('androidx.annotation:annotation:1.1.0')
    api(libs.jsr250)
    implementation(libs.autoCommon)
    implementation(libs.autoValue)
    implementation(libs.autoValueAnnotations)
    implementation(libs.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(libs.googleCompileTesting)
}

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

androidx {
    name = 'AndroidX AppSearch Compiler'
    type = LibraryType.COMPILER_PLUGIN
    mavenGroup = LibraryGroups.APPSEARCH
    inceptionYear = '2019'
    description = 'Compiler for classes annotated with @androidx.appsearch.annotation.Document'
    failOnDeprecationWarnings = false
}
