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 2018/03/19 15:28:00 UTC
[jira] [Comment Edited] (GROOVY-8509) SC: error for call to
protected method from same package
[ https://issues.apache.org/jira/browse/GROOVY-8509?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16404971#comment-16404971 ]
Eric Milles edited comment on GROOVY-8509 at 3/19/18 3:27 PM:
--------------------------------------------------------------
I think this can be remedied by adding a same package check:
{code:java}
} else if (target.isProtected()) {
ClassNode node = receiver==null?ClassHelper.OBJECT_TYPE:controller.getTypeChooser().resolveType(receiver, controller.getClassNode());
boolean isThisOrSuper = false;
if (receiver instanceof VariableExpression) {
isThisOrSuper = ((VariableExpression) receiver).isThisExpression() || ((VariableExpression) receiver).isSuperExpression();
}
// GRECLIPSE edit -- GROOVY-8509
//if (!implicitThis && !isThisOrSuper
if (!implicitThis && !isThisOrSuper && !node.getPackageName().equals(classNode.getPackageName())
// GRECLIPSE end
&& StaticTypeCheckingSupport.implementsInterfaceOrIsSubclassOf(node,target.getDeclaringClass())) {
{code}
Probably needs a null check since getPackageName() does return null explicitly.
was (Author: emilles):
I think this can be remedied by adding a same package check:
{code:java}
} else if (target.isProtected()) {
ClassNode node = receiver==null?ClassHelper.OBJECT_TYPE:controller.getTypeChooser().resolveType(receiver, controller.getClassNode());
boolean isThisOrSuper = false;
if (receiver instanceof VariableExpression) {
isThisOrSuper = ((VariableExpression) receiver).isThisExpression() || ((VariableExpression) receiver).isSuperExpression();
}
// GRECLIPSE edit -- GROOVY-8509
//if (!implicitThis && !isThisOrSuper
if (!implicitThis && !isThisOrSuper && !node.getPackageName().equals(classNode.getPackageName())
// GRECLIPSE end
&& StaticTypeCheckingSupport.implementsInterfaceOrIsSubclassOf(node,target.getDeclaringClass())) {
{code}
> SC: error for call to protected method from same package
> --------------------------------------------------------
>
> Key: GROOVY-8509
> URL: https://issues.apache.org/jira/browse/GROOVY-8509
> Project: Groovy
> Issue Type: Bug
> Affects Versions: 2.5.0-beta-2, 2.6.0-alpha-3
> Reporter: Eric Milles
> Priority: Major
>
> Groovy 2.5+ is producing compilation errors for @CompileStatic test class calling a protected method of class under test (in same package). This should be allowed as protected is "package-private" plus subtypes.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)