194567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis/*
2ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlis * Copyright 2018 The Android Open Source Project
394567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis *
494567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis * Licensed under the Apache License, Version 2.0 (the "License");
594567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis * you may not use this file except in compliance with the License.
694567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis * You may obtain a copy of the License at
794567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis *
8ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlis *      http://www.apache.org/licenses/LICENSE-2.0
994567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis *
1094567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis * Unless required by applicable law or agreed to in writing, software
1194567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis * distributed under the License is distributed on an "AS IS" BASIS,
1294567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1394567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis * See the License for the specific language governing permissions and
14ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlis * limitations under the License.
1594567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis */
1694567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis
17ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlispackage com.android.tools.build.jetifier.plugin.gradle
1894567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis
19ba381a314edcd57963ed1ac5910595e04faf29ccFilip Pavlisimport com.android.tools.build.jetifier.core.utils.Log
2094567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlisimport org.gradle.api.Plugin
2194567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlisimport org.gradle.api.Project
2294567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis
2394567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis/**
24d7b0788f3bf58fc26a936c2426ef1214ffb3a180Filip Pavlis * This serves as the main entry point of this plugin and registers the extension object.
2594567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis */
26254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlisopen class JetifierPlugin : Plugin<Project> {
2794567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis
2894567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis    companion object {
29254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis        const val GROOVY_OBJECT_NAME: String = "jetifier"
3094567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis    }
3194567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis
3294567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis    override fun apply(project: Project) {
33d7b0788f3bf58fc26a936c2426ef1214ffb3a180Filip Pavlis        project.extensions.create(GROOVY_OBJECT_NAME, JetifierExtension::class.java, project)
3494567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis
35254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis        project.afterEvaluate({
36254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            val jetifyLibs = it.tasks.findByName(JetifyLibsTask.TASK_NAME)
37254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            val jetifyGlobal = it.tasks.findByName(JetifyGlobalTask.TASK_NAME)
38254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis
39254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            if (jetifyLibs == null && jetifyGlobal == null) {
40254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis                return@afterEvaluate
41254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            }
42254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis
43254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            if (jetifyLibs != null && jetifyGlobal != null) {
44254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis                jetifyGlobal.dependsOn(jetifyLibs)
45254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            }
46254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis
47254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            val preBuildTask = it.tasks.findByName("preBuild")
48254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            if (preBuildTask == null) {
49254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis                Log.e("TAG", "Failed to hook jetifier tasks. PreBuild task was not found.")
50254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis                return@afterEvaluate
51254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            }
52254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis
53254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            if (jetifyGlobal != null) {
54254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis                preBuildTask.dependsOn(jetifyGlobal)
55254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            } else {
56254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis                preBuildTask.dependsOn(jetifyLibs)
57254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis            }
58254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis        })
59254a18a30d35c1ad00e58e75fcc8a0dc6734c17fFilip Pavlis    }
6094567f47da634d0416d839a926ffd792d8eecaa4Filip Pavlis}