You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "mgroovy (JIRA)" <ji...@apache.org> on 2017/12/24 01:10:00 UTC

[jira] [Comment Edited] (GROOVY-8385) CompileStatic: Improved method call/property access Java compatibility for Minecraft Forge obfuscation support

    [ 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)