diff --git a/src/main/java/com/novitechie/ClassLoaderTransformer.java b/src/main/java/com/novitechie/ClassLoaderTransformer.java index 1d92324..8646f20 100644 --- a/src/main/java/com/novitechie/ClassLoaderTransformer.java +++ b/src/main/java/com/novitechie/ClassLoaderTransformer.java @@ -25,12 +25,12 @@ public class ClassLoaderTransformer implements MyTransformer { for (MethodNode m : node.methods) { if ("loadClass".equals(m.name)) { InsnList list = new InsnList(); + LabelNode L0 = new LabelNode(); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); - LabelNode labelNode = new LabelNode(); - list.add(new JumpInsnNode(IFEQ, labelNode)); + list.add(new JumpInsnNode(IFEQ, L0)); list.add(new VarInsnNode(ALOAD, 1)); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/LoadClassRule", "check", "(Ljava/lang/String;)V", false)); - list.add(labelNode); + list.add(L0); m.instructions.insert(list); } } diff --git a/src/main/java/com/novitechie/ClassTransformer.java b/src/main/java/com/novitechie/ClassTransformer.java index 691549e..731ee8a 100644 --- a/src/main/java/com/novitechie/ClassTransformer.java +++ b/src/main/java/com/novitechie/ClassTransformer.java @@ -25,36 +25,23 @@ public class ClassTransformer implements MyTransformer { for (MethodNode m : node.methods) { if ("getResource".equals(m.name) && m.desc.equals("(Ljava/lang/String;)Ljava/net/URL;")) { InsnList list = new InsnList(); - list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); - LabelNode labelNode = new LabelNode(); - list.add(new JumpInsnNode(IFEQ, labelNode)); + LabelNode L0 = new LabelNode(); list.add(new VarInsnNode(ALOAD, 1)); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/ResourceRule", "check", "(Ljava/lang/String;)Z", false)); - list.add(new JumpInsnNode(IFEQ, labelNode)); + list.add(new JumpInsnNode(IFEQ, L0)); list.add(new InsnNode(ACONST_NULL)); list.add(new InsnNode(ARETURN)); - list.add(labelNode); + list.add(L0); m.instructions.insert(list); } else if ("getResourceAsStream".equals(m.name) && m.desc.equals("(Ljava/lang/String;)Ljava/io/InputStream;")) { InsnList list = new InsnList(); - list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); - LabelNode labelNode = new LabelNode(); - list.add(new JumpInsnNode(IFEQ, labelNode)); + LabelNode L0 = new LabelNode(); list.add(new VarInsnNode(ALOAD, 1)); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/ResourceRule", "check", "(Ljava/lang/String;)Z", false)); - list.add(new JumpInsnNode(IFEQ, labelNode)); + list.add(new JumpInsnNode(IFEQ, L0)); list.add(new InsnNode(ACONST_NULL)); list.add(new InsnNode(ARETURN)); - list.add(labelNode); - m.instructions.insert(list); - } else if ("getDeclaredMethod".equals(m.name)) { - InsnList list = new InsnList(); - list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); - LabelNode labelNode = new LabelNode(); - list.add(new JumpInsnNode(IFEQ, labelNode)); - list.add(new VarInsnNode(ALOAD, 1)); - list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/ClassRule", "checkMethod", "(Ljava/lang/String;)V", false)); - list.add(labelNode); + list.add(L0); m.instructions.insert(list); } } diff --git a/src/main/java/com/novitechie/LogUtil.java b/src/main/java/com/novitechie/LogUtil.java new file mode 100644 index 0000000..6316a05 --- /dev/null +++ b/src/main/java/com/novitechie/LogUtil.java @@ -0,0 +1,17 @@ +package com.novitechie; + +import com.janetfilter.core.commons.DebugInfo; + +/** + * @author YeloChick + */ +public class LogUtil { + + public static void printStackTrace() { + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + DebugInfo.output("===========================stackTrace: "); + for (StackTraceElement stackTraceElement : stackTrace) { + DebugInfo.output(stackTraceElement.getClassName() + ":" + stackTraceElement.getMethodName()); + } + } +} diff --git a/src/main/java/com/novitechie/MethodTransformer.java b/src/main/java/com/novitechie/MethodTransformer.java new file mode 100644 index 0000000..88d90ce --- /dev/null +++ b/src/main/java/com/novitechie/MethodTransformer.java @@ -0,0 +1,60 @@ +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 MethodTransformer implements MyTransformer { + + @Override + public String getHookClassName() { + return "java/lang/reflect/Method"; + } + + @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 ("invoke".equals(m.name) && m.desc.equals("(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;")) { + InsnList list = new InsnList(); + LabelNode L0 = new LabelNode(); + list.add(new LdcInsnNode("java.lang.ClassLoader")); + list.add(new VarInsnNode(ALOAD, 0)); + list.add(new FieldInsnNode(GETFIELD, "java/lang/reflect/Method", "clazz", "Ljava/lang/Class;")); + list.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/Class", "getName", "()Ljava/lang/String;", false)); + list.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false)); + list.add(new JumpInsnNode(IFEQ, L0)); + list.add(new LdcInsnNode("findBootstrapClass")); + list.add(new VarInsnNode(ALOAD, 0)); + list.add(new FieldInsnNode(GETFIELD, "java/lang/reflect/Method", "name", "Ljava/lang/String;")); + list.add(new MethodInsnNode(INVOKEVIRTUAL, "java/lang/String", "equals", "(Ljava/lang/Object;)Z", false)); + list.add(new JumpInsnNode(IFEQ, L0)); + list.add(new VarInsnNode(ALOAD, 2)); + list.add(new InsnNode(ICONST_0)); + list.add(new InsnNode(AALOAD)); + list.add(new MethodInsnNode(INVOKESTATIC, "java/lang/String", "valueOf", "(Ljava/lang/Object;)Ljava/lang/String;", false)); + list.add(new VarInsnNode(ASTORE, 3)); + list.add(new VarInsnNode(ALOAD, 3)); + list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/BootstrapClassRule", "check", "(Ljava/lang/String;)Z", false)); + list.add(new JumpInsnNode(IFEQ, L0)); + list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); + list.add(new JumpInsnNode(IFEQ, L0)); + list.add(new InsnNode(ACONST_NULL)); + 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 0c1028f..37c21e8 100644 --- a/src/main/java/com/novitechie/PluginManagerCoreTransformer.java +++ b/src/main/java/com/novitechie/PluginManagerCoreTransformer.java @@ -25,12 +25,12 @@ public class PluginManagerCoreTransformer implements MyTransformer { for (MethodNode m : node.methods) { if ("getPlugins".equals(m.name)) { InsnList list = new InsnList(); - list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); + LabelNode L0 = new LabelNode(); LabelNode L1 = new LabelNode(); LabelNode L2 = new LabelNode(); LabelNode L3 = new LabelNode(); - LabelNode L4 = new LabelNode(); - list.add(new JumpInsnNode(IFEQ, L1)); + list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); + list.add(new JumpInsnNode(IFEQ, L0)); list.add(new FieldInsnNode(GETSTATIC, "com/intellij/ide/plugins/PluginManagerCore", "INSTANCE", "Lcom/intellij/ide/plugins/PluginManagerCore;")); list.add(new MethodInsnNode(INVOKEVIRTUAL, "com/intellij/ide/plugins/PluginManagerCore", "getPluginSet", "()Lcom/intellij/ide/plugins/PluginSet;", false)); list.add(new FieldInsnNode(GETFIELD, "com/intellij/ide/plugins/PluginSet", "allPlugins", "Ljava/util/Set;")); @@ -42,10 +42,10 @@ public class PluginManagerCoreTransformer implements MyTransformer { list.add(new VarInsnNode(ALOAD, 0)); list.add(new MethodInsnNode(INVOKEINTERFACE, "java/util/Set", "iterator", "()Ljava/util/Iterator;", true)); list.add(new VarInsnNode(ASTORE, 2)); - list.add(L3); + list.add(L2); list.add(new VarInsnNode(ALOAD, 2)); list.add(new MethodInsnNode(INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z", true)); - list.add(new JumpInsnNode(IFEQ, L2)); + list.add(new JumpInsnNode(IFEQ, L1)); list.add(new VarInsnNode(ALOAD, 2)); list.add(new MethodInsnNode(INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;", true)); list.add(new TypeInsnNode(CHECKCAST, "com/intellij/ide/plugins/IdeaPluginDescriptor")); @@ -54,47 +54,47 @@ public class PluginManagerCoreTransformer implements MyTransformer { list.add(new MethodInsnNode(INVOKEINTERFACE, "com/intellij/ide/plugins/IdeaPluginDescriptor", "getPluginId", "()Lcom/intellij/openapi/extensions/PluginId;", true)); list.add(new MethodInsnNode(INVOKEVIRTUAL, "com/intellij/openapi/extensions/PluginId", "getIdString", "()Ljava/lang/String;", false)); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/IdeaPluginRule", "check", "(Ljava/lang/String;)Z", false)); - list.add(new JumpInsnNode(IFNE, L4)); + list.add(new JumpInsnNode(IFNE, L3)); list.add(new VarInsnNode(ALOAD, 1)); list.add(new VarInsnNode(ALOAD, 3)); list.add(new MethodInsnNode(INVOKEINTERFACE, "java/util/Set", "add", "(Ljava/lang/Object;)Z", true)); list.add(new InsnNode(POP)); - list.add(L4); - list.add(new JumpInsnNode(GOTO, L3)); - list.add(L2); + list.add(L3); + list.add(new JumpInsnNode(GOTO, L2)); + list.add(L1); list.add(new VarInsnNode(ALOAD, 1)); list.add(new InsnNode(ICONST_0)); list.add(new TypeInsnNode(ANEWARRAY, "com/intellij/ide/plugins/IdeaPluginDescriptor")); list.add(new MethodInsnNode(INVOKEINTERFACE, "java/util/Set", "toArray", "([Ljava/lang/Object;)[Ljava/lang/Object;", true)); list.add(new TypeInsnNode(CHECKCAST, "[Lcom/intellij/ide/plugins/IdeaPluginDescriptor;")); list.add(new InsnNode(ARETURN)); - list.add(L1); + list.add(L0); m.instructions.insert(list); } else if ("isPluginInstalled".equals(m.name)) { InsnList list = new InsnList(); + LabelNode L0 = new LabelNode(); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); - LabelNode labelNode = new LabelNode(); - list.add(new JumpInsnNode(IFEQ, labelNode)); + list.add(new JumpInsnNode(IFEQ, L0)); list.add(new VarInsnNode(ALOAD, 0)); list.add(new MethodInsnNode(INVOKEVIRTUAL, "com/intellij/openapi/extensions/PluginId", "getIdString", "()Ljava/lang/String;", false)); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/IdeaPluginRule", "check", "(Ljava/lang/String;)Z", false)); - list.add(new JumpInsnNode(IFEQ, labelNode)); + list.add(new JumpInsnNode(IFEQ, L0)); list.add(new InsnNode(ICONST_0)); list.add(new InsnNode(IRETURN)); - list.add(labelNode); + list.add(L0); m.instructions.insert(list); } else if ("isDisabled".equals(m.name)) { InsnList list = new InsnList(); + LabelNode L0 = new LabelNode(); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); - LabelNode labelNode = new LabelNode(); - list.add(new JumpInsnNode(IFEQ, labelNode)); + list.add(new JumpInsnNode(IFEQ, L0)); list.add(new VarInsnNode(ALOAD, 0)); list.add(new MethodInsnNode(INVOKEVIRTUAL, "com/intellij/openapi/extensions/PluginId", "getIdString", "()Ljava/lang/String;", false)); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/IdeaPluginRule", "check", "(Ljava/lang/String;)Z", false)); - list.add(new JumpInsnNode(IFEQ, labelNode)); + list.add(new JumpInsnNode(IFEQ, L0)); list.add(new InsnNode(ICONST_1)); list.add(new InsnNode(IRETURN)); - list.add(labelNode); + list.add(L0); m.instructions.insert(list); } } diff --git a/src/main/java/com/novitechie/PrivacyPlugin.java b/src/main/java/com/novitechie/PrivacyPlugin.java index bed365c..68075aa 100644 --- a/src/main/java/com/novitechie/PrivacyPlugin.java +++ b/src/main/java/com/novitechie/PrivacyPlugin.java @@ -27,6 +27,7 @@ public class PrivacyPlugin implements PluginEntry { new RuntimeMXBeanTransformer(), new SystemTransformer(), new ClassTransformer(), - new ClassLoaderTransformer()); + new ClassLoaderTransformer(), + new MethodTransformer()); } } diff --git a/src/main/java/com/novitechie/SystemTransformer.java b/src/main/java/com/novitechie/SystemTransformer.java index c1bb490..594e0d5 100644 --- a/src/main/java/com/novitechie/SystemTransformer.java +++ b/src/main/java/com/novitechie/SystemTransformer.java @@ -25,27 +25,23 @@ public class SystemTransformer implements MyTransformer { for (MethodNode m : node.methods) { if ("getenv".equals(m.name) && m.desc.equals("(Ljava/lang/String;)Ljava/lang/String;")) { InsnList list = new InsnList(); - list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); - LabelNode labelNode = new LabelNode(); - list.add(new JumpInsnNode(IFEQ, labelNode)); + LabelNode L0 = new LabelNode(); list.add(new VarInsnNode(ALOAD, 0)); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/SystemRule", "checkEnv", "(Ljava/lang/String;)Z", false)); - list.add(new JumpInsnNode(IFEQ, labelNode)); + list.add(new JumpInsnNode(IFEQ, L0)); list.add(new InsnNode(ACONST_NULL)); list.add(new InsnNode(ARETURN)); - list.add(labelNode); + list.add(L0); m.instructions.insert(list); } else if ("getProperty".equals(m.name) && (m.desc.equals("(Ljava/lang/String;)Ljava/lang/String;") || m.desc.equals("(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;"))) { InsnList list = new InsnList(); - list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/StackTraceRule", "check", "()Z", false)); - LabelNode labelNode = new LabelNode(); - list.add(new JumpInsnNode(IFEQ, labelNode)); + LabelNode L0 = new LabelNode(); list.add(new VarInsnNode(ALOAD, 0)); list.add(new MethodInsnNode(INVOKESTATIC, "com/novitechie/rules/SystemRule", "checkProperty", "(Ljava/lang/String;)Z", false)); - list.add(new JumpInsnNode(IFEQ, labelNode)); + list.add(new JumpInsnNode(IFEQ, L0)); list.add(new InsnNode(ACONST_NULL)); list.add(new InsnNode(ARETURN)); - list.add(labelNode); + list.add(L0); m.instructions.insert(list); } } diff --git a/src/main/java/com/novitechie/rules/BootstrapClassRule.java b/src/main/java/com/novitechie/rules/BootstrapClassRule.java new file mode 100644 index 0000000..2eb0fe3 --- /dev/null +++ b/src/main/java/com/novitechie/rules/BootstrapClassRule.java @@ -0,0 +1,29 @@ +package com.novitechie.rules; + +import com.janetfilter.core.commons.DebugInfo; +import com.novitechie.LogUtil; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author YeloChick + */ +public class BootstrapClassRule { + + private static final List PREVENT_LOAD_PACKAGES = new ArrayList() { + { + add("com.janetfilter"); + } + }; + + public static boolean check(String name) throws Exception { + boolean f = PREVENT_LOAD_PACKAGES.stream().anyMatch(name::startsWith); + if (f) { + DebugInfo.output("======================LoadBootstrapClass: " + name); + LogUtil.printStackTrace(); + return true; + } + return false; + } +} diff --git a/src/main/java/com/novitechie/rules/ClassRule.java b/src/main/java/com/novitechie/rules/ClassRule.java index 027272c..c57836f 100644 --- a/src/main/java/com/novitechie/rules/ClassRule.java +++ b/src/main/java/com/novitechie/rules/ClassRule.java @@ -1,6 +1,7 @@ package com.novitechie.rules; import com.janetfilter.core.commons.DebugInfo; +import com.novitechie.LogUtil; import java.util.ArrayList; import java.util.List; @@ -20,11 +21,7 @@ public class ClassRule { public static void checkMethod(String name) throws Exception { if (PREVENT_LOAD_METHOD.stream().anyMatch(name::equals)) { DebugInfo.output("======================LoadMethod: " + name); - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - DebugInfo.output("===========================stackTrace: "); - for (StackTraceElement stackTraceElement : stackTrace) { - DebugInfo.output(stackTraceElement.getClassName() + ":" + stackTraceElement.getMethodName()); - } + LogUtil.printStackTrace(); throw new NoSuchMethodException(); } } diff --git a/src/main/java/com/novitechie/rules/IdeaPluginRule.java b/src/main/java/com/novitechie/rules/IdeaPluginRule.java index e98d682..24d2417 100644 --- a/src/main/java/com/novitechie/rules/IdeaPluginRule.java +++ b/src/main/java/com/novitechie/rules/IdeaPluginRule.java @@ -1,6 +1,7 @@ package com.novitechie.rules; import com.janetfilter.core.commons.DebugInfo; +import com.novitechie.LogUtil; import java.util.ArrayList; import java.util.List; @@ -23,11 +24,7 @@ public class IdeaPluginRule { boolean f = PREVENT_LOAD_PLUGINS.stream().anyMatch(name::equals); if (f) { DebugInfo.output("======================LoadPlugin: " + name); - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - DebugInfo.output("===========================stackTrace: "); - for (StackTraceElement stackTraceElement : stackTrace) { - DebugInfo.output(stackTraceElement.getClassName() + ":" + stackTraceElement.getMethodName()); - } + LogUtil.printStackTrace(); } return f; } diff --git a/src/main/java/com/novitechie/rules/LoadClassRule.java b/src/main/java/com/novitechie/rules/LoadClassRule.java index ff62fd9..98952ba 100644 --- a/src/main/java/com/novitechie/rules/LoadClassRule.java +++ b/src/main/java/com/novitechie/rules/LoadClassRule.java @@ -1,6 +1,7 @@ package com.novitechie.rules; import com.janetfilter.core.commons.DebugInfo; +import com.novitechie.LogUtil; import java.util.ArrayList; import java.util.List; @@ -16,13 +17,10 @@ public class LoadClassRule { }; public static void check(String name) throws Exception { - if (PREVENT_LOAD_PACKAGES.stream().anyMatch(name::startsWith)) { + boolean f = PREVENT_LOAD_PACKAGES.stream().anyMatch(name::startsWith); + if (f) { DebugInfo.output("======================LoadClass: " + name); - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - DebugInfo.output("===========================stackTrace: "); - for (StackTraceElement stackTraceElement : stackTrace) { - DebugInfo.output(stackTraceElement.getClassName() + ":" + stackTraceElement.getMethodName()); - } + LogUtil.printStackTrace(); throw new ClassNotFoundException(name); } } diff --git a/src/main/java/com/novitechie/rules/ResourceRule.java b/src/main/java/com/novitechie/rules/ResourceRule.java index ae2740d..8c5cbc3 100644 --- a/src/main/java/com/novitechie/rules/ResourceRule.java +++ b/src/main/java/com/novitechie/rules/ResourceRule.java @@ -1,6 +1,7 @@ package com.novitechie.rules; import com.janetfilter.core.commons.DebugInfo; +import com.novitechie.LogUtil; import java.util.ArrayList; import java.util.List; @@ -12,7 +13,7 @@ public class ResourceRule { private static final List PREVENT_LOAD_RESOURCE = new ArrayList() { { - add("/6c81ec87e55d331c267262e892427a3d93d76683.txt"); + // add("/6c81ec87e55d331c267262e892427a3d93d76683.txt"); add("/com/janetfilter"); } }; @@ -20,13 +21,11 @@ public class ResourceRule { public static boolean check(String name) { boolean f = PREVENT_LOAD_RESOURCE.stream().anyMatch(name::startsWith); if (f) { - DebugInfo.output("======================LoadResource: " + name); - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - DebugInfo.output("===========================stackTrace: "); - for (StackTraceElement stackTraceElement : stackTrace) { - DebugInfo.output(stackTraceElement.getClassName() + ":" + stackTraceElement.getMethodName()); + if (StackTraceRule.check()) { + DebugInfo.output("======================LoadResource: " + name); + LogUtil.printStackTrace(); + return true; } - return true; } return false; } diff --git a/src/main/java/com/novitechie/rules/SystemRule.java b/src/main/java/com/novitechie/rules/SystemRule.java index be96608..ad6d838 100644 --- a/src/main/java/com/novitechie/rules/SystemRule.java +++ b/src/main/java/com/novitechie/rules/SystemRule.java @@ -1,6 +1,7 @@ package com.novitechie.rules; import com.janetfilter.core.commons.DebugInfo; +import com.novitechie.LogUtil; import java.util.ArrayList; import java.util.List; @@ -12,7 +13,19 @@ public class SystemRule { private static final List PREVENT_LOAD_ENV = new ArrayList() { { - add("_VM_OPTIONS"); + add("IDEA_VM_OPTIONS"); + add("CLION_VM_OPTIONS"); + add("PHPSTORM_VM_OPTIONS"); + add("GOLAND_VM_OPTIONS"); + add("PYCHARM_VM_OPTIONS"); + add("WEBIDE_VM_OPTIONS"); + add("RIDER_VM_OPTIONS"); + add("DATAGRIP_VM_OPTIONS"); + add("APPCODE_VM_OPTIONS"); + add("DATASPELL_VM_OPTIONS"); + add("GATEWAY_VM_OPTIONS"); + add("JETBRAINS_CLIENT_VM_OPTIONS"); + add("JETBRAINSCLIENT_VM_OPTIONS"); add("JANF_DEBUG"); add("JANF_OUTPUT"); } @@ -26,15 +39,13 @@ public class SystemRule { }; public static boolean checkEnv(String name) { - boolean f = PREVENT_LOAD_ENV.stream().anyMatch(name::startsWith) || PREVENT_LOAD_ENV.stream().anyMatch(name::endsWith); + boolean f = PREVENT_LOAD_ENV.stream().anyMatch(name::equals); if (f) { - DebugInfo.output("======================LoadEnv: " + name); - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - DebugInfo.output("===========================stackTrace: "); - for (StackTraceElement stackTraceElement : stackTrace) { - DebugInfo.output(stackTraceElement.getClassName() + ":" + stackTraceElement.getMethodName()); + if (StackTraceRule.check()) { + DebugInfo.output("======================LoadEnv: " + name); + LogUtil.printStackTrace(); + return true; } - return true; } return false; } @@ -42,13 +53,11 @@ public class SystemRule { public static boolean checkProperty(String name) { boolean f = PREVENT_LOAD_PROPERTY.stream().anyMatch(name::equals); if (f) { - DebugInfo.output("======================LoadProperty: " + name); - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - DebugInfo.output("===========================stackTrace: "); - for (StackTraceElement stackTraceElement : stackTrace) { - DebugInfo.output(stackTraceElement.getClassName() + ":" + stackTraceElement.getMethodName()); + if (StackTraceRule.check()) { + DebugInfo.output("======================LoadProperty: " + name); + LogUtil.printStackTrace(); + return true; } - return true; } return false; }