/*
 * Copyright (C) 2016 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile

import static androidx.build.dependencies.DependenciesKt.MULTIDEX
import static androidx.build.dependencies.DependenciesKt.getKOTLIN_STDLIB

plugins {
    id("AndroidXPlugin")
    id("com.android.application")
    id("kotlin-android")
    id("kotlin-kapt")
}

dependencies {
    implementation("androidx.arch.core:core-runtime:2.1.0")
    implementation("androidx.room:room-ktx:2.2.5")
    implementation("androidx.room:room-rxjava2:2.2.5")

    implementation(project(":paging:paging-common-ktx"))
    implementation(project(":paging:paging-runtime"))
    implementation(project(":paging:paging-rxjava2"))

    kapt(project(":room:room-compiler"))

    implementation(MULTIDEX)
    implementation(project(":recyclerview:recyclerview"))
    implementation(project(":fragment:fragment-ktx"))
    implementation("androidx.appcompat:appcompat:1.1.0")
    implementation(KOTLIN_STDLIB)
}

kapt {
    javacOptions {
        option("-source", "8")
        option("-target", "8")
    }
}

// Allow usage of Kotlin's @OptIn.
tasks.withType(KotlinCompile).configureEach {
    kotlinOptions {
        freeCompilerArgs += ["-Xopt-in=kotlin.RequiresOptIn"]
    }
}
