groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jamie Echlin <jamie.ech...@gmail.com>
Subject Re: infer return type of script
Date Tue, 22 Sep 2015 09:19:06 GMT
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