From de0773d993e98fcb199ed7612ac88e0b8b58651e Mon Sep 17 00:00:00 2001 From: ThatGamerBlue Date: Tue, 22 Dec 2020 15:51:48 +0000 Subject: [PATCH] injector: add interfaces correctly --- build.gradle.kts | 2 +- .../java/net/runelite/asm/Interfaces.java | 7 +++-- .../openosrs-injector.gradle.kts | 4 +-- .../injector/injectors/MixinInjector.java | 31 +++++++++++++++++++ 4 files changed, 38 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index f5509e1798..20fb97a251 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -36,7 +36,7 @@ buildscript { dependencies { classpath("org.ajoberstar.grgit:grgit-core:4.1.0") classpath("com.github.ben-manes:gradle-versions-plugin:0.36.0") - classpath("com.openosrs:openosrs-injector:1.0.1") + classpath("com.openosrs:openosrs-injector:1.0.2") } } diff --git a/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java b/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java index 180417b3f6..ce8925af10 100644 --- a/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java +++ b/deobfuscator/src/main/java/net/runelite/asm/Interfaces.java @@ -43,12 +43,15 @@ public class Interfaces implements Iterable classFile = c; } - public void addInterface(Class clazz) + public boolean addInterface(Class clazz) { - if (!interfaces.contains(clazz)) + if (interfaces.stream().noneMatch((itf) -> itf.getName().equals(clazz.getName()))) { interfaces.add(clazz); + return true; } + + return false; } public List getInterfaces() diff --git a/openosrs-injector/openosrs-injector.gradle.kts b/openosrs-injector/openosrs-injector.gradle.kts index d4ea924fb9..050d9e0d0d 100644 --- a/openosrs-injector/openosrs-injector.gradle.kts +++ b/openosrs-injector/openosrs-injector.gradle.kts @@ -15,10 +15,8 @@ plugins { id("se.patrikerdes.use-latest-versions") } -val oprsver = "3.5.1" - group = "com.openosrs" -version = "1.0.1" +version = "1.0.2" repositories { mavenCentral() diff --git a/openosrs-injector/src/main/java/com/openosrs/injector/injectors/MixinInjector.java b/openosrs-injector/src/main/java/com/openosrs/injector/injectors/MixinInjector.java index 467a200ab3..8202be72a7 100644 --- a/openosrs-injector/src/main/java/com/openosrs/injector/injectors/MixinInjector.java +++ b/openosrs-injector/src/main/java/com/openosrs/injector/injectors/MixinInjector.java @@ -87,6 +87,7 @@ public class MixinInjector extends AbstractInjector private static final String ASSERTION_FIELD = "$assertionsDisabled"; private static final String MIXIN_BASE = "net/runelite/mixins/"; + private int injectedInterfaces = 0; private final Map injectedFields = new HashMap<>(); private final Map shadowFields = new HashMap<>(); private int copied = 0, replaced = 0, injected = 0; @@ -106,6 +107,13 @@ public class MixinInjector extends AbstractInjector @VisibleForTesting void inject(Map, List> mixinTargets) { + for (Map.Entry, List> entry : mixinTargets.entrySet()) + { + injectInterfaces(entry.getKey(), entry.getValue()); + } + + log.info("[INFO] Injected {} interfaces", injectedInterfaces); + for (Map.Entry, List> entry : mixinTargets.entrySet()) { System.out.println(entry.getKey().get().getName()); @@ -157,6 +165,29 @@ public class MixinInjector extends AbstractInjector return builder.build(); } + private void injectInterfaces(Provider mixinProvider, List targetClasses) + { + try + { + final ClassFile mixinClass = mixinProvider.get(); + + for (final ClassFile targetClass : targetClasses) + { + mixinClass.getInterfaces().getInterfaces().forEach((itf) -> + { + if (targetClass.getInterfaces().addInterface(itf)) + { + injectedInterfaces++; + } + }); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + private void injectFields(Provider mixinProvider, List targetClasses) { try