[ 
https://issues.apache.org/jira/browse/GROOVY-8385?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16264635#comment-16264635
 ] 

Jochen Theodorou commented on GROOVY-8385:
------------------------------------------

the problem is that the solution for resolving the property access in the 
static compilation logic is split in to, a checker and a writer and the writer 
does basically the whole thing again, just not as good and ends up with "wrong" 
results. Instead the checker has to provide enough information for the writer 
to just emit the needed calls. This is a technical debt we have to resolve and 
it is in the way here. So this is not going to be a simple change. And that is 
why noone right now has the time to do it. And that is the reason why something 
like an option to static compilation will not help here. All it would do, would 
limit the calls to what is actually doable by this writer, regardless of if it 
is legitimate or not. Yes, we would get feedback of what is there to improve 
over time. But if I am right with the technical debt, it will prevent 
incremental steps.

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

Reply via email to