Scott Murphy Heiberg created GROOVY-12594:
---------------------------------------------
Summary: STC rejects a @Virtual trait static accessor read or
written with property syntax
Key: GROOVY-12594
URL: https://issues.apache.org/jira/browse/GROOVY-12594
Project: Groovy
Issue Type: Bug
Affects Versions: 6.0.0
Reporter: Scott Murphy Heiberg
{code:groovy}
import groovy.transform.Virtual
@groovy.transform.CompileStatic
trait T {
@Virtual static boolean isVr() { false }
static String sm() { vr ? 'yes' : 'no' }
}
class C implements T { static boolean isVr() { true } }
class D implements T { }
assert [C.sm(), D.sm()] == ['yes', 'no']
{code}
Actual: {{[Static type checking] - No such property: vr for Class or static
property for class: T}} with {{@CompileStatic}} or {{@TypeChecked}}. The same
error occurs in instance trait methods, for a @Virtual setter written as an
assignment or compound assignment, and for a @Virtual accessor of a super
trait. The method form {{isVr()}} compiles, and dynamic Groovy runs the script.
Expected: the script compiles, and the property reads and writes dispatch
through the implementing class like {{isVr()}} does, giving {{yes}} for {{C}}
and {{no}} for {{D}}.
A @Virtual static is not promoted to the trait interface, so the type checker
finds no property on the trait for the receiver that the trait transformation
produces. The method form is resolved through the trait type checking
extension; the property form is not.
Seen in 6.0.0 (the first version with @Virtual).
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)