Merge "Make Jetifier less strict for new types." into pi-preview1-androidx-dev
am: 48bc743a3f

Change-Id: Idbdb568b77bdc782b0a41a8bc93ff06daf6121b8
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/TransformationContext.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/TransformationContext.kt
index 08a22a4..2b0d291 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/TransformationContext.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/TransformationContext.kt
@@ -35,6 +35,16 @@
     private val packagePrefixPattern = Pattern.compile(
         "^(" + config.restrictToPackagePrefixes.map { "($it)" }.joinToString("|") + ").*$")
 
+    /**
+     * Whether to use identity if type in our scope is missing instead of throwing an exception.
+     */
+    val useIdentityIfTypeIsMissing = rewritingSupportLib || isInReversedMode
+
+    /**
+     * Whether to skip verification of dependency version match in pom files.
+     */
+    val ignorePomVersionCheck = rewritingSupportLib || isInReversedMode
+
     /** Counter for [reportNoMappingFoundFailure] calls. */
     var mappingNotFoundFailuresCount = 0
         private set
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapperImpl.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapperImpl.kt
index 4603ae0..3a2ed7e 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapperImpl.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapperImpl.kt
@@ -56,8 +56,12 @@
             return result
         }
 
-        context.reportNoMappingFoundFailure()
-        Log.e(TAG, "No mapping for: " + type)
+        if (context.useIdentityIfTypeIsMissing) {
+            Log.i(TAG, "No mapping for %s - using identity", type)
+        } else {
+            context.reportNoMappingFoundFailure()
+            Log.e(TAG, "No mapping for: " + type)
+        }
         return type
     }
 
@@ -95,8 +99,13 @@
             return path.fileSystem.getPath(result.fullName + ".class")
         }
 
+        if (context.useIdentityIfTypeIsMissing) {
+            Log.i(TAG, "No mapping for: %s", type)
+            return path
+        }
+
         context.reportNoMappingFoundFailure()
-        Log.e(TAG, "No mapping for: " + type)
+        Log.e(TAG, "No mapping for: %s", type)
         return path
     }
 }
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/pom/PomScanner.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/pom/PomScanner.kt
index 99b08d5..45b695c 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/pom/PomScanner.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/pom/PomScanner.kt
@@ -51,8 +51,7 @@
         session.pomFiles.forEach {
             it.logDocumentDetails()
 
-            // FYI: In reverse mode we don't validate versions
-            if (!context.isInReversedMode && !it.validate(context.config.pomRewriteRules)) {
+            if (!context.ignorePomVersionCheck && !it.validate(context.config.pomRewriteRules)) {
                 Log.e(TAG, "Version mismatch!")
                 validationFailuresCount++
             }
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMapper.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMapper.kt
index 28195a3..66a9d6e 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMapper.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/proguard/ProGuardTypesMapper.kt
@@ -48,14 +48,19 @@
             }
 
             val result = config.typesMap.types[javaType]
-            if (result == null) {
-                context.reportNoProGuardMappingFoundFailure()
-                Log.e(TAG, "No mapping for: " + type)
+            if (result != null) {
+                Log.i(TAG, "  map: %s -> %s", type, result)
+                return result.toDotNotation()
+            }
+
+            if (context.useIdentityIfTypeIsMissing) {
+                Log.i(TAG, "No mapping for: %s - using identity")
                 return typeToReplace
             }
 
-            Log.i(TAG, "  map: %s -> %s", type, result)
-            return result.toDotNotation()
+            context.reportNoProGuardMappingFoundFailure()
+            Log.e(TAG, "No mapping for: %s", type)
+            return typeToReplace
         }
 
         // Type contains wildcards - try custom rules map
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformer.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformer.kt
index 18c8994..74667d3 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformer.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/resource/XmlResourcesTransformer.kt
@@ -167,8 +167,13 @@
             return result.toDotNotation()
         }
 
+        if (context.useIdentityIfTypeIsMissing) {
+            Log.i(TAG, "No mapping for: %s - using identity", type)
+            return typeName
+        }
+
         context.reportNoMappingFoundFailure()
-        Log.e(TAG, "No mapping for: " + type)
+        Log.e(TAG, "No mapping for: %s", type)
         return typeName
     }