mgroovy created GROOVY-9965: ------------------------------- Summary: Static generic method hiding method of same name leads to MME Key: GROOVY-9965 URL: https://issues.apache.org/jira/browse/GROOVY-9965 Project: Groovy Issue Type: Bug Components: Compiler Affects Versions: 2.5.14 Environment: Windows 10 jdk-11.0.10.9-hotspot IntelliJ 2020.3.2 Reporter: mgroovy
*Problem* Executing the test from the sample below throws: {code:java} groovy.lang.MissingMethodException: No signature of method: static simple.groovy.bugs.gb_2021_03_04.TableGeneric.reference() is applicable for argument types: (String) values: [FOO_schema]{code} even though TableGeneric's base class Table has a public method with signature: {code:java} Table reference(String){code} It seems this method is hidden by the static Table method: {code:java}static <T extends Table> T reference(T table){code} *Expected* Table#reference(String) should be called inside TableGeneric#reference() . *Sample Code* {code:java} import org.junit.Ignore import org.junit.Test class GroovyBugs_2021_03_04 { @Test @Ignore void 'Groovy 2-5-14 TableGeneric#reference() MissingMethodException'() { final TableGeneric tableGeneric = new TableGeneric("FOO") println tableGeneric.reference() } } {code} {code:java} import groovy.transform.Canonical @Canonical class Table { final String name = "defaultTable" Table reference(String schema) { println "${this.getClass().simpleName}#reference(schema): schema=$schema" return this } // Commenting out this static method gets rid of the error static <T extends Table> T reference(T table) { println "Table.reference(table): table=$table" assert null != table return table } } {code} {code:java} import groovy.transform.InheritConstructors @InheritConstructors class TableGeneric extends Table { // If this method takes an argument, the error disappears TableGeneric reference() { println "${this.getClass().simpleName}#reference(): name=$name" final String schema = "${name}_schema" /* Passing schema = null leads to Table.reference(T table) being called with table=null */ return (TableGeneric) super.reference(schema) } } {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)