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

mgroovy edited comment on GROOVY-8385 at 11/23/17 9:45 PM:
-----------------------------------------------------------

MicramodEntityMinimalJava implemented as dynamically compiled Groovy:
{code:java}
class MicramodEntityMinimalGroovy extends MicraEntityMinimalJava {
 MicramodEntityMinimalGroovy() { this.preventEntitySpawning = true }
}
{code}

Decompiled:
{code:java}
public class MicramodEntityMinimalGroovy extends MicraEntityMinimalJava 
implements GroovyObject {
  public MicramodEntityMinimalGroovy() {
    CallSite[] var1 = $getCallSiteArray();
    MetaClass var2 = this.$getStaticMetaClass();
    this.metaClass = var2;
    boolean var3 = true;
    ScriptBytecodeAdapter.setGroovyObjectProperty(
      Boolean.valueOf(var3), 
      MicramodEntityMinimalGroovy.class, this, 
      (String)"preventEntitySpawning"
    );
  }
}
{code}


was (Author: emge):
MicramodEntityMinimalJava implmented as dynamically compiled Groovy:
{code:java}
class MicramodEntityMinimalGroovy extends MicraEntityMinimalJava {
 MicramodEntityMinimalGroovy() { this.preventEntitySpawning = true }
}
{code}

Decompiled:
{code:java}
public class MicramodEntityMinimalGroovy extends MicraEntityMinimalJava 
implements GroovyObject {
  public MicramodEntityMinimalGroovy() {
    CallSite[] var1 = $getCallSiteArray();
    MetaClass var2 = this.$getStaticMetaClass();
    this.metaClass = var2;
    boolean var3 = true;
    ScriptBytecodeAdapter.setGroovyObjectProperty(
      Boolean.valueOf(var3), 
      MicramodEntityMinimalGroovy.class, this, 
      (String)"preventEntitySpawning"
    );
  }
}
{code}

> 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