DUBBO-4 final的判断改为白名单方式 否则可能会增加序列化的成本.
git-svn-id: http://code.alibabatech.com/svn/dubbo/trunk@94 1a56cb94-b969-4eaa-88fa-be21384802f2
This commit is contained in:
parent
e1e250e664
commit
d700d0e3cf
|
|
@ -23,6 +23,7 @@ import java.lang.reflect.Constructor;
|
|||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.math.BigInteger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
|
@ -383,7 +384,7 @@ public abstract class Builder<T> implements GenericDataFlags
|
|||
{
|
||||
f = c.getDeclaredField(fn);
|
||||
int mod = f.getModifiers();
|
||||
if( Modifier.isStatic(mod) || Modifier.isFinal(mod) )
|
||||
if( Modifier.isStatic(mod) || (!ignoreFinalModifier(c) && Modifier.isFinal(mod)) )
|
||||
throw new RuntimeException("Field [" + c.getName() + "." + fn + "] is static/final field.");
|
||||
if( Modifier.isTransient(mod) )
|
||||
{
|
||||
|
|
@ -414,7 +415,9 @@ public abstract class Builder<T> implements GenericDataFlags
|
|||
for( Field tf : fs )
|
||||
{
|
||||
int mod = tf.getModifiers();
|
||||
if( Modifier.isStatic(mod) || tf.getName().equals("this$0") ) // skip static or inner-class's 'this$0' field.
|
||||
if (Modifier.isStatic(mod)
|
||||
|| (!ignoreFinalModifier(c) && Modifier.isFinal(mod))
|
||||
|| tf.getName().equals("this$0") ) // skip static or inner-class's 'this$0' field.
|
||||
continue;
|
||||
if( Modifier.isTransient(mod) )
|
||||
{
|
||||
|
|
@ -856,7 +859,26 @@ public abstract class Builder<T> implements GenericDataFlags
|
|||
private static String propertyName(String s)
|
||||
{
|
||||
return s.length() == 1 || Character.isLowerCase(s.charAt(1)) ? Character.toLowerCase(s.charAt(0)) + s.substring(1) : s;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean ignoreFinalModifier(Class cl)
|
||||
{
|
||||
if (cl.isAssignableFrom(BigInteger.class)) return true;
|
||||
return false;
|
||||
}
|
||||
@SuppressWarnings("unused")
|
||||
private static boolean isPrimitiveOrPrimitiveArray1(Class<?> cl)
|
||||
{
|
||||
if (cl.isPrimitive()){
|
||||
return true;
|
||||
} else {
|
||||
Class clazz = cl.getClass().getComponentType();
|
||||
if (clazz!=null && clazz.isPrimitive()){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static String defaultArg(Class<?> cl)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue