You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Paul King (Jira)" <ji...@apache.org> on 2020/11/21 07:20:00 UTC
[jira] [Updated] (GROOVY-9093) SC: subclass access to
package-private or private field is not indicated as an error
[ https://issues.apache.org/jira/browse/GROOVY-9093?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul King updated GROOVY-9093:
------------------------------
Fix Version/s: 3.0.7
2.5.14
> 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.4.16, 3.0.0-alpha-4, 2.5.6
> Reporter: Eric Milles
> Assignee: Eric Milles
> Priority: Major
> Fix For: 2.5.14, 3.0.7, 4.0.0-alpha-2
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> 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
(v8.3.4#803005)