From cd21cc48c5b8564bab62d1bd262fe89290d64d45 Mon Sep 17 00:00:00 2001 From: wenshao Date: Thu, 25 Jul 2013 17:46:07 +0800 Subject: [PATCH] bug for long type builder setter --- .../deserializer/ASMDeserializerFactory.java | 5 +++- .../alibaba/json/bvt/bug/Bug_for_builder.java | 27 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/alibaba/json/bvt/bug/Bug_for_builder.java diff --git a/src/main/java/com/alibaba/fastjson/parser/deserializer/ASMDeserializerFactory.java b/src/main/java/com/alibaba/fastjson/parser/deserializer/ASMDeserializerFactory.java index 86bb405d7..c3db0264c 100755 --- a/src/main/java/com/alibaba/fastjson/parser/deserializer/ASMDeserializerFactory.java +++ b/src/main/java/com/alibaba/fastjson/parser/deserializer/ASMDeserializerFactory.java @@ -724,7 +724,10 @@ public class ASMDeserializerFactory implements Opcodes { mw.visitVarInsn(ALOAD, context.var("instance")); mw.visitVarInsn(LLOAD, context.var(fieldInfo.getName() + "_asm", 2)); if (fieldInfo.getMethod() != null) { - mw.visitMethodInsn(INVOKEVIRTUAL, getType(context.getClazz()), fieldInfo.getMethod().getName(), "(J)V"); + mw.visitMethodInsn(INVOKEVIRTUAL, getType(context.getClazz()), fieldInfo.getMethod().getName(), getDesc(fieldInfo.getMethod())); + if (!fieldInfo.getMethod().getReturnType().equals(Void.TYPE)) { + mw.visitInsn(POP); + } } else { mw.visitFieldInsn(PUTFIELD, getType(fieldInfo.getDeclaringClass()), fieldInfo.getField().getName(), getDesc(fieldInfo.getFieldClass())); diff --git a/src/test/java/com/alibaba/json/bvt/bug/Bug_for_builder.java b/src/test/java/com/alibaba/json/bvt/bug/Bug_for_builder.java new file mode 100644 index 000000000..722b524f8 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/bug/Bug_for_builder.java @@ -0,0 +1,27 @@ +package com.alibaba.json.bvt.bug; + +import com.alibaba.fastjson.JSON; + +import junit.framework.TestCase; + +public class Bug_for_builder extends TestCase { + + public void test_for_longBuilderMethod() throws Exception { + VO vo = JSON.parseObject("{\"id\":123}", VO.class); + } + + public static class VO { + + private long id; + + public long getId() { + return id; + } + + public VO setId(long id) { + this.id = id; + return this; + } + + } +}