[ https://issues.apache.org/jira/browse/GROOVY-8385?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16302621#comment-16302621 ]
mgroovy edited comment on GROOVY-8385 at 12/24/17 1:09 AM: ----------------------------------------------------------- I tried the fix in the current apache-groovy-sdk-2.4.14-SNAPSHOT.zip downloaded from http://ci.groovy-lang.org (with build message that GROOVY-8835 fix was included) in MInecraft, but {code} entity.@hurtResistantTime = 0 {code} (same code as given above) alas still compiles to {code} ScriptBytecodeAdapter.setField(Integer.valueOf(var19), EntityFallingEnchantedBlock.class, entity, (String)"hurtResistantTime"); {code} and accordingly fails in Minecraft. was (Author: emge): I tried the fix in the current apache-groovy-sdk-2.4.14-SNAPSHOT.zip downloaded from http://ci.groovy-lang.org MInecraft (with build message that GROOVY-8835 fix was included), but {code} entity.@hurtResistantTime = 0 {code} (same code as given above) alas still compiles to {code} ScriptBytecodeAdapter.setField(Integer.valueOf(var19), EntityFallingEnchantedBlock.class, entity, (String)"hurtResistantTime"); {code} and accordingly fails in Minecraft. > CompileStatic: Improved method call/property access Java compatibility for > Minecraft Forge obfuscation support > -------------------------------------------------------------------------------------------------------------- > > Key: GROOVY-8385 > URL: https://issues.apache.org/jira/browse/GROOVY-8385 > Project: Groovy > Issue Type: Improvement > Components: bytecode > Reporter: mgroovy > Assignee: Jochen Theodorou > Priority: Minor > Labels: Forge, Java, JavaCompatibility, Minecraft, Modding > > * Even with @CompileStatic the Groovy compiler creates bytecode for method > calls / property access which is dynamic in nature. > * This means that e.g. Minecraft Forge's obfuscator does not pick up the > calls in the generated bytecode, which means they do not get obfuscated, > which in turn makes the code fail when executed in Minecraft. > * This effectively makes it nearly impossible to write Minecraft mods with > Groovy, which in turn is a wasted opportunity to get people involved with > Groovy early on. > * Possible approaches to improve the situation: > ## Improve on a fundamental level: According to [~paulk] only a few calls are > required to be done dynamically for Groovy functionality to work as expected > under @CompileStatic. > *** The problem seems to be that it could be hard to be a 100% sure no edge > case is overlooked, as to not break @CompileStatic in situations where e.g. > no 100% Java-call-compatibility is needed. > ## Improve through newly introduced @CompileStatic parameters > *** => Static method call / property access bytecode is generated for method > code / all class methods repectively (with possible exceptions for the know > cases mentioned above). > ## Improve through newly introduced @ObfuscationJavaCompatibility annotation > that can be put on a method or class > *** behavior same as for @CompileStatic parameters above -- This message was sent by Atlassian JIRA (v6.4.14#64029)