JBoss Community

Changing array fields into java.util.concurrent.atomic.AtomicReferenceArray

created by Christoph Angerer in Javassist - View the full discussion

Hi,

 

I am trying to replace fields of array type into fields of type java.util.concurrent.atomic.AtomicReferenceArray


My approach was like this:

1) change the field type through CtField.setType()

2) redirect reads/writes to arrays to static methods using CodeConverter.replaceArrayAccess(). In the static methods I would call the AtomicReferenceArray.set() and .get() methods.

3) rewrite array new bytecodes to calls to new java.util.concurrent.atomic.AtomicReferenceArray()

 

Besides several more or less small problems (e.g., I would have to rewrite local arrays and method signatures, too) my biggest problem is in step 3. I was trying inside ExprEditor.edit(NewArray a) something like: a.replace("$_ = new java.util.concurrent.atomic.AtomicReferenceArray(" + dim + ");");

 

However, this does not work because the javassist bytecode checks the type and sees that AtomicReferenceArray is not an array. Which is true, but since I will rewrite subsequent array accesses, too, I think that should be fine.

 

So my question(s) is (are): Does anybody have experience with something as intrusive as replacing all arrays in a program with a non-array object and if yes, is there any code out there from which I could learn or which I could use? If not, does anybody have an idea how I could make the third step work without the javassist compiler complaining about the type?

 

Thanks in advance for your time and effort!

Christoph

Reply to this message by going to Community

Start a new discussion in Javassist at Community