groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Cédric Champeau <>
Subject Re: infer return type of script
Date Tue, 22 Sep 2015 09:39:35 GMT
Not necessarily. The question is what you would use that information for.

2015-09-22 11:36 GMT+02:00 Jamie Echlin <>:

> No, I guess so. So it sounds like you're saying I should forget it and
> move on to the next thing? I.e. it's not feasible to get at this in a
> static analysis context?
> On Tue, Sep 22, 2015 at 10:24 AM, Cédric Champeau <
>> wrote:
>> 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 <>:
>>> 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 <>
>>> 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 <>
>>>> wrote:
>>>>> You could call 'getInferredReturnType' on the 'run' method node of
>>>>> your script class, but inferred return types only appear to be stored
>>>>> 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
>>>>> 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 <>
>>>>> 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,
>>>>>> but I'm not really sure how to call it from a type checking script,
>>>>>> what adds the inferred return type to the metadata which is used
in that
>>>>>> method.
>>>>>> cheers, jamie

View raw message