[ https://issues.apache.org/jira/browse/GROOVY-9777?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Eric Milles updated GROOVY-9777: -------------------------------- Fix Version/s: 3.0.8 > Stub missing cast, depending on constructor order > ------------------------------------------------- > > Key: GROOVY-9777 > URL: https://issues.apache.org/jira/browse/GROOVY-9777 > Project: Groovy > Issue Type: Bug > Components: Stub generator / Joint compiler > Affects Versions: 3.0.6 > Reporter: Keegan Witt > Assignee: Eric Milles > Priority: Major > Fix For: 3.0.8, 4.0.0-alpha-3 > > Time Spent: 50m > Remaining Estimate: 0h > > > {code:java} > package org.apache.groovy.tests > class Parent { > Parent(Object context) { > this(context.class.name) > } > Parent(Class<?> context) { > this(context.name) > } > Parent(String context) {} > } > class Child extends Parent { > Child() { > super(Child.class.name) > } > } > {code} > Generates this stub for Child, missing the cast in the constructor > {code:java} > package org.apache.groovy.tests; > import java.lang.*; > import java.util.*; > import java.io.*; > import java.net.*; > import groovy.lang.*; > import groovy.util.*; > public class Child > extends org.apache.groovy.tests.Parent { > ; > public Child > () { > super (null); > } > @groovy.transform.Generated() @groovy.transform.Internal() > @java.beans.Transient() public groovy.lang.MetaClass getMetaClass() { return > (groovy.lang.MetaClass)null;} > @groovy.transform.Generated() @groovy.transform.Internal() public void > setMetaClass(groovy.lang.MetaClass mc) { } > } > {code} > Which causes the Java compilation to fail > {noformat} > Child.java:[14,1] reference to Parent is ambiguous > both constructor Parent(java.lang.Class<?>) in > org.apache.groovy.tests.Parent and constructor Parent(java.lang.String) in > org.apache.groovy.tests.Parent match > {noformat} > > But > {code:java} > package org.apache.groovy.tests > class Parent { > Parent(Class<?> context) { > this(context.name) > } > Parent(String context) {} > Parent(Object context) { > this(context.class.name) > } > } > class Child extends Parent { > Child() { > super(Child.class.name) > } > } > {code} > Generates this stub for Child, with the cast in it > {code:java} > package org.apache.groovy.tests; > import java.lang.*; > import java.util.*; > import java.io.*; > import java.net.*; > import groovy.lang.*; > import groovy.util.*; > public class Child > extends org.apache.groovy.tests.Parent { > ; > public Child > () { > super ((java.lang.Class)null); > } > @groovy.transform.Generated() @groovy.transform.Internal() > @java.beans.Transient() public groovy.lang.MetaClass getMetaClass() { return > (groovy.lang.MetaClass)null;} > @groovy.transform.Generated() @groovy.transform.Internal() public void > setMetaClass(groovy.lang.MetaClass mc) { } > } > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)