[automerger] Add strings rewrite support into Jetifier. am: 77d16b08dd
Change-Id: I1e2d06c0a5c31a6e1cd75b76710e16ba39784241
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/MapGeneratorRemapper.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/MapGeneratorRemapper.kt
index 374e213..4e526c8 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/MapGeneratorRemapper.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/map/MapGeneratorRemapper.kt
@@ -33,7 +33,7 @@
class MapGeneratorRemapper(private val config: Config) : CoreRemapper {
companion object {
- private const val TAG : String = "MapGeneratorRemapper"
+ private const val TAG: String = "MapGeneratorRemapper"
}
private val typesRewritesMap = hashMapOf<JavaType, JavaType>()
@@ -86,7 +86,7 @@
return type
}
- override fun rewriteField(field : JavaField): JavaField {
+ override fun rewriteField(field: JavaField): JavaField {
if (!isTypeSupported(field.owner)) {
return field
}
@@ -114,19 +114,24 @@
return field
}
- fun createTypesMap() : TypesMap {
+ override fun rewriteString(value: String): String {
+ // We don't build map from strings
+ return value
+ }
+
+ fun createTypesMap(): TypesMap {
return TypesMap(typesRewritesMap, fieldsRewritesMap)
}
- private fun isTypeSupported(type: JavaType) : Boolean {
- return config.restrictToPackagePrefixes.any{ type.fullName.startsWith(it) }
+ private fun isTypeSupported(type: JavaType): Boolean {
+ return config.restrictToPackagePrefixes.any { type.fullName.startsWith(it) }
}
- private fun isTypeIgnored(type: JavaType) : Boolean {
+ private fun isTypeIgnored(type: JavaType): Boolean {
return ignoredTypes.matcher(type.fullName).matches()
}
- private fun isFieldIgnored(field: JavaField) : Boolean {
+ private fun isFieldIgnored(field: JavaField): Boolean {
return ignoredFields.matcher(field.name).matches()
}
}
\ No newline at end of file
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapper.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapper.kt
index 50f3b31..38ce393 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapper.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/CoreRemapper.kt
@@ -23,7 +23,9 @@
* High-level re-mapping interface to provide only the refactorings needed by jetifier.
*/
interface CoreRemapper {
- fun rewriteType(type: JavaType) : JavaType
+ fun rewriteType(type: JavaType): JavaType
- fun rewriteField(field: JavaField) : JavaField
+ fun rewriteField(field: JavaField): JavaField
+
+ fun rewriteString(value: String): String
}
\ No newline at end of file
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 486cc25..71c4e9e 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
@@ -41,12 +41,11 @@
}
override fun rewriteType(type: JavaType): JavaType {
- val result = typesMap.types[type]
-
if (!context.isEligibleForRewrite(type)) {
return type
}
+ val result = typesMap.types[type]
if (result != null) {
Log.i(TAG, " map: %s -> %s", type, result)
return result
@@ -57,13 +56,12 @@
return type
}
- override fun rewriteField(field : JavaField): JavaField {
- val result = typesMap.fields[field]
-
+ override fun rewriteField(field: JavaField): JavaField {
if (!context.isEligibleForRewrite(field.owner)) {
return field
}
+ val result = typesMap.fields[field]
if (result != null) {
Log.i(TAG, " map: %s -> %s", field, result)
return result
@@ -74,5 +72,20 @@
return field
}
+ override fun rewriteString(value: String): String {
+ val type = JavaType.fromDotVersion(value)
+ if (!context.isEligibleForRewrite(type)) {
+ return value
+ }
+
+ val result = typesMap.types[type]
+ if (result != null) {
+ Log.i(TAG, " map string: %s -> %s", type, result)
+ return result.toDotNotation()
+ }
+
+ // We do not treat string content mismatches as errors
+ return value
+ }
}
diff --git a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomRemapper.kt b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomRemapper.kt
index 5debf70..aba4725 100644
--- a/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomRemapper.kt
+++ b/jetifier/jetifier/core/src/main/kotlin/android/support/tools/jetifier/core/transform/bytecode/asm/CustomRemapper.kt
@@ -24,14 +24,23 @@
/**
* Extends [Remapper] with a capability to rewrite field names together with their owner.
*/
-class CustomRemapper(val remapperImpl: CoreRemapper) : Remapper() {
+class CustomRemapper(private val remapper: CoreRemapper) : Remapper() {
override fun map(typeName: String): String {
- return remapperImpl.rewriteType(JavaType(typeName)).fullName
+ return remapper.rewriteType(JavaType(typeName)).fullName
+ }
+
+ override fun mapValue(value: Any?): Any? {
+ val stringMaybe = value as? String
+ if (stringMaybe == null) {
+ return super.mapValue(value)
+ }
+
+ return remapper.rewriteString(stringMaybe)
}
fun mapField(ownerName: String, fieldName: String): JavaField {
- return remapperImpl.rewriteField(JavaField(ownerName, fieldName))
+ return remapper.rewriteField(JavaField(ownerName, fieldName))
}
override fun mapFieldName(owner: String?, name: String, desc: String?): String {