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

plugins {
    id("AndroidXPlugin")
    id("com.android.application")
    id("kotlin-android")
    id("com.google.devtools.ksp")
}

dependencies {

    implementation("androidx.arch.core:core-runtime:2.2.0")
    implementation(projectOrArtifact(":room:room-ktx"))
    implementation(projectOrArtifact(":room:room-rxjava2"))
    implementation(projectOrArtifact(":room:room-paging"))

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

    ksp(projectOrArtifact(":room:room-compiler"))

    implementation(projectOrArtifact(":recyclerview:recyclerview"))
    implementation("androidx.fragment:fragment-ktx:1.3.0")
    implementation("androidx.appcompat:appcompat:1.1.0")
    implementation(libs.kotlinStdlib)

    // Only needed to ensure version of annotation:annotation matches in impl
    // and androidTestImpl, for both AOSP and playground builds.
    implementation(project(":annotation:annotation"))
    implementation(project(":annotation:annotation-experimental"))

    // Align dependencies in debugRuntimeClasspath and debugAndroidTestRuntimeClasspath.
    androidTestImplementation(project(":annotation:annotation"))
    androidTestImplementation(project(":annotation:annotation-experimental"))
    androidTestImplementation(libs.kotlinTest)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.truth)
}

android {
    namespace "androidx.paging.integration.testapp"
}

// Enable parameter names to support Room incremental when its a project() dep.
// See b/198431380
tasks.withType(JavaCompile) {
    options.compilerArgs << "-parameters"
}

ksp {
    arg('room.generateKotlin', 'false')
}
