Support array types in JavassistTypeParameterMatcherGenerator
This commit is contained in:
parent
b712b030fa
commit
881bd8eea3
@ -40,7 +40,8 @@ final class JavassistTypeParameterMatcherGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static TypeParameterMatcher generate(Class<?> type, ClassLoader classLoader) {
|
static TypeParameterMatcher generate(Class<?> type, ClassLoader classLoader) {
|
||||||
final String className = "io.netty.util.internal.__matchers__." + type.getName() + "Matcher";
|
final String typeName = typeName(type);
|
||||||
|
final String className = "io.netty.util.internal.__matchers__." + typeName + "Matcher";
|
||||||
try {
|
try {
|
||||||
try {
|
try {
|
||||||
return (TypeParameterMatcher) Class.forName(className, true, classLoader).newInstance();
|
return (TypeParameterMatcher) Class.forName(className, true, classLoader).newInstance();
|
||||||
@ -50,7 +51,7 @@ final class JavassistTypeParameterMatcherGenerator {
|
|||||||
|
|
||||||
CtClass c = classPool.getAndRename(NoOpTypeParameterMatcher.class.getName(), className);
|
CtClass c = classPool.getAndRename(NoOpTypeParameterMatcher.class.getName(), className);
|
||||||
c.setModifiers(c.getModifiers() | Modifier.FINAL);
|
c.setModifiers(c.getModifiers() | Modifier.FINAL);
|
||||||
c.getDeclaredMethod("match").setBody("{ return $1 instanceof " + type.getName() + "; }");
|
c.getDeclaredMethod("match").setBody("{ return $1 instanceof " + typeName + "; }");
|
||||||
byte[] byteCode = c.toBytecode();
|
byte[] byteCode = c.toBytecode();
|
||||||
c.detach();
|
c.detach();
|
||||||
Method method = ClassLoader.class.getDeclaredMethod(
|
Method method = ClassLoader.class.getDeclaredMethod(
|
||||||
@ -67,5 +68,13 @@ final class JavassistTypeParameterMatcherGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String typeName(Class<?> type) {
|
||||||
|
if (type.isArray()) {
|
||||||
|
return typeName(type.getComponentType()) + "[]";
|
||||||
|
}
|
||||||
|
|
||||||
|
return type.getName();
|
||||||
|
}
|
||||||
|
|
||||||
private JavassistTypeParameterMatcherGenerator() { }
|
private JavassistTypeParameterMatcherGenerator() { }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user