From a3b68f7746d97f9be18617a9d0c714bf8b4d4758 Mon Sep 17 00:00:00 2001 From: yelochick Date: Tue, 26 Aug 2025 17:51:35 +0800 Subject: [PATCH] fix: support android studio 2025.1.2 --- .../novitechie/CollectionsTransformer.java | 41 +++++++++++++++++++ .../PluginManagerCoreTransformer.java | 2 +- .../java/com/novitechie/PrivacyPlugin.java | 1 + 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/novitechie/CollectionsTransformer.java diff --git a/src/main/java/com/novitechie/CollectionsTransformer.java b/src/main/java/com/novitechie/CollectionsTransformer.java new file mode 100644 index 0000000..5280079 --- /dev/null +++ b/src/main/java/com/novitechie/CollectionsTransformer.java @@ -0,0 +1,41 @@ +package com.novitechie; + +import com.janetfilter.core.plugin.MyTransformer; +import jdk.internal.org.objectweb.asm.ClassReader; +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.tree.*; + +import static jdk.internal.org.objectweb.asm.Opcodes.*; + +/** + * @author YeloChick + */ +public class CollectionsTransformer implements MyTransformer { + + @Override + public String getHookClassName() { + return "java/util/Collections"; + } + + @Override + public byte[] transform(String className, byte[] classBytes, int order) throws Exception { + ClassReader reader = new ClassReader(classBytes); + ClassNode node = new ClassNode(ASM5); + reader.accept(node, 0); + for (MethodNode m : node.methods) { + if ("shuffle".equals(m.name)) { + InsnList list = new InsnList(); + LabelNode L0 = new LabelNode(); + list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); + list.add(new JumpInsnNode(IFEQ, L0)); + list.add(new VarInsnNode(ALOAD, 0)); + list.add(new InsnNode(ARETURN)); + list.add(L0); + m.instructions.insert(list); + } + } + ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); + node.accept(writer); + return writer.toByteArray(); + } +} diff --git a/src/main/java/com/novitechie/PluginManagerCoreTransformer.java b/src/main/java/com/novitechie/PluginManagerCoreTransformer.java index ebe9244..e6bdb93 100644 --- a/src/main/java/com/novitechie/PluginManagerCoreTransformer.java +++ b/src/main/java/com/novitechie/PluginManagerCoreTransformer.java @@ -31,7 +31,7 @@ public class PluginManagerCoreTransformer implements MyTransformer { LabelNode L3 = new LabelNode(); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); list.add(new JumpInsnNode(IFEQ, L0)); - list.add(new MethodInsnNode(INVOKESTATIC, "com/intellij/ide/plugins/PluginManagerCore", "getPluginSet", "()Lcom/intellij/ide/plugins/PluginSet;", false)); + list.add(new FieldInsnNode(GETSTATIC, "com/intellij/ide/plugins/PluginManagerCore", "nullablePluginSet", "Lcom/intellij/ide/plugins/PluginSet;")); list.add(new FieldInsnNode(GETFIELD, "com/intellij/ide/plugins/PluginSet", "allPlugins", "Ljava/util/Set;")); list.add(new VarInsnNode(ASTORE, 0)); list.add(new TypeInsnNode(NEW, "java/util/HashSet")); diff --git a/src/main/java/com/novitechie/PrivacyPlugin.java b/src/main/java/com/novitechie/PrivacyPlugin.java index 39c967a..15a7964 100644 --- a/src/main/java/com/novitechie/PrivacyPlugin.java +++ b/src/main/java/com/novitechie/PrivacyPlugin.java @@ -35,6 +35,7 @@ public class PrivacyPlugin implements PluginEntry { @Override public List getTransformers() { return Arrays.asList( + // new CollectionsTransformer(), new VMOptionsTransformer(), new PluginClassLoaderTransformer(), new LicensingFacadeTransformer(),