[
https://issues.apache.org/jira/browse/GROOVY-8283?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17581963#comment-17581963
]
ASF GitHub Bot commented on GROOVY-8283:
----------------------------------------
eric-milles opened a new pull request, #1767:
URL: https://github.com/apache/groovy/pull/1767
For the dynamic side of 8283, field can be selected in `MetaClassImpl`. If
access method is declared by an interface, the interface method is the one
indexed so it is considered pervasive in the type hierarchy (cannot be safely
hidden). Not sure if this kind of name hiding should be extended to inner
classes; hopefully the commit is enough of a first step to determine if this
protocol should be changed or left alone.
@blackdrag @paulk-asert
TODO:
- setter method
- STC selection of field vs method (verify what `StaticTypeCheckingVisitor`
does vs `MetaClassImpl`)
- static compiler classgen
> Field shadowing not considered in STC
> -------------------------------------
>
> Key: GROOVY-8283
> URL: https://issues.apache.org/jira/browse/GROOVY-8283
> Project: Groovy
> Issue Type: Bug
> Components: Static compilation, Static Type Checker
> Affects Versions: 2.4.12
> Reporter: Daniil Ovchinnikov
> Assignee: Eric Milles
> Priority: Major
> Labels: breaking
>
> {code}
> import groovy.transform.CompileStatic
> @CompileStatic class A {}
> @CompileStatic class B {}
> @CompileStatic class Parent {
> protected A ff = new A()
> A getFf() { ff }
> }
> @CompileStatic class Child extends Parent {
> protected B ff = new B()
> }
> @CompileStatic class Usage extends Child {
> def test() {
> println ff // A@id
> println getFf() // A@id
> println this.@ff // B@id
> }
> def test2() {
> I.wantsB(ff) //
> ScriptBytecodeAdapter.castToType(((Usage)this).getFf(), B.class)) is
> generated (wrong)
> I.wantsB(getFf()) // [STC] - Cannot find matching method I#wantsB(A)
> I.wantsB(this.@ff) // [STC] - Cannot find matching method I#wantsB(A)
> (wrong)
> }
> }
> @CompileStatic class I {
> static void wantsB(B b) {}
> }
> new Usage().test()
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)