Not necessarily. The question is what you would use that information for. 2015-09-22 11:36 GMT+02:00 Jamie Echlin <jamie.ech...@gmail.com>:
> 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 < > cedric.champ...@gmail.com> 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 <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 >>>>>> >>>>> >>>>> >>>> >>> >> >