Browse Source

fixed JASSIST-181

git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@706 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
tags/log
chiba 11 years ago
parent
commit
7a49552112

+ 1
- 1
Readme.html View File

@@ -283,7 +283,7 @@ see javassist.Dump.

<p>-version 3.18
<ul>
JIRA JASSIST-183, 184, 189, 162, 185, 186, 190.
JIRA JASSIST-181, 183, 184, 189, 162, 185, 186, 190.
</ul>

<p>-version 3.17.1 on December 3, 2012

+ 17
- 0
src/main/javassist/bytecode/SignatureAttribute.java View File

@@ -942,6 +942,23 @@ public class SignatureAttribute extends AttributeInfo {
}
}

/**
* Parses the given signature string as a type signature.
* The type signature is either the field type signature or a base type
* descriptor including <code>void</code> type.
*
* @throws BadBytecode thrown when a syntactical error is found.
* @since 3.18
*/
public static Type toTypeSignature(String sig) throws BadBytecode {
try {
return parseType(sig, new Cursor());
}
catch (IndexOutOfBoundsException e) {
throw error(sig);
}
}

private static ClassSignature parseSig(String sig)
throws BadBytecode, IndexOutOfBoundsException
{

+ 9
- 2
src/main/javassist/bytecode/annotation/ClassMemberValue.java View File

@@ -17,8 +17,11 @@
package javassist.bytecode.annotation;

import javassist.ClassPool;
import javassist.bytecode.BadBytecode;
import javassist.bytecode.ConstPool;
import javassist.bytecode.Descriptor;
import javassist.bytecode.SignatureAttribute;

import java.io.IOException;
import java.lang.reflect.Method;

@@ -97,7 +100,11 @@ public class ClassMemberValue extends MemberValue {
*/
public String getValue() {
String v = cp.getUtf8Info(valueIndex);
return Descriptor.toClassName(v);
try {
return SignatureAttribute.toTypeSignature(v).toString();
} catch (BadBytecode e) {
throw new RuntimeException(e);
}
}

/**
@@ -114,7 +121,7 @@ public class ClassMemberValue extends MemberValue {
* Obtains the string representation of this object.
*/
public String toString() {
return "<" + getValue() + " class>";
return getValue() + ".class";
}

/**

+ 23
- 0
src/test/javassist/JvstTest4.java View File

@@ -839,6 +839,7 @@ public class JvstTest4 extends JvstTestRoot {
assertEquals(12, invoke(obj, "test1"));
}

// JASSIST-185
public void testLocalVariableTypeTable() throws Exception {
CtClass cc = sloader.get("test4.Lvtt");
CtMethod m = cc.getDeclaredMethod("run");
@@ -846,4 +847,26 @@ public class JvstTest4 extends JvstTestRoot {
cc.writeFile();
Object obj = make(cc.getName());
}

// JASSISt-181
public void testAnnotationWithGenerics() throws Exception {
CtClass cc0 = sloader.get("test4.JIRA181b");
CtField field0 = cc0.getField("aField");
String s0 = field0.getAnnotation(test4.JIRA181b.Condition.class).toString();
assertEquals("@test4.JIRA181b$Condition(condition=java.lang.String.class)", s0);
CtField field01 = cc0.getField("aField2");
String s01 = field01.getAnnotation(test4.JIRA181b.Condition.class).toString();
assertEquals("@test4.JIRA181b$Condition(condition=void.class)", s01);

CtClass cc = sloader.get("test4.JIRA181");
CtField field = cc.getField("aField");
String s = field.getAnnotation(test4.JIRA181.Condition.class).toString();
assertEquals("@test4.JIRA181$Condition(condition=test4.JIRA181<T>.B.class)", s);
CtField field2 = cc.getField("aField2");
String s2 = field2.getAnnotation(test4.JIRA181.Condition2.class).toString();
assertEquals("@test4.JIRA181$Condition2(condition=test4.JIRA181<T>.B[].class)", s2);
}
}




+ 29
- 0
src/test/test4/JIRA181.java View File

@@ -0,0 +1,29 @@
package test4;

import java.util.ArrayList;

public class JIRA181<T extends Number> extends ArrayList<T> {
public @interface Condition {
Class<? extends ICondition> condition();
}

public @interface Condition2 {
Class<?> condition();
}

@Condition(condition = B.class)
public Object aField;

@Condition2(condition = B[].class)
public Object aField2;

public interface ICondition {
boolean match(Object src);
}

private class B implements ICondition {
public boolean match(Object src) {
return JIRA181.this.size() > 0;
}
}
}

+ 12
- 0
src/test/test4/JIRA181b.java View File

@@ -0,0 +1,12 @@
package test4;

public class JIRA181b {
public @interface Condition {
Class<?> condition();
}

@Condition(condition = String.class)
public Object aField;
@Condition(condition = void.class)
public Object aField2;
}

Loading…
Cancel
Save