From 05ef0670ffcacdfc177cf07592fed343ac8eeb54 Mon Sep 17 00:00:00 2001 From: Su5eD Date: Sun, 3 Dec 2023 13:31:52 +0100 Subject: [PATCH] Fix LenientRuntimeEnumExtender finalizing fields Fixes #571 --- gradle.properties | 2 +- .../connector/service/LenientRuntimeEnumExtender.java | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index acaf24cd..4ba9879f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=true # Versions -versionConnector=1.0.0-beta.28 +versionConnector=1.0.0-beta.29 versionAdapter=1.8.16-1.20.1-20231120.221506 versionAdapterDefinition=1.8.21 diff --git a/src/main/java/dev/su5ed/sinytra/connector/service/LenientRuntimeEnumExtender.java b/src/main/java/dev/su5ed/sinytra/connector/service/LenientRuntimeEnumExtender.java index 3cac25ce..625edb9d 100644 --- a/src/main/java/dev/su5ed/sinytra/connector/service/LenientRuntimeEnumExtender.java +++ b/src/main/java/dev/su5ed/sinytra/connector/service/LenientRuntimeEnumExtender.java @@ -22,9 +22,12 @@ public int processClassWithFlags(Phase phase, ClassNode classNode, Type classTyp FieldNode node = values.get(0); if ((node.access & Opcodes.ACC_FINAL) == 0) { // It is likely a mixin already made the field mutable - // Make it final before it is processed and de-finalized again by super + // Make it final before it is processed node.access |= Opcodes.ACC_FINAL; - return super.processClassWithFlags(phase, classNode, classType, reason); + int result = super.processClassWithFlags(phase, classNode, classType, reason); + // Return to original state + node.access &= ~Opcodes.ACC_FINAL; + return result; } } // Let super deal with this