Scott Murphy Heiberg created GROOVY-12605:
---------------------------------------------
Summary: A static accessor method of a trait cannot be referenced
as a property from a static method of the implementing class
Key: GROOVY-12605
URL: https://issues.apache.org/jira/browse/GROOVY-12605
Project: Groovy
Issue Type: Bug
Affects Versions: 5.0.8, 4.0.33, 6.0.0
Reporter: Scott Murphy Heiberg
{code:groovy}
trait T { static boolean isVr() { true } }
class C implements T { static m() { vr } }
assert C.m()
{code}
Actual: compilation fails in dynamic, type-checked and statically compiled code
alike:
{noformat}
Apparent variable 'vr' was found in a static scope but doesn't refer to a local
variable, static field or class.
{noformat}
The same happens for a static getter, for a static setter used as an assignment
target, and for a static property or accessor inherited through a super trait
(trait U extends T, class C implements U).
Expected: the bare name resolves to the static accessor woven into C, as it
does when the method is declared in a superclass and as it already does from
instance methods of C.
Cause: VariableScopeVisitor.findClassMember creates a pseudo-property for
accessor methods of the class and its superclasses, but for traits it looks
only at fields and properties, and it does not follow a super trait that is
still in the extends clause before the trait transformation. StaticVerifier
then rejects the unresolved name.
Seen in 4.0.33, 5.0.8 and 6.0.0.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)