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}