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 | } |