groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From C├ędric Champeau <cedric.champ...@gmail.com>
Subject Re: infer return type of script
Date Tue, 22 Sep 2015 09:24:33 GMT
Just for context and history, early versions of the type checker had return
type inference for methods too. However, we removed it for a good reason:
overrides. A method "foo" in class A can have an inferred type T, but "foo"
from B extends A could very well have a different inferred type T2. So you
can make no guarantee, at least for non private methods.


2015-09-22 11:19 GMT+02:00 Jamie Echlin <jamie.echlin@gmail.com>:

> Hi Shil,
>
> I did that actually, but it tells me the return type of the run method of
> Script is Object. Which is expected, if it's just looking at the actual
> method signature.
>
> But what I was hoping for is that given a script:
> "new Double(2)"
>
> it would be able to infer the actual return type is a Double. Now, I can
> imagine scripts where you randomly pick from any class on the classpath,
> invoke a no-args constructor, and return that... in that case I don't
> expect magic. But most scripts have one or two possible return statements
> (maybe implicit), I'm wondering if there is already code that can
> statically analyse a method/script and say that there are only one, two or
> whatever possible return types.
>
> I'll take a look at ReturnAdder, thanks for that.
>
> cheers, jamie
>
>
> On Mon, Sep 21, 2015 at 11:55 PM, Shil Sinha <shil.sinha@gmail.com> wrote:
>
>> Actually, the second option can be made safe by initializing ReturnAdder
>> with a listener, which will allow you to 'visit' all implicit returns
>> without actually adding return statements.
>>
>> On Mon, Sep 21, 2015 at 5:30 PM, Shil Sinha <shil.sinha@gmail.com> wrote:
>>
>>> You could call 'getInferredReturnType' on the 'run' method node of your
>>> script class, but inferred return types only appear to be stored for
>>> closures and certain binary expressions (based on the usages of the
>>> INFERRED_RETURN_TYPE marker and the storeInferredReturnType method).
>>>
>>> You could also add all implicit return statements to the 'run' method
>>> via ReturnAdder, and then infer a return type by visiting all of the return
>>> statements, but I'm not sure if that kind of AST modification in a type
>>> checking extension is safe.
>>>
>>> Shil
>>>
>>> On Mon, Sep 21, 2015 at 4:34 PM, Jamie Echlin <jamie.echlin@gmail.com>
>>> wrote:
>>>
>>>> Hi...
>>>>
>>>> Is it possible to infer the return type, or types of a script during
>>>> static compilation? Presumably there is always a finite list of branches
>>>> where the script could end.
>>>>
>>>> I'm looking
>>>> at org.codehaus.groovy.transform.stc.StaticTypeCheckingVisitor#getInferredReturnType,
>>>> but I'm not really sure how to call it from a type checking script, nor
>>>> what adds the inferred return type to the metadata which is used in that
>>>> method.
>>>>
>>>> cheers, jamie
>>>>
>>>
>>>
>>
>

Mime
View raw message