I didn't check at the bytecode level.  I just ran all the project tests and 
built some local projects and ran tests.

________________________________
From: Paul King <pa...@asert.com.au>
Sent: Wednesday, September 11, 2019 6:05 PM
To: Groovy_Developers <dev@groovy.apache.org>
Subject: Re: ClassNode.isUsingGenerics() -- what is it for?

By "didn't notice any behavior changes" does that include bytecode generated by 
your examples before and after?

On Thu, Sep 12, 2019 at 7:44 AM Milles, Eric (TR Tech, Content & Ops) 
<eric.mil...@thomsonreuters.com<mailto:eric.mil...@thomsonreuters.com>> wrote:
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<mailto:pa...@asert.com.au>>
Sent: Wednesday, September 11, 2019 12:48 PM
To: Groovy_Developers <dev@groovy.apache.org<mailto: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?

Reply via email to