Fixed failure when instrumenting classes with an annotation containing an Enum-type value #205
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Failure Description
Phosphor instrumentation throws an
IllegalArgumentException
when processing a class containing an annotation with a value of anEnum
type.Stack Trace
Cause
ASM's
AnnotationNode
class is not instrumented by Phosphor.AnnotationNode
uses an instance of the Java Class Library classjava.util.ArrayList
to store name-value pairs for an annotation.java.util.ArrayList
is instrumented by Phosphor.Enum
values are stored byAnnotationNode
asString
arrays.ArrayList
will wrap theseString
arrays intoTaggedReferenceArray
instances and before storing them. When theAnnotationNode
goes to process theEnum
value, it receives aTaggedReferenceArray
from theArrayList
instead of aString
array.Changes
Enum
values.Enum
values by adding a class visitor toPhosphorPatcher
to unwrapTaggedReferenceArray
instances returned by certain JCL methods in ASM classes.