@Override
	public void create() {
		InputStream is = classLoader.getResourceAsStream(productClass.getName());
		try {
			//modify class
			ClassReader cr = new ClassReader(is);
			cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
			ClassModifierClassAdapter adapter = new ClassModifierClassAdapter(cw, this);
			cr.accept(adapter, ClassReader.SKIP_FRAMES);
			
			if(LOG.isPrintEnabled()){
	            LOG.print("Start modify class : " + productClass.getReallyClass());
	        }
	        
	        // create field
	        for (FieldBuilder ifc : fields) {
	            ifc.create(this);
	        }

	        // create method
	        for (MethodBuilder imc : methods) {
	            imc.create(this);
	        }
	        
	        // modify method
	        for (MethodBuilder imc : methodModifiers) {
	            imc.create(this);
	        }

	        Map<String, List<VisitXInsnAdapter>> superConstructorMap = adapter.getSuperConstructorMap();
	        
	        if(modifyConstructorBodies != null){
	            for(KernelModifiedMethodBody mbfm : modifyConstructorBodies){
	                 Type[] argumentTypes = mbfm.getMethod().getMeta().getParameterAsmTypes();
	                 String desc = Type.getMethodDescriptor(Type.VOID_TYPE, argumentTypes);
	                 mbfm.setSuperConstructorOperators(superConstructorMap.get(desc));
	            }
	        }
		} catch (Exception e) {
			throw new ASMSupportException(e.getMessage(), e);
		}
	}