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.ech...@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.si...@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.si...@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.ech...@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 >>>> >>> >>> >> >