Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
Description
Verifier adds GroovyObject to most classes near the start of the classgen compile phase. However, classgen proceeds per class node and there are a number of places that check for GroovyObject and can be subject to order-of-operations issues.
Consider the following (excerpt of GROOVY-5517 test case):
class MyHashMap extends HashMap { public static int version = 123 } def map = new MyHashMap() map['foo'] = 456 print map.foo
The script class can be processed before MyHashMap and the checks in AsmClassGenerator can produce different bytecode depending on detection of GroovyObject on MyHashMap. Under static compilation this means the difference between StaticTypesCallSiteWriter#makeGetPropertySite and StaticTypesCallSiteWriter#makeGroovyObjectGetPropertySite for "map.foo".
https://stackoverflow.com/a/61071840/1082681
https://github.com/groovy/groovy-eclipse/issues/1353
Attachments
Issue Links
- is related to
-
GROOVY-5517 Type inference doesn't work with a Java class and a static property
- Closed
-
GROOVY-8074 @CompileStatic class property accessed instead of map property
- Closed