PackageMap.kt revision 49f7010e84f8819274924817443b26fc3a117e22
1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17package android.support.tools.jetifier.core.transform 18 19import android.support.tools.jetifier.core.rules.PackageName 20 21/** 22 * Package map to be used to rewrite packages. The rewrite rules allow duplicities where the 23 * artifact name prefix defined in a rule determines if such rule should be used or skipped. 24 * The priority is determined only by the order (top to bottom). Having a rule with no file prefix 25 * as first means that it is always applied. 26 * 27 * We use this only for the support library rewriting to rewrite packages in manifest files. 28 */ 29class PackageMap(private val rules: List<PackageRule>) { 30 31 companion object { 32 val DEFAULT_RULES = listOf( 33 PackageRule( 34 from = "android/support/exifinterface", 35 to = "androidx/exifinterface" 36 ), 37 PackageRule( 38 from = "android/support/heifwriter", 39 to = "androidx/heifwriter" 40 ), 41 PackageRule( 42 from = "android/support/graphics/drawable", 43 to = "androidx/vectordrawable" 44 ), 45 PackageRule( 46 from = "android/support/graphics/drawable/animated", 47 to = "androidx/vectordrawable" 48 ), 49 PackageRule( 50 from = "android/support/media/tv", 51 to = "androidx/tvprovider" 52 ), 53 PackageRule( 54 from = "androidx/textclassifier", 55 to = "androidx/textclassifier" 56 ), 57 PackageRule( 58 from = "androidx/recyclerview/selection", 59 to = "androidx/recyclerview/selection"), 60 PackageRule( 61 from = "android/support/v4", 62 to = "androidx/legacy/v4" 63 ), 64 PackageRule( 65 from = "android/support/print", 66 to = "androidx/print" 67 ), 68 PackageRule( 69 from = "android/support/documentfile", 70 to = "androidx/documentfile" 71 ), 72 PackageRule( 73 from = "android/support/coordinatorlayout", 74 to = "androidx/coordinatorlayout" 75 ), 76 PackageRule( 77 from = "android/support/swiperefreshlayout", 78 to = "androidx/swiperefreshlayout" 79 ), 80 PackageRule( 81 from = "android/support/slidingpanelayout", 82 to = "androidx/slidingpanelayout" 83 ), 84 PackageRule( 85 from = "android/support/asynclayoutinflater", 86 to = "androidx/asynclayoutinflater" 87 ), 88 PackageRule( 89 from = "android/support/interpolator", 90 to = "androidx/interpolator" 91 ), 92 PackageRule( 93 from = "android/support/v7/palette", 94 to = "androidx/palette" 95 ), 96 PackageRule( 97 from = "android/support/v7/cardview", 98 to = "androidx/cardview" 99 ), 100 PackageRule( 101 from = "android/support/customview", 102 to = "androidx/customview" 103 ), 104 PackageRule( 105 from = "android/support/loader", 106 to = "androidx/loader" 107 ), 108 PackageRule( 109 from = "android/support/cursoradapter", 110 to = "androidx/cursoradapter" 111 ), 112 PackageRule( 113 from = "android/support/v7/mediarouter", 114 to = "androidx/mediarouter" 115 ), 116 PackageRule( 117 from = "android/support/v7/appcompat", 118 to = "androidx/appcompat" 119 ), 120 PackageRule( 121 from = "android/support/v7/recyclerview", 122 to = "androidx/recyclerview" 123 ), 124 PackageRule( 125 from = "android/support/v7/viewpager", 126 to = "androidx/viewpager" 127 ), 128 PackageRule( 129 from = "android/support/percent", 130 to = "androidx/percentlayout" 131 ), 132 PackageRule( 133 from = "android/support/v7/gridlayout", 134 to = "androidx/gridlayout" 135 ), 136 PackageRule( 137 from = "android/support/v13", 138 to = "androidx/legacy/v13" 139 ), 140 PackageRule( 141 from = "android/support/v7/preference", 142 to = "androidx/preference" 143 ), 144 PackageRule( 145 from = "android/support/v14/preference", 146 to = "androidx/legacy/preference" 147 ), 148 PackageRule( 149 from = "android/support/v17/leanback", 150 to = "androidx/leanback" 151 ), 152 PackageRule( 153 from = "android/support/v17/preference", 154 to = "androidx/leanback/preference" 155 ), 156 PackageRule( 157 from = "android/support/compat", 158 to = "androidx/core" 159 ), 160 PackageRule( 161 from = "android/support/mediacompat", 162 to = "androidx/media" 163 ), 164 PackageRule( 165 from = "android/support/fragment", 166 to = "androidx/fragment" 167 ), 168 PackageRule( 169 from = "android/support/coreutils", 170 to = "androidx/legacy/coreutils" 171 ), 172 PackageRule( 173 from = "android/support/dynamicanimation", 174 to = "androidx/dynamicanimation" 175 ), 176 PackageRule( 177 from = "android/support/customtabs", 178 to = "androidx/browser" 179 ), 180 PackageRule( 181 from = "android/support/coreui", 182 to = "androidx/legacy/coreui" 183 ), 184 PackageRule( 185 from = "android/support/content", 186 to = "androidx/contentpager" 187 ), 188 PackageRule( 189 from = "android/support/transition", 190 to = "androidx/transition" 191 ), 192 PackageRule( 193 from = "android/support/recommendation", 194 to = "androidx/recommendation" 195 ), 196 PackageRule( 197 from = "android/support/drawerlayout", 198 to = "androidx/drawerlayout" 199 ), 200 PackageRule( 201 from = "android/support/wear", 202 to = "androidx/wear" 203 ), 204 PackageRule( 205 from = "android/support/design", 206 to = "androidx/design" 207 ), 208 PackageRule( 209 from = "android/support/text/emoji/appcompat", 210 to = "androidx/emoji/appcompat" 211 ), 212 PackageRule( 213 from = "android/support/text/emoji/bundled", 214 to = "androidx/emoji/bundled" 215 ), 216 PackageRule( 217 from = "android/support/text/emoji", 218 to = "androidx/emoji" 219 ), 220 PackageRule( 221 from = "androidx/text/emoji/bundled", 222 to = "androidx/text/emoji/bundled" 223 ), 224 PackageRule( 225 from = "android/support/localbroadcastmanager", 226 to = "androidx/localbroadcastmanager" 227 ), 228 PackageRule( 229 from = "androidx/text/emoji/bundled", 230 to = "androidx/text/emoji/bundled" 231 ), 232 PackageRule( 233 from = "androidx/webkit", 234 to = "androidx/webkit" 235 ), 236 PackageRule( 237 from = "androidx/slice/view", 238 to = "androidx/slice/view" 239 ), 240 PackageRule( 241 from = "androidx/slice/core", 242 to = "androidx/slice/core" 243 ), 244 PackageRule( 245 from = "androidx/slice/builders", 246 to = "androidx/slice/builders" 247 ) 248 ) 249 250 val EMPTY = PackageMap(emptyList()) 251 } 252 253 /** 254 * Creates reversed version of this map (from becomes to and vice versa). 255 */ 256 fun reverse(): PackageMap { 257 return PackageMap(rules 258 .map { PackageRule(from = it.to, to = it.from, filePrefix = it.filePrefix) } 259 .toList()) 260 } 261 262 /** 263 * Returns a new package name for the given [fromPackage] defined in artifact being called 264 * [libraryName]. 265 */ 266 fun getPackageFor(fromPackage: PackageName, libraryName: String): PackageName? { 267 val rule = rules.find { 268 it.from == fromPackage.fullName 269 && (it.filePrefix == null 270 || libraryName.startsWith(it.filePrefix, ignoreCase = true)) 271 } 272 if (rule != null) { 273 return PackageName(rule.to) 274 } 275 return null 276 } 277 278 data class PackageRule(val from: String, val to: String, val filePrefix: String? = null) 279}