From 25d9b292787ef5ea607af9b065186b9d4d057063 Mon Sep 17 00:00:00 2001 From: Jeroen Ketelaar Date: Tue, 7 May 2019 22:25:34 -0500 Subject: [PATCH 1/2] [TASK] Added Thread#getId redirect --- .../core/asm/redirect/ThreadRedirect.java | 4 + .../core/parsers/hooks/XMLHookParser.java | 168 +++++++++--------- 2 files changed, 88 insertions(+), 84 deletions(-) diff --git a/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java b/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java index b0a3d45..a6a58a3 100644 --- a/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java +++ b/src/main/java/org/parabot/core/asm/redirect/ThreadRedirect.java @@ -65,4 +65,8 @@ public class ThreadRedirect { public static boolean isInterrupted(Thread thread) { return thread.isInterrupted(); } + + public static long getId(Thread thread) { + return thread.getId(); + } } diff --git a/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java b/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java index e46e724..92909d9 100644 --- a/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java +++ b/src/main/java/org/parabot/core/parsers/hooks/XMLHookParser.java @@ -22,15 +22,15 @@ import java.util.Map; * @author JKetelaar */ public class XMLHookParser extends HookParser { - private Document doc; + private Document doc; private HashMap interfaceMap; private HashMap constants; - private boolean parsedInterfaces; + private boolean parsedInterfaces; public XMLHookParser(HookFile hookFile) { super(hookFile); - interfaceMap = new HashMap(); - constants = new HashMap(); + interfaceMap = new HashMap<>(); + constants = new HashMap<>(); try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory .newInstance(); @@ -45,48 +45,6 @@ public class XMLHookParser extends HookParser { } } - private static String resolveDesc(String returnDesc) { - String array = ""; - if (returnDesc != null && returnDesc.contains("%s")) { - StringBuilder str = new StringBuilder(); - if (returnDesc.startsWith("[")) { - for (int i = 0; i < returnDesc.length(); i++) { - if (returnDesc.charAt(i) == '[') { - array += '['; - } - } - returnDesc = returnDesc.replaceAll("\\[", ""); - } - str.append(array) - .append('L') - .append(String.format(returnDesc, - AddInterfaceAdapter.getAccessorPackage())) - .append(";"); - returnDesc = str.toString(); - } - return returnDesc; - } - - private static final boolean isSet(String tag, Element element) { - return element.getElementsByTagName(tag).getLength() > 0; - } - - private static final String getValue(String tag, Element element) { - if (element.getElementsByTagName(tag).item(0) == null) { - throw new NullPointerException("MISSING HOOK TAG: The '" + tag + "' xml tag is missing from one of the hooks of type: " + element.getParentNode().getNodeName()); - } - NodeList nodes = element.getElementsByTagName(tag).item(0) - .getChildNodes(); - if (nodes.getLength() == 0 || nodes.item(0) == null) { - if (Core.inVerboseMode()) { - System.err.println("WARNING: Invalid Hook " + tag + " subnode. Tag is missing or empty?"); - } - return ""; - } - Node node = (Node) nodes.item(0); - return node.getNodeValue(); - } - @Override public Interface[] getInterfaces() { parsedInterfaces = true; @@ -105,8 +63,8 @@ public class XMLHookParser extends HookParser { if (node.getNodeType() != Node.ELEMENT_NODE) { return null; } - final Element interfaceRoot = (Element) node; - final NodeList interfaces = interfaceRoot.getElementsByTagName("add"); + final Element interfaceRoot = (Element) node; + final NodeList interfaces = interfaceRoot.getElementsByTagName("add"); if (interfaces.getLength() == 0) { return null; } @@ -116,9 +74,9 @@ public class XMLHookParser extends HookParser { if (n.getNodeType() != Node.ELEMENT_NODE) { continue; } - final Element addInterface = (Element) n; - final String className = getValue("classname", addInterface); - final String interfaceClass = getValue("interface", addInterface); + final Element addInterface = (Element) n; + final String className = getValue("classname", addInterface); + final String interfaceClass = getValue("interface", addInterface); interfaceMap.put(interfaceClass, className); final Interface inf = new Interface(className, interfaceClass); interfaceList.add(inf); @@ -147,8 +105,8 @@ public class XMLHookParser extends HookParser { if (node.getNodeType() != Node.ELEMENT_NODE) { return null; } - final Element superRoot = (Element) node; - final NodeList supers = superRoot.getElementsByTagName("add"); + final Element superRoot = (Element) node; + final NodeList supers = superRoot.getElementsByTagName("add"); if (supers.getLength() == 0) { return null; } @@ -158,10 +116,10 @@ public class XMLHookParser extends HookParser { if (n.getNodeType() != Node.ELEMENT_NODE) { continue; } - final Element addSuper = (Element) n; - final String className = getValue("classname", addSuper); - final String superClass = getValue("super", addSuper); - final Super sup = new Super(className, superClass); + final Element addSuper = (Element) n; + final String className = getValue("classname", addSuper); + final String superClass = getValue("super", addSuper); + final Super sup = new Super(className, superClass); superList.add(sup); } return superList.toArray(new Super[superList.size()]); @@ -183,8 +141,8 @@ public class XMLHookParser extends HookParser { if (node.getNodeType() != Node.ELEMENT_NODE) { return null; } - final Element getterRoot = (Element) node; - final NodeList getters = getterRoot.getElementsByTagName("add"); + final Element getterRoot = (Element) node; + final NodeList getters = getterRoot.getElementsByTagName("add"); if (getters.getLength() == 0) { return null; } @@ -208,9 +166,9 @@ public class XMLHookParser extends HookParser { "accessor", addGetter)); final String into = isSet("into", addGetter) ? getValue("into", addGetter) : className; - final long multiplier = isSet("multiplier", addGetter) ? Long.parseLong(getValue("multiplier", addGetter)) : 0L; - final String fieldName = getValue("field", addGetter); - final String fieldDesc = isSet("descfield", addGetter) ? getValue("descfield", addGetter) : null; + final long multiplier = isSet("multiplier", addGetter) ? Long.parseLong(getValue("multiplier", addGetter)) : 0L; + final String fieldName = getValue("field", addGetter); + final String fieldDesc = isSet("descfield", addGetter) ? getValue("descfield", addGetter) : null; final String methodName = getValue("methodname", addGetter); boolean staticMethod = isSet("methstatic", addGetter) ? (getValue( "methstatic", addGetter).equals("true")) : false; @@ -258,8 +216,8 @@ public class XMLHookParser extends HookParser { if (node.getNodeType() != Node.ELEMENT_NODE) { return null; } - final Element setterRoot = (Element) node; - final NodeList setters = setterRoot.getElementsByTagName("add"); + final Element setterRoot = (Element) node; + final NodeList setters = setterRoot.getElementsByTagName("add"); if (setters.getLength() == 0) { return null; } @@ -283,8 +241,8 @@ public class XMLHookParser extends HookParser { "accessor", addSetter)); final String into = isSet("into", addSetter) ? getValue("into", addSetter) : className; - final String fieldName = getValue("field", addSetter); - final String fieldDesc = isSet("descfield", addSetter) ? getValue("descfield", addSetter) : null; + final String fieldName = getValue("field", addSetter); + final String fieldDesc = isSet("descfield", addSetter) ? getValue("descfield", addSetter) : null; final String methodName = getValue("methodname", addSetter); boolean staticMethod = isSet("methstatic", addSetter) ? (getValue( "methstatic", addSetter).equals("true")) : false; @@ -331,8 +289,8 @@ public class XMLHookParser extends HookParser { if (node.getNodeType() != Node.ELEMENT_NODE) { return null; } - final Element invokerRoot = (Element) node; - final NodeList invokers = invokerRoot.getElementsByTagName("add"); + final Element invokerRoot = (Element) node; + final NodeList invokers = invokerRoot.getElementsByTagName("add"); if (invokers.getLength() == 0) { return null; } @@ -356,15 +314,15 @@ public class XMLHookParser extends HookParser { "accessor", addInvoker)); final String into = isSet("into", addInvoker) ? getValue("into", addInvoker) : className; - final String methodName = getValue("methodname", addInvoker); + final String methodName = getValue("methodname", addInvoker); final String invMethodName = getValue("invokemethod", addInvoker); - final String argsDesc = getValue("argsdesc", addInvoker); + final String argsDesc = getValue("argsdesc", addInvoker); String returnDesc = isSet("desc", addInvoker) ? resolveDesc(getValue( "desc", addInvoker)) : null; - final boolean isInterface = isSet("interface", addInvoker) ? Boolean.parseBoolean(getValue("interface", addInvoker)) : false; - final String instanceCast = isSet("instancecast", addInvoker) ? getValue("instancecast", addInvoker) : null; - final String checkCastArgsDesc = isSet("castargs", addInvoker) ? getValue("castargs", addInvoker) : null; + final boolean isInterface = isSet("interface", addInvoker) ? Boolean.parseBoolean(getValue("interface", addInvoker)) : false; + final String instanceCast = isSet("instancecast", addInvoker) ? getValue("instancecast", addInvoker) : null; + final String checkCastArgsDesc = isSet("castargs", addInvoker) ? getValue("castargs", addInvoker) : null; final Invoker invoker = new Invoker(into, className, invMethodName, argsDesc, returnDesc, methodName, isInterface, instanceCast, checkCastArgsDesc); @@ -393,7 +351,7 @@ public class XMLHookParser extends HookParser { if (node.getNodeType() != Node.ELEMENT_NODE) { return null; } - final Element constantRoot = (Element) node; + final Element constantRoot = (Element) node; final NodeList constantsList = constantRoot.getElementsByTagName("add"); if (constantsList.getLength() == 0) { // return empty hashmap @@ -405,8 +363,8 @@ public class XMLHookParser extends HookParser { continue; } final Element addConstant = (Element) n; - final String key = getValue("key", addConstant); - final String value = getValue("value", addConstant); + final String key = getValue("key", addConstant); + final String value = getValue("value", addConstant); constants.put(key, value); } return constants; @@ -428,8 +386,8 @@ public class XMLHookParser extends HookParser { if (node.getNodeType() != Node.ELEMENT_NODE) { return null; } - final Element callbackRoot = (Element) node; - final NodeList callbacks = callbackRoot.getElementsByTagName("add"); + final Element callbackRoot = (Element) node; + final NodeList callbacks = callbackRoot.getElementsByTagName("add"); if (callbacks.getLength() == 0) { return null; } @@ -453,12 +411,12 @@ public class XMLHookParser extends HookParser { "classname", addCallback) : interfaceMap.get(getValue( "accessor", addCallback)); - final String methodName = getValue("methodname", addCallback); - final String callClass = getValue("callclass", addCallback); - final String callMethod = getValue("callmethod", addCallback); - final String callDesc = getValue("calldesc", addCallback); - final String callArgs = getValue("callargs", addCallback); - final String desc = getValue("desc", addCallback); + final String methodName = getValue("methodname", addCallback); + final String callClass = getValue("callclass", addCallback); + final String callMethod = getValue("callmethod", addCallback); + final String callDesc = getValue("calldesc", addCallback); + final String callArgs = getValue("callargs", addCallback); + final String desc = getValue("desc", addCallback); final boolean conditional = isSet("conditional", addCallback); final Callback callback = new Callback(className, methodName, desc, @@ -468,4 +426,46 @@ public class XMLHookParser extends HookParser { return callbackList.toArray(new Callback[callbackList.size()]); } + private static String resolveDesc(String returnDesc) { + String array = ""; + if (returnDesc != null && returnDesc.contains("%s")) { + StringBuilder str = new StringBuilder(); + if (returnDesc.startsWith("[")) { + for (int i = 0; i < returnDesc.length(); i++) { + if (returnDesc.charAt(i) == '[') { + array += '['; + } + } + returnDesc = returnDesc.replaceAll("\\[", ""); + } + str.append(array) + .append('L') + .append(String.format(returnDesc, + AddInterfaceAdapter.getAccessorPackage())) + .append(";"); + returnDesc = str.toString(); + } + return returnDesc; + } + + private static final boolean isSet(String tag, Element element) { + return element.getElementsByTagName(tag).getLength() > 0; + } + + private static final String getValue(String tag, Element element) { + if (element.getElementsByTagName(tag).item(0) == null) { + throw new NullPointerException("MISSING HOOK TAG: The '" + tag + "' xml tag is missing from one of the hooks of type: " + element.getParentNode().getNodeName()); + } + NodeList nodes = element.getElementsByTagName(tag).item(0) + .getChildNodes(); + if (nodes.getLength() == 0 || nodes.item(0) == null) { + if (Core.inVerboseMode()) { + System.err.println("WARNING: Invalid Hook " + tag + " subnode. Tag is missing or empty?"); + } + return ""; + } + Node node = (Node) nodes.item(0); + return node.getNodeValue(); + } + } From cd5c7413a2ddd65ab50333b130273e651accd5dc Mon Sep 17 00:00:00 2001 From: Jeroen Ketelaar Date: Tue, 7 May 2019 22:29:04 -0500 Subject: [PATCH 2/2] [CLEANUP] Formatted substring --- src/main/java/org/parabot/core/Context.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/parabot/core/Context.java b/src/main/java/org/parabot/core/Context.java index 3aec585..cc0420d 100644 --- a/src/main/java/org/parabot/core/Context.java +++ b/src/main/java/org/parabot/core/Context.java @@ -73,8 +73,8 @@ public class Context { public static double getJavaVersion() { String version = System.getProperty("java.version"); int pos = version.indexOf('.'); - pos = version.indexOf('.', pos+1); - return Double.parseDouble(version.substring (0, pos)); + pos = version.indexOf('.', pos + 1); + return Double.parseDouble(version.substring(0, pos)); } /**