package com.ikokoon.toolkit;
import org.junit.Test;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import com.ikokoon.serenity.ATest;
import com.ikokoon.serenity.Collector;
import com.ikokoon.serenity.model.Project;
import com.ikokoon.serenity.persistence.IDataBase;
public class TypeTest extends ATest {
@Test
public void test() {
Type type = Type.getType("Lcom/ikokoon/target/Target<**>;");
printType(type);
type = Type.getType("Ljava/util/Set<Ljava/lang/String;>;");
printType(type);
type = Type.getType("Ljava/util/List<Ljava/lang/Class<Lorg/objectweb/asm/ClassVisitor;>;>;");
printType(type);
type = Type.getType("Ljava/util/Map<Ljava/lang/String;Lcom/ikokoon/serenity/persistence/IDataBase;>;");
printType(type);
type = Type.getType("Lcom/ikokoon/target/Target<**>;");
printType(type);
type = Type.getType("Ljava/util/Set<Ljava/lang/String;>;");
printType(type);
type = Type.getType("Ljava/util/List<Ljava/lang/Class<Lorg/objectweb/asm/ClassVisitor;>;>;");
printType(type);
type = Type.getType("Ljava/util/Map<Ljava/lang/String;Lcom/ikokoon/serenity/persistence/IDataBase;>;");
printType(type);
Type[] argumentTypes = Type.getArgumentTypes("(Ljava/util/Map<Ljava/lang/String;Lcom/ikokoon/serenity/persistence/IDataBase;>;)"
+ "Ljava/util/Map<Ljava/lang/String;Lcom/ikokoon/serenity/persistence/IDataBase;>;");
for (Type argumentType : argumentTypes) {
printType(argumentType);
}
String internalName = Type.getInternalName(Collector.class);
logger.debug("Internal name : " + internalName);
String methodDescriptor = Type.getMethodDescriptor(Type.getType(String.class), new Type[] { Type.getType(Project.class),
Type.getType(IDataBase.class) });
logger.debug("Method descriptor : " + methodDescriptor);
}
private void printType(Type type) {
if (type != null) {
logger.debug("Type : class name : " + type.getClassName() + ", descriptor : " + type.getDescriptor() + ", internal name : "
+ type.getInternalName() + ", op code : " + type.getOpcode(Opcodes.ISTORE));
}
}
}