[ https://issues.apache.org/jira/browse/GROOVY-9965?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
mgroovy updated GROOVY-9965: ---------------------------- Summary: Static generic method hiding instance method of same name leads to MME (was: Static generic method hiding method of same name leads to MME) > Static generic method hiding instance 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 > Priority: Major > Labels: generi, static > > *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)