[jboss-jira] [JBoss JIRA] (JASSIST-209) Nested classes read from ClassMemberValue cannot be loaded

Ben Romberg (JIRA) jira-events at lists.jboss.org
Wed Oct 2 04:53:02 EDT 2013


    [ https://issues.jboss.org/browse/JASSIST-209?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12808816#comment-12808816 ] 

Ben Romberg commented on JASSIST-209:
-------------------------------------

Workaround (hack):
{code}
package javassist.bytecode.annotation;

import javassist.bytecode.Descriptor;

public class ClassMemberValueReader {
	public static String readClassMemberValue(ClassMemberValue classMemberValue) {
		String v = classMemberValue.cp.getUtf8Info(classMemberValue.valueIndex);
		return Descriptor.toClassName(v);
	}
}
{code}
                
> Nested classes read from ClassMemberValue cannot be loaded
> ----------------------------------------------------------
>
>                 Key: JASSIST-209
>                 URL: https://issues.jboss.org/browse/JASSIST-209
>             Project: Javassist
>          Issue Type: Bug
>    Affects Versions: 3.18.0-GA
>            Reporter: Ben Romberg
>            Assignee: Shigeru Chiba
>
> I'm trying to upgrade Javassist in my project from version 3.16.1 to 3.18.0. I'm using the ClassMemberValue to load the (String) class-name of an annotation value, in order to load the class with Javassist using ClassPool.get(...).
> In 3.16.1, the returned class-name String for nested classes contained the $-sign, as in package.ParentClass$NestedClass, which didn't have any issues using the String with ClassPool.get(...).
> In 3.18.0 however, the returned class-name String for nested classes changed to a pure dot-notation, as in package.ParentClass.NestedClass, which cannot be used with ClassPool.get(...) anymore, as Javassist tries to load the class-file from package/ParentClass/NestedClass.class instead of package/ParentClass$NestedClass.class.
> I don't see any way to work around the issue without hacking into internal API, as the class-name String is the only way to get the annotation value. As this is a generic class (and not always a nested class), I also cannot simply replace the last dot with a $-sign.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list