You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (JIRA)" <ji...@apache.org> on 2019/04/18 18:15:01 UTC

[jira] [Created] (GROOVY-9093) SC: subclass access to package-private or private field is not indicated as an error

Eric Milles created GROOVY-9093:
-----------------------------------

             Summary: SC: subclass access to package-private or private field is not indicated as an error
                 Key: GROOVY-9093
                 URL: https://issues.apache.org/jira/browse/GROOVY-9093
             Project: Groovy
          Issue Type: Bug
    Affects Versions: 2.5.6, 3.0.0-alpha-4, 2.4.16
            Reporter: Eric Milles


Consider the following:
{code:groovy}
package p
import groovy.transform.*
@CompileStatic class Main {
  @PackageScope static final String CONST = 'value'
  static main(args) {
    new q.Sub().meth()
  }
}

package q
import groovy.transform.*
@CompileStatic class Sub extends p.Main {
  void meth() {
    print CONST
  }
}
{code}

This code compiles but throws an IllegalAccessError at run-time.  Since a subclass should not have access to it's parent's private or package-private members (if located in a different package), there should be a compile-time error like "Access to Main#CONST is forbidden @ line -1, column -1."

Replacing "@PackageScope" with "private" should get the same compile-time error but produces "MissingPropertyExceptionNoStack: No such property: CONST for class: q.Sub" at run-time.



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