linkedin / dexmaker

A utility for doing compile or runtime code generation targeting Android's Dalvik VM
Apache License 2.0
1.86k stars 248 forks source link

Support generating locals that reference generated class types (#146) #151

Closed kkoser closed 4 years ago

kkoser commented 4 years ago

We have had support for the const-class operation, but it was only possible to fill a local with the value of a Class object you could reference in the geneeration context. This meant that it was not possible to generate a reference to a generated class, as it did not exist in the class loader until after the generation was finished and the new class loader could be used.

The real issue here is the restriction of the loadConstant() method, which requires an actual Class object. This class object gets turned into a string internally for code generation, and so we don't actually need a real class to fill the variable value correctly. Using a TypeId will still get converted to a ConstantInsn under the hood, and the value will be assigned correctly.