fix(mapper): remove friend

This commit is contained in:
rhunk
2024-01-23 19:03:14 +01:00
parent 54d3010970
commit f0aa035f7c
4 changed files with 31 additions and 22 deletions

View File

@ -3,11 +3,15 @@ package me.rhunk.snapenhance.mapper.impl
import me.rhunk.snapenhance.mapper.AbstractClassMapper
import me.rhunk.snapenhance.mapper.ext.findConstString
import me.rhunk.snapenhance.mapper.ext.getClassName
import me.rhunk.snapenhance.mapper.ext.isAbstract
import me.rhunk.snapenhance.mapper.ext.isEnum
import java.lang.reflect.Modifier
class FriendRelationshipChangerMapper : AbstractClassMapper("FriendRelationshipChanger") {
val classReference = classReference("class")
val addFriendMethod = string("addFriendMethod")
val removeFriendClass = classReference("removeFriendClass")
val removeFriendMethod = string("removeFriendMethod")
init {
@ -22,22 +26,29 @@ class FriendRelationshipChangerMapper : AbstractClassMapper("FriendRelationshipC
it.parameters[4].type == "Ljava/lang/String;"
}
val removeFriendDexMethod = classDef.methods.firstOrNull {
it.parameterTypes.size == 5 &&
it.parameterTypes[0] == "Ljava/lang/String;" &&
getClass(it.parameterTypes[1])?.isEnum() == true &&
it.parameterTypes[2] == "Ljava/lang/String;" &&
it.parameterTypes[3] == "Ljava/lang/String;"
}
this@FriendRelationshipChangerMapper.apply {
classReference.set(classDef.getClassName())
addFriendMethod.set(addFriendDexMethod.name)
removeFriendMethod.set(removeFriendDexMethod?.name)
}
return@mapper
}
}
mapper {
for (classDef in classes) {
if (!classDef.isAbstract()) continue
val removeFriendDexMethod = classDef.methods.firstOrNull {
Modifier.isStatic(it.accessFlags) &&
it.parameterTypes.size == 5 &&
it.returnType.contains("io/reactivex/rxjava3") &&
getClass(it.parameterTypes[2])?.isEnum() == true &&
getClass(it.parameterTypes[3])?.getClassName()?.endsWith("InteractionPlacementInfo") == true
} ?: continue
removeFriendClass.set(classDef.getClassName())
removeFriendMethod.set(removeFriendDexMethod.name)
return@mapper
}
}
}
}

View File

@ -3,8 +3,7 @@ package me.rhunk.snapenhance.mapper.tests
import com.google.gson.GsonBuilder
import kotlinx.coroutines.runBlocking
import me.rhunk.snapenhance.mapper.ClassMapper
import me.rhunk.snapenhance.mapper.impl.*
import org.junit.jupiter.api.Test
import org.junit.Test
import java.io.File