@Override
	public MethodVisitor visitMethod(int access, String name, String desc,
			String signature, String[] exceptions) {
		MethodVisitor methodVisitor;
		if (!isModified(name, desc)) {
			methodVisitor = super.visitMethod(access, name, desc, signature, exceptions);
		} else {
			if(Modifiers.isFinal(access)){
				throw new InternalError("method [" + name + "] is final cannot modifier.");
			}
			
			// set method to private
			if (!Modifiers.isPrivate(access)) {
				if (Modifiers.isProtected(access)) {
					access -= Opcodes.ACC_PROTECTED;
				} else if (Modifiers.isPublic(access)) {
					access -= Opcodes.ACC_PUBLIC;
				}
				access += Opcodes.ACC_PRIVATE;
			}
			
			if (name.equals(ASConstants.INIT)) {
				name = ASConstants.INIT_PROXY;
				methodVisitor = new ConstructorVisitor(super.visitMethod(access, name + ASConstants.METHOD_PROXY_SUFFIX, desc, signature, exceptions), desc);
			}else{
				if (name.equals(ASConstants.CLINIT)) {
					name = ASConstants.CLINIT_PROXY;
				}
				methodVisitor =super.visitMethod(access, name + ASConstants.METHOD_PROXY_SUFFIX, desc, signature, exceptions);
			}
		}
		
		return new InvocationRenameMethodAdapter(methodVisitor);
	}