What I am finding is for class definitions (instead of just simple references) the flag gets set for any occurrence of generics throughout the AST of the class. For example this class C would return true for isUsingGenerics() even though the class itself is not parameterized.
class C { void meth(List<String> list) { } } and this as well class D extends ArrayList<String> { } In ResolveVisitor's resolveGenerics... methods, I dropped the setting of the flag and didn't notice any behavior changes. ________________________________ From: Paul King <pa...@asert.com.au> Sent: Wednesday, September 11, 2019 12:48 PM To: Groovy_Developers <dev@groovy.apache.org> Subject: Re: ClassNode.isUsingGenerics() -- what is it for? My understanding is similar to yours. If isUsingGenerics() returns true it means that calling getGenericsTypes() is safe and should return a useful value. If ResolveVisitor finds any occurrence of generics then I believe it sets the flag and ensures the generics types are set correctly. It means that processing can be more efficient in some places for nodes with no generics. As to whether the efficiency saving is worth it these days or whether it is used consistently everywhere, I couldn't be sure without checking all usages. On Thu, Sep 12, 2019 at 2:33 AM Milles, Eric (TR Tech, Content & Ops) <eric.mil...@thomsonreuters.com<mailto:eric.mil...@thomsonreuters.com>> wrote: I was looking into a few bugs related to generics (and inner classes) and ran into ClassNode.isUsingGenerics() not behaving as expected. I thought it was an indicator that ClassNode.getGenericsTypes() would not return null or that the class itself is a generics placeholder type. However, ResolveVisitor is setting this flag for any appearance of generics within the class definition. Is there a known purpose of ClassNode.isUsingGenerics()? Or is it outdated and should not be called anymore?