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 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. 


On Mon, Sep 21, 2015 at 4:34 PM, Jamie Echlin <> wrote:

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, nor what adds the inferred return type to the metadata which is used in that method.

cheers, jamie