Commit 7299229f5debdced46fe260a21315eb7190e9061
1 parent
617b2c8f
minor fixes for BeforeInvoke when initialised using a MethodInfo
Showing
1 changed file
with
22 additions
and
9 deletions
java/common/com/mumfrey/liteloader/transformers/event/inject/BeforeInvoke.java
| @@ -175,6 +175,16 @@ public class BeforeInvoke extends InjectionPoint | @@ -175,6 +175,16 @@ public class BeforeInvoke extends InjectionPoint | ||
| 175 | this.methodOwners = method.getOwners(); | 175 | this.methodOwners = method.getOwners(); |
| 176 | this.methodSignatures = method.getDescriptors(); | 176 | this.methodSignatures = method.getDescriptors(); |
| 177 | this.ordinal = ordinal; | 177 | this.ordinal = ordinal; |
| 178 | + | ||
| 179 | + for (int i = 0; i < this.methodOwners.length; i++) | ||
| 180 | + { | ||
| 181 | + if (this.methodOwners[i] != null) this.methodOwners[i] = this.methodOwners[i].replace('.', '/'); | ||
| 182 | + } | ||
| 183 | + | ||
| 184 | + for (int i = 0; i < this.methodSignatures.length; i++) | ||
| 185 | + { | ||
| 186 | + if (this.methodSignatures[i] != null) this.methodSignatures[i] = this.methodSignatures[i].replace('.', '/'); | ||
| 187 | + } | ||
| 178 | } | 188 | } |
| 179 | 189 | ||
| 180 | public void setLogging(boolean logging) | 190 | public void setLogging(boolean logging) |
| @@ -200,23 +210,25 @@ public class BeforeInvoke extends InjectionPoint | @@ -200,23 +210,25 @@ public class BeforeInvoke extends InjectionPoint | ||
| 200 | { | 210 | { |
| 201 | MethodInsnNode node = (MethodInsnNode)insn; | 211 | MethodInsnNode node = (MethodInsnNode)insn; |
| 202 | 212 | ||
| 203 | - if (this.logging) LiteLoaderLogger.info("BeforeInvokeStrategy is considering invokation NAME=" + node.name + " DESC=" + node.desc + " OWNER=" + node.owner); | 213 | + if (this.logging) LiteLoaderLogger.info("BeforeInvoke is considering invokation NAME=" + node.name + " DESC=" + node.desc + " OWNER=" + node.owner); |
| 204 | 214 | ||
| 205 | int index = BeforeInvoke.arrayIndexOf(this.methodNames, node.name, -1); | 215 | int index = BeforeInvoke.arrayIndexOf(this.methodNames, node.name, -1); |
| 206 | - if (index > -1 && this.logging) LiteLoaderLogger.info("BeforeInvokeStrategy found a matching invoke, checking owner/signature..."); | 216 | + if (index > -1 && this.logging) LiteLoaderLogger.info("BeforeInvoke found a matching invoke, checking owner/signature..."); |
| 207 | 217 | ||
| 208 | - if (index > -1 && BeforeInvoke.arrayIndexOf(this.methodOwners, node.owner, index) == index && BeforeInvoke.arrayIndexOf(this.methodSignatures, node.desc, index) == index) | 218 | + int ownerIndex = BeforeInvoke.arrayIndexOf(this.methodOwners, node.owner, index); |
| 219 | + int descIndex = BeforeInvoke.arrayIndexOf(this.methodSignatures, node.desc, index); | ||
| 220 | + if (index > -1 && ownerIndex == index && descIndex == index) | ||
| 209 | { | 221 | { |
| 210 | - if (this.logging) LiteLoaderLogger.info("BeforeInvokeStrategy found a matching invoke, checking ordinal..."); | 222 | + if (this.logging) LiteLoaderLogger.info("BeforeInvoke found a matching invoke, checking ordinal..."); |
| 211 | if (this.ordinal == -1) | 223 | if (this.ordinal == -1) |
| 212 | { | 224 | { |
| 213 | - if (this.logging) LiteLoaderLogger.info("BeforeInvokeStrategy found a matching invoke at ordinal %d", ordinal); | 225 | + if (this.logging) LiteLoaderLogger.info("BeforeInvoke found a matching invoke at ordinal %d", ordinal); |
| 214 | nodes.add(node); | 226 | nodes.add(node); |
| 215 | found = true; | 227 | found = true; |
| 216 | } | 228 | } |
| 217 | else if (this.ordinal == ordinal) | 229 | else if (this.ordinal == ordinal) |
| 218 | { | 230 | { |
| 219 | - if (this.logging) LiteLoaderLogger.info("BeforeInvokeStrategy found a matching invoke at ordinal %d", ordinal); | 231 | + if (this.logging) LiteLoaderLogger.info("BeforeInvoke found a matching invoke at ordinal %d", ordinal); |
| 220 | nodes.add(node); | 232 | nodes.add(node); |
| 221 | return true; | 233 | return true; |
| 222 | } | 234 | } |
| @@ -240,10 +252,11 @@ public class BeforeInvoke extends InjectionPoint | @@ -240,10 +252,11 @@ public class BeforeInvoke extends InjectionPoint | ||
| 240 | private static int arrayIndexOf(String[] haystack, String needle, int pos) | 252 | private static int arrayIndexOf(String[] haystack, String needle, int pos) |
| 241 | { | 253 | { |
| 242 | if (haystack == null) return pos; | 254 | if (haystack == null) return pos; |
| 255 | + if (pos > -1 && pos < haystack.length && needle.equals(haystack[pos])) return pos; | ||
| 256 | + | ||
| 243 | for (int index = 0; index < haystack.length; index++) | 257 | for (int index = 0; index < haystack.length; index++) |
| 244 | - { | ||
| 245 | if (needle.equals(haystack[index])) return index; | 258 | if (needle.equals(haystack[index])) return index; |
| 246 | - } | ||
| 247 | - return pos; | 259 | + |
| 260 | + return -1; | ||
| 248 | } | 261 | } |
| 249 | } | 262 | } |