[ https://issues.apache.org/jira/browse/GROOVY-10897?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles resolved GROOVY-10897. ---------------------------------- Resolution: Fixed https://github.com/apache/groovy/commit/a831581caaf729e438e22b2407703162b5d3c92f > Static Type Checking selects wrong method for abstract method call check > ------------------------------------------------------------------------ > > Key: GROOVY-10897 > URL: https://issues.apache.org/jira/browse/GROOVY-10897 > Project: Groovy > Issue Type: Bug > Components: Static Type Checker > Affects Versions: 4.0.7 > Reporter: Hannes Greule > Assignee: Eric Milles > Priority: Major > > Consider following code: > {code:java} > @CompileStatic > class E extends BImpl { > @Override > void a() { > super.a(); > } > static void main(args) { } > } > interface A { > void a() > } > interface B extends A { > @Override > void a() > } > class AImpl implements A { > @Override > void a() { > } > } > class BImpl extends AImpl implements B { > } {code} > Compiling it will fail with the error > {{[Static type checking] - Abstract method a() cannot be called directly}} > However, when running it _without_ {{@CompileStatic}} or when writing similar > code in Java, it will select the non-abstract method from {{AImpl}} instead. > It seems like this is a problem in the code to choose the best method here: > [https://github.com/apache/groovy/blob/ea6ba7c6fcfefe3d8abdfbb6e20a44b1ebb8823e/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java#L1091] > The distance from {{BImpl}} to {{B}} to the interface is less than (1) the > distance to {{AImpl}} (4), therefore the abstract method is chosen as best > method. > This originally happened when extending {{AbstractSet}} and calling > {{{}super.addAll(...){}}}. -- This message was sent by Atlassian Jira (v8.20.10#820010)