From b283b76aa572289f10b519be1a47ef105ae8380a Mon Sep 17 00:00:00 2001 From: Chocohead Date: Mon, 16 Dec 2024 18:56:35 +0000 Subject: [PATCH] Fix crash when a mixin missing a target has an inner class Doesn't crash-crash, but will refuse to apply the mixin on any non-missing targets --- .../asm/mixin/transformer/MixinInfo.java | 7 +++++++ .../mixin/transformer/MixinPreProcessorStandard.java | 11 ++++++----- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/spongepowered/asm/mixin/transformer/MixinInfo.java b/src/main/java/org/spongepowered/asm/mixin/transformer/MixinInfo.java index 41701876b..68eb9baa6 100644 --- a/src/main/java/org/spongepowered/asm/mixin/transformer/MixinInfo.java +++ b/src/main/java/org/spongepowered/asm/mixin/transformer/MixinInfo.java @@ -1246,6 +1246,13 @@ Set getSyntheticInnerClasses() { return Collections.unmodifiableSet(this.getState().getSyntheticInnerClasses()); } + /** + * True if there are any user-defined inner classes for this mixin + */ + boolean hasInnerClasses() { + return !this.getState().getInnerClasses().isEmpty(); + } + /** * Get the user-defined inner classes for this mixin */ diff --git a/src/main/java/org/spongepowered/asm/mixin/transformer/MixinPreProcessorStandard.java b/src/main/java/org/spongepowered/asm/mixin/transformer/MixinPreProcessorStandard.java index 5be4f8f22..7a304949a 100644 --- a/src/main/java/org/spongepowered/asm/mixin/transformer/MixinPreProcessorStandard.java +++ b/src/main/java/org/spongepowered/asm/mixin/transformer/MixinPreProcessorStandard.java @@ -201,11 +201,12 @@ final MixinPreProcessorStandard prepare(Extensions extensions) { } protected void prepareInnerClasses(Extensions extensions) { - InnerClassGenerator icg = extensions.getGenerator(InnerClassGenerator.class); - for (String targetClassName : this.mixin.getDeclaredTargetClasses()) { - ClassInfo targetClassInfo = ClassInfo.forName(targetClassName); - for (String innerClass : this.mixin.getInnerClasses()) { - icg.registerInnerClass(this.mixin, targetClassInfo, innerClass); + if (this.mixin.hasInnerClasses()) { + InnerClassGenerator icg = extensions.getGenerator(InnerClassGenerator.class); + for (ClassInfo targetClassInfo : this.mixin.getTargets()) { + for (String innerClass : this.mixin.getInnerClasses()) { + icg.registerInnerClass(this.mixin, targetClassInfo, innerClass); + } } } }