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

Julius Davies commented on LANG-816:
------------------------------------

Additional improvements thanks to ggregory's tip committed in r1376829.

http://svn.apache.org/viewvc?view=revision&revision=1376829
                
> Introduce CONST() methods to prevent Javac from inlining constants
> ------------------------------------------------------------------
>
>                 Key: LANG-816
>                 URL: https://issues.apache.org/jira/browse/LANG-816
>             Project: Commons Lang
>          Issue Type: Wish
>          Components: lang.*
>            Reporter: Julius Davies
>            Assignee: Julius Davies
>            Priority: Trivial
>             Fix For: 3.2
>
>
> ConstantUtils could contain a set of methods to ensure constants are not 
> inlined by javac.
>   
> For example, typically a developer might declare a constant like
> {code}
>   public final static int MAGIC_NUMBER = 5;
> {code}
> Should a different jar file refer to this, and the MAGIC_NUMBER is changed a 
> later date (e.g., MAGIC_NUMBER = 6), the different jar file will need to be 
> recompiled.  This is because javac typically inlines the primitive or String 
> constant directly into the bytecode, and removes the reference to the 
> MAGIC_NUMBER field.
> To help the other jar (so that it does not need to recompile when constants 
> are changed) the original developer can declare their constant using one of 
> the CONST() utility methods, instead:
> {code}
>   public final static int MAGIC_NUMBER = CONST(5);
> {code}
> I imagine the code would look something like this:
> {code}
> public static boolean CONST(boolean v) { return v; }
> public static byte CONST(byte v) { return v; }
> public static char CONST(char v) { return v; }
> public static short CONST(short v) { return v; }
> public static int CONST(int v) { return v; }
> public static long CONST(long v) { return v; }
> public static float CONST(float v) { return v; }
> public static double CONST(double v) { return v; }
> public static <T> T CONST(T t) { return t; }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to