private void constructEachEnumConstant(){ constructEnumConsts(); if(getMethodDeclaringClass().getEnumNum() != enumArgumentsList.size()){ throw new ASMSupportException("exist unassigned enum constant!"); } KernelParam[] values = new KernelParam[getMethodDeclaringClass().getEnumNum()]; GlobalVariable enumConstant; int i = 0; for(EnumConstructorInfo enumArg : enumArgumentsList){ enumConstant = val(getMethodDeclaringClass()).field(enumArg.name); values[i] = enumConstant; String enumName = enumArg.name; KernelParam[] otherArgus = enumArg.argus; KernelParam[] enumArgus = new KernelParam[otherArgus.length + 2]; enumArgus[0] = val(enumName); enumArgus[1] = val(i); System.arraycopy(otherArgus, 0, enumArgus, 2, otherArgus.length); MethodInvoker mi = new_(getMethodDeclaringClass(), enumArgus); assign(enumConstant, mi); i++; } GlobalVariable gv = val(getMethodDeclaringClass()).field("ENUM$VALUES"); KernelArrayValue av = newarray(getArrayType(getMethodDeclaringClass(), 1), values); assign(gv, av); }