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

Eric Milles commented on GROOVY-7165:
-------------------------------------

I have seen the same with static final fields.  Strangely, the implicit-this 
case fails but the class expression qualifier works just fine.  So it is not 
that Groovy says no to accessing private members.  It just is failing to 
resolve to super types for private static fields.

{code:groovy}

class Base {

  private static final String CONST = 'const'

}

class C extends Base {

  static main(args) {

    println Base.CONST // works

    println CONST // throws MissingPropertyException

  }

}
{code}

> Static Compilation: private static field accessed from a Closure produces a 
> runtime error
> -----------------------------------------------------------------------------------------
>
>                 Key: GROOVY-7165
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7165
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation
>    Affects Versions: 2.3.7
>            Reporter: Neil Galarneau
>            Priority: Major
>
> The following code compiles cleanly but throws an exception at runtime.
> This code doesn't have a stack trace. The code I simplified this from, did 
> have a stack trace.
> If I remove 'private' from staticfield, then it works:
> {code}
> @CompileStatic
> class TestPrivateStaticFieldInClosure extends BaseBug
> {
>   public static void main(String[] args)
>   {
>     (new TestPrivateStaticFieldInClosure()).show()
>   }
> }
> @CompileStatic
> class BaseBug
> {
>   private static ArrayList<String> staticfield = new ArrayList<>()
>   void show()
>   {
>     List<Function<List<String>, String>> runners = new ArrayList<>()
>     runners.add(new Called())
>     List<String> cmds = ["hello"]
>     runners.each { cmds.addAll(it.apply(staticfield)) }
>     println cmds.size()
>   }
>   class Called implements Function<List<String>, String>
>   {
>     @Override
>     String apply(List<String> strings) {
>       "groovin"
>     }
>   }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to