groovy-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From alejes <ale...@yandex.ru>
Subject Overload resolution and CompileStatic
Date Fri, 04 Nov 2016 17:49:19 GMT
Hi all,

I experimented with overload resolution. And faced with two such examples:

*First*
public class Base {}
public class Derived extends Base{}

class DefaultRouter {
    def method__(arg1) {
        return 1
    }
    def method__(Base arg1, Integer x = 4) {
        return 2
    }
}

trait baseSupplier {
    def getBase() {
        return new Base();
    }
}

trait derivedSupplier {
    def getDerived() {
        return new Derived();
    }
}

class TraitSupplier implements baseSupplier, derivedSupplier {}

println("Default Router")
dr = new DefaultRouter()
ts = new TraitSupplier()
assert dr.method__(ts.getDerived()) == *2*
assert dr.method__(ts.getBase()) == *2*

*Second*
import groovy.transform.CompileStatic
@CompileStatic
public class BaseStatic {}
@CompileStatic
public class DerivedStatic extends BaseStatic {}

@CompileStatic
class DefaultRouterStatic {
    def method__(arg1) {
        return 1
    }

    def method__(BaseStatic arg1, Integer x = 4) {
        return 2
    }
}

@CompileStatic
trait baseSupplierStatic {
    def getBase() {
        return new BaseStatic();
    }
}

@CompileStatic
trait derivedSupplierStatic {
    def getDerived() {
        return new DerivedStatic();
    }
}

@CompileStatic
class TraitSupplierStatic implements baseSupplierStatic,
derivedSupplierStatic {}

@CompileStatic
class staticResolver {
    public static void main(String[] args) {
        println("Default Static Router")
        DefaultRouterStatic dr = new DefaultRouterStatic()
        TraitSupplierStatic ts = new TraitSupplierStatic();
        assert dr.method__(ts.getDerived()) == *1*
        assert dr.method__(ts.getBase()) == *1*
    }
}

To summarize, when using CompileStatic, we are seeing a call to another
method.
It is a bug or feature? If this feature, you can comments why it was decided
to do?

Thanks.



--
View this message in context: http://groovy.329449.n5.nabble.com/Overload-resolution-and-CompileStatic-tp5736491.html
Sent from the Groovy Dev mailing list archive at Nabble.com.

Mime
View raw message