Skip to content

Commit b6da3ca

Browse files
committed
Refactor ReflectionUtils and related classes to improve type detection methods
1 parent 9066de0 commit b6da3ca

File tree

7 files changed

+33
-25
lines changed

7 files changed

+33
-25
lines changed

app/src/main/java/com/wmods/wppenhacer/xposed/features/general/ChatLimit.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
6969

7070
@Override
7171
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
72-
var list = ReflectionUtils.findArrayOfType(param.args, Set.class);
72+
var list = ReflectionUtils.findInstancesOfType(param.args, Set.class);
7373
if (list.isEmpty()) return;
74-
var listMessages = (Set) list.get(0).second;
74+
var listMessages = list.get(0).second;
7575
var isExpired = false;
7676
for (var fmessageObj : listMessages) {
7777
var timestamp = fmessageTimestampMethod.getLong(fmessageObj);

app/src/main/java/com/wmods/wppenhacer/xposed/features/general/Others.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ private void sendAudioType(int audio_type) throws Exception {
481481
XposedBridge.hookMethod(sendAudioTypeMethod, new XC_MethodHook() {
482482
@Override
483483
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
484-
var results = ReflectionUtils.findArrayOfType(param.args, Integer.class);
484+
var results = ReflectionUtils.findInstancesOfType(param.args, Integer.class);
485485
if (results.size() < 2) {
486486
log("sendAudioTypeMethod size < 2");
487487
return;
@@ -578,7 +578,7 @@ private void hookProps() throws Exception {
578578
XposedBridge.hookMethod(methodPropsBoolean, new XC_MethodHook() {
579579
@Override
580580
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
581-
var list = ReflectionUtils.findArrayOfType(param.args, Integer.class);
581+
var list = ReflectionUtils.findInstancesOfType(param.args, Integer.class);
582582
int i = (int) list.get(0).second;
583583

584584
var propValue = propsBoolean.get(i);
@@ -597,7 +597,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
597597
XposedBridge.hookMethod(methodPropsInteger, new XC_MethodHook() {
598598
@Override
599599
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
600-
var list = ReflectionUtils.findArrayOfType(param.args, Integer.class);
600+
var list = ReflectionUtils.findInstancesOfType(param.args, Integer.class);
601601
int i = (int) list.get(0).second;
602602
var propValue = propsInteger.get(i);
603603
if (propValue == null) return;

app/src/main/java/com/wmods/wppenhacer/xposed/features/media/MediaQuality.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
9191
boolean isHighResolution;
9292
boolean isEnum = false;
9393
var enumObj = ReflectionUtils.getArg(param.args, Enum.class, 0);
94-
var intParams = ReflectionUtils.findArrayOfType(param.args, Integer.class);
94+
var intParams = ReflectionUtils.findInstancesOfType(param.args, Integer.class);
9595
if (enumObj != null) {
9696
isEnum = true;
9797
var hightResolution = Enum.valueOf((Class<Enum>) enumObj.getClass(), "RESOLUTION_1080P");

app/src/main/java/com/wmods/wppenhacer/xposed/features/others/ActivityController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ private static void contactController(Intent intent, Activity activity, Class<?>
136136
}
137137
Constructor constructor = ReflectionUtils.findConstructorUsingFilter(statusDistribution, constructor1 -> constructor1.getParameterCount() > 5);
138138
Object[] params = ReflectionUtils.initArray(constructor.getParameterTypes());
139-
var lists = ReflectionUtils.findArrayOfType(constructor.getParameterTypes(), List.class);
139+
var lists = ReflectionUtils.findClassesOfType(constructor.getParameterTypes(), List.class);
140140
params[lists.get(0).first] = listContacts;
141141
params[lists.get(1).first] = new ArrayList();
142142
if (lists.size() > 2) {

app/src/main/java/com/wmods/wppenhacer/xposed/features/others/Channels.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void doHook() throws Throwable {
5555
XposedBridge.hookMethod(listUpdateItems, new XC_MethodHook() {
5656
@Override
5757
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
58-
var results = ReflectionUtils.findArrayOfType(param.args, List.class);
58+
var results = ReflectionUtils.findInstancesOfType(param.args, List.class);
5959
if (results.isEmpty()) return;
6060
var list = (List<?>) results.get(0).second;
6161
var arrList = new ArrayList<>(list);
@@ -67,7 +67,7 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
6767
XposedBridge.hookAllConstructors(removeChannelRecClass, new XC_MethodHook() {
6868
@Override
6969
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
70-
var pairs = ReflectionUtils.findArrayOfType(param.args, List.class);
70+
var pairs = ReflectionUtils.findInstancesOfType(param.args, List.class);
7171
for (var pair : pairs) {
7272
param.args[pair.first] = new ArrayList<>();
7373
}

app/src/main/java/com/wmods/wppenhacer/xposed/features/others/ChatFilters.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ public void doHook() throws Throwable {
2727
XposedBridge.hookAllConstructors(filterAdaperClass, new XC_MethodHook() {
2828
@Override
2929
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
30-
var list = ReflectionUtils.findArrayOfType(param.args, List.class);
30+
var list = ReflectionUtils.findInstancesOfType(param.args, List.class);
3131
if (!list.isEmpty()) {
3232
var argResult = list.get(0);
33-
var newList = new ArrayList<Object>((List) argResult.second);
33+
var newList = new ArrayList<Object>(argResult.second);
3434
newList.removeIf(item -> {
3535
var name = XposedHelpers.getObjectField(item, "A01");
3636
return name == null || name == "CONTACTS_FILTER" || name == "GROUP_FILTER";

app/src/main/java/com/wmods/wppenhacer/xposed/utils/ReflectionUtils.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -267,24 +267,37 @@ public static int findIndexOfType(Object[] args, Class<?> type) {
267267
return -1;
268268
}
269269

270-
public static <T> List<Pair<Integer, T>> findArrayOfType(Object[] args, Class<T> type) {
270+
public static <T> List<Pair<Integer, T>> findInstancesOfType(Object[] args, Class<T> type) {
271271
var result = new ArrayList<Pair<Integer, T>>();
272272
for (int i = 0; i < args.length; i++) {
273273
var arg = args[i];
274-
if (arg == null) continue;
275-
if (arg instanceof Class clazz) {
276-
if (type.isAssignableFrom(clazz)) {
277-
result.add(new Pair<>(i, type.cast(clazz)));
278-
}
279-
continue;
280-
}
281-
if (type.isAssignableFrom(arg.getClass()) || type.isInstance(arg)) {
274+
if (arg == null || arg instanceof Class) continue;
275+
276+
if (type.isInstance(arg)) {
282277
result.add(new Pair<>(i, type.cast(arg)));
283278
}
284279
}
285280
return result;
286281
}
287282

283+
public static <T> List<Pair<Integer, Class<? extends T>>> findClassesOfType(Class[] args, Class<T> type) {
284+
var result = new ArrayList<Pair<Integer, Class<? extends T>>>();
285+
for (int i = 0; i < args.length; i++) {
286+
var arg = args[i];
287+
if (type.isAssignableFrom(arg)) {
288+
//noinspection unchecked
289+
result.add(new Pair<>(i, (Class<? extends T>) arg));
290+
}
291+
}
292+
return result;
293+
}
294+
295+
public static <T> T getArg(Object[] args, Class<T> typeClass, int i) {
296+
var list = findInstancesOfType(args, typeClass);
297+
if (list.size() <= i) return null;
298+
return list.get(i).second;
299+
}
300+
288301
public static boolean isCalledFromString(String contains) {
289302
var trace = Thread.currentThread().getStackTrace();
290303
var text = Arrays.toString(trace);
@@ -331,11 +344,6 @@ public synchronized static boolean isCalledFromMethod(Method method) {
331344
return false;
332345
}
333346

334-
public static <T> T getArg(Object[] args, Class<T> typeClass, int i) {
335-
var list = findArrayOfType(args, typeClass);
336-
if (list.size() <= i) return null;
337-
return list.get(i).second;
338-
}
339347

340348
public static void setObjectField(Field field, Object instance, Object value) {
341349
try {

0 commit comments

Comments
 (0)