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



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


<p>-version 3.17.1 on December 3, 2012 <p>-version 3.17.1 on December 3, 2012

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

} }
} }


/**
* 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) private static ClassSignature parseSig(String sig)
throws BadBytecode, IndexOutOfBoundsException throws BadBytecode, IndexOutOfBoundsException
{ {

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

package javassist.bytecode.annotation; package javassist.bytecode.annotation;


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

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


*/ */
public String getValue() { public String getValue() {
String v = cp.getUtf8Info(valueIndex); String v = cp.getUtf8Info(valueIndex);
return Descriptor.toClassName(v);
try {
return SignatureAttribute.toTypeSignature(v).toString();
} catch (BadBytecode e) {
throw new RuntimeException(e);
}
} }


/** /**
* Obtains the string representation of this object. * Obtains the string representation of this object.
*/ */
public String toString() { public String toString() {
return "<" + getValue() + " class>";
return getValue() + ".class";
} }


/** /**

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

assertEquals(12, invoke(obj, "test1")); assertEquals(12, invoke(obj, "test1"));
} }


// JASSIST-185
public void testLocalVariableTypeTable() throws Exception { public void testLocalVariableTypeTable() throws Exception {
CtClass cc = sloader.get("test4.Lvtt"); CtClass cc = sloader.get("test4.Lvtt");
CtMethod m = cc.getDeclaredMethod("run"); CtMethod m = cc.getDeclaredMethod("run");
cc.writeFile(); cc.writeFile();
Object obj = make(cc.getName()); 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

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

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