/**
* Generated toString() method.
* Generated code is in the comments of the method body.
*/
private void addToString() {
MethodVisitor mv = getCW().visitMethod(ACC_PUBLIC, "toString", "()Ljava/lang/String;", null, null);
mv.visitCode();
// local vars
// 1 = sb
// 2 = classNames
// 3 = className
// 4 = indent2
// 5 = indent4
// 6 = i
//
int localVar = 1;
final int varSB = localVar++;
int varCLASSNAMES = localVar++;
int varCLASSNAME = localVar++;
int varINDENT2 = localVar++;
int varINDENT4 = localVar++;
int varI = localVar++;
/*
* StringBuilder sb = new StringBuilder();
* String[] classNames = this.getClass().getName().split("\\.");
* String className = classNames[classNames.length - 1];
* // classname
* sb.append(className);
* sb.append("[\n");
* String indent2 = " ";
* String indent4 = " ";
* sb.append(indent2);
* sb.append("List of interceptors :\n");
*/
mv.visitTypeInsn(NEW, "java/lang/StringBuilder");
mv.visitInsn(DUP);
mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V");
mv.visitVarInsn(ASTORE, varSB);
mv.visitVarInsn(ALOAD, 0);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getName", "()Ljava/lang/String;");
mv.visitLdcInsn("\\.");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/String", "split", "(Ljava/lang/String;)[Ljava/lang/String;");
mv.visitVarInsn(ASTORE, varCLASSNAMES);
mv.visitVarInsn(ALOAD, varCLASSNAMES);
mv.visitVarInsn(ALOAD, varCLASSNAMES);
mv.visitInsn(ARRAYLENGTH);
mv.visitInsn(ICONST_1);
mv.visitInsn(ISUB);
mv.visitInsn(AALOAD);
mv.visitVarInsn(ASTORE, varCLASSNAME);
mv.visitVarInsn(ALOAD, varSB);
mv.visitVarInsn(ALOAD, varCLASSNAME);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn("[\n");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitLdcInsn(" ");
mv.visitVarInsn(ASTORE, varINDENT2);
mv.visitLdcInsn(" ");
mv.visitVarInsn(ASTORE, varINDENT4);
mv.visitVarInsn(ALOAD, varSB);
mv.visitVarInsn(ALOAD, varINDENT2);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn("List of interceptors :\n");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
/*
* In the loop, print :
* sb.append(indent4);
* sb.append(i);
* sb.append(") - ");
* sb.append(interceptor.getClassName());
* sb.append("[");
* sb.append(interceptor.getJMethod().getName());
* sb.append("]\n");
*/
int i = 1;
// int i = 1;
mv.visitInsn(ICONST_1);
mv.visitVarInsn(ISTORE, varI);
if (this.allInterceptors != null) {
for (IJClassInterceptor interceptor : this.allInterceptors) {
mv.visitVarInsn(ALOAD, varSB);
mv.visitVarInsn(ALOAD, varINDENT4);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitVarInsn(ILOAD, varI);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(I)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn(") - ");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
// sb.append(interceptor.getClassName());
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn(interceptor.getClassName());
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn("[");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
// sb.append(interceptor.getJMethod().getName());
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn(interceptor.getJMethod().getName());
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn("]\n");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
i++;
// i++
mv.visitIincInsn(varI, 1);
}
/*
* sb.append(indent2);
* sb.append("Current interceptor : ");
* sb.append(interceptor); sb.append("/");
* sb.append(allInterceptors.size());
*/
mv.visitVarInsn(ALOAD, varSB);
mv.visitVarInsn(ALOAD, varINDENT2);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn("Current interceptor : ");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETFIELD, this.generatedClassName, "interceptor", "I");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(I)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn("/");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn(String.valueOf(this.allInterceptors.size()));
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
} else {
/*
* sb.append(indent2);
* sb.append("No interceptors : ");
*/
mv.visitVarInsn(ALOAD, varSB);
mv.visitVarInsn(ALOAD, varINDENT2);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn("No interceptors : ");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
}
/*
* sb.append("\n");
* sb.append("]");
* return sb.toString();
*/
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn("\n");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitLdcInsn("]");
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
"(Ljava/lang/String;)Ljava/lang/StringBuilder;");
mv.visitInsn(POP);
mv.visitVarInsn(ALOAD, varSB);
mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;");
mv.visitInsn(ARETURN);
mv.visitMaxs(0, 0);
mv.visitEnd();
}