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

Eric Milles commented on GROOVY-11019:
--------------------------------------

If your string field is initialized with an expression that the groovy compiler 
cannot convert to an inline constant (one single string literal) then it uses 
"new java.lang.String(null)" as the value so that javac cannot inline the 
value.  There is a bug where it casts null to java.lang.Object not 
java.lang.String.

If you can find the initial expression that does this, you may be able to 
rewrite it so that it inlines properly.  If you move the initialization to a 
static block, it sets the value as "null" which is a bug too, so don't do that.

I have a fix for both issues.

> joint compilation:  public static final string does not compile
> ---------------------------------------------------------------
>
>                 Key: GROOVY-11019
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11019
>             Project: Groovy
>          Issue Type: Bug
>          Components: Stub generator / Joint compiler
>    Affects Versions: 4.0.11
>         Environment: OpenJDK Runtime Environment Temurin-11.0.16.1+1 (build 
> 11.0.16.1+1)
>            Reporter: Jason Garrett
>            Assignee: Eric Milles
>            Priority: Major
>
> I haven't managed to reproduce this in a simple example, but as I'm upgrading 
> my application from groovy 3 to 4 I have run into this situation.  I have a 
> class that defines a public static final string like this:
> {code:java}
> class PublicStaticString { 
>    public static final String NONE = "None" 
> }
> {code}
> Its java stub fails to compile with:
> {noformat}
> error: no suitable constructor found for String(Object)
> public static final java.lang.String NONE = new 
> java.lang.String((java.lang.Object)null);{noformat}
>  
> I can remove the "public" from the declaration and the class/stub will 
> compile, but now any java class that references that field will fail to 
> compile with:
> {noformat}
> error: NONE has private access in PublicStaticString
>          selectNoneButton.setText(PublicStaticString.NONE);{noformat}
> The only way I know to fix this is to convert the java class to groovy.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to