Eric Milles created GROOVY-8103:
-----------------------------------

             Summary: STC: matching return type of one static method to 
parameter type of another
                 Key: GROOVY-8103
                 URL: https://issues.apache.org/jira/browse/GROOVY-8103
             Project: Groovy
          Issue Type: Bug
          Components: Static Type Checker
            Reporter: Eric Milles


We are using a fluent API based testing library (FEST assert).  I tried to boil 
this problem down; I hope this example is not too abstract.  Basically, there 
is a main fluent method that starts every test assertion and this is a static 
method with many overloads.  The library offers an extension mechanism where 
you put in your own type and this is where the checker is failing.
{code}
@groovy.transform.TypeChecked
def method() {
    fluent('string').isEqualTo('x') // fine
    fluent(new Util.Ours()).isSimilarTo('') // fine
    fluent(Util.Ours.factory('{}')).isSimilarTo('{"key":"val"}') // STC error
}
{code}

Supporting code (library provided):
{code}
class Fluent
{
    static FluentAPI fluent(String s) { return new FluentAPI() }
    static <T extends FluentExtension> T fluent(T t) { return t }
}

class FluentAPI
{
    FluentAPI isEqualTo(String s) { return this }
}

interface FluentExtension
{
}
{code}

Our extension:
{code}
class Util {
    static class Ours implements FluentExtension {
        Ours isSimilarTo(String json) { return this }
    }

    static Ours factory(String json) { new Ours() }
}
{code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to