7
7
'use strict' ;
8
8
9
9
var combine = function ( type , value ) {
10
- if ( value == null ) {
11
- return null ;
12
- }
13
10
if ( typeof type === 'string' ) {
14
11
type = {
15
12
name : type ,
@@ -58,27 +55,43 @@ exports.__defineGetter__('combine', function () {
58
55
// valid list
59
56
function ignore ( val ) { return val ; }
60
57
function bool ( val ) { return ! ! bool ; }
61
- function integer ( val ) { return parseInt ( val , 10 ) }
62
- // parseInt;
63
- // parseFloat;
64
- // String
58
+ function baseInt ( val ) {
59
+ return val == null ? 0 : integer ( val ) ;
60
+ }
61
+ function baseFloat ( val ) {
62
+ return val == null ? 0 : float ( val ) ;
63
+ }
64
+ function float ( val ) {
65
+ if ( val == null ) {
66
+ return null ;
67
+ }
68
+ var r = parseFloat ( val ) ;
69
+ return isNaN ( r ) ? val : r ;
70
+ }
71
+ function integer ( val ) {
72
+ if ( val == null ) {
73
+ return null ;
74
+ }
75
+ var r = parseInt ( val , 10 ) ;
76
+ return isNaN ( r ) ? val : r ;
77
+ }
65
78
66
79
var simpleTypeMap = exports . simpleTypeMap = {
67
80
Boolean : { name : 'java.lang.Boolean' , valid : bool } ,
68
81
boolean : { name : 'boolean' , valid : bool } ,
69
82
Integer : { name : 'java.lang.Integer' , valid : integer } ,
70
- int : { name : 'int' , valid : integer } ,
71
- short : { name : 'short' , valid : integer } ,
83
+ int : { name : 'int' , valid : baseInt } ,
84
+ short : { name : 'short' , valid : baseInt } ,
72
85
Short : { name : 'java.lang.Short' , valid : integer } ,
73
86
byte : { name : 'byte' , valid : integer } ,
74
87
Byte : { name : 'java.lang.Byte' , valid : integer } ,
75
88
// long support both string and number
76
89
long : { name : 'long' , valid : ignore } ,
77
90
Long : { name : 'java.lang.Long' , valid : ignore } ,
78
- double : { name : 'double' , valid : parseFloat } ,
79
- Double : { name : 'java.lang.Double' , valid : parseFloat } ,
80
- float : { name : 'float' , valid : parseFloat } ,
81
- Float : { name : 'java.lang.Float' , valid : parseFloat } ,
91
+ double : { name : 'double' , valid : baseFloat } ,
92
+ Double : { name : 'java.lang.Double' , valid : float } ,
93
+ float : { name : 'float' , valid : baseFloat } ,
94
+ Float : { name : 'java.lang.Float' , valid : float } ,
82
95
String : { name : 'java.lang.String' , valid : String } ,
83
96
char : { name : 'char' , valid : String } ,
84
97
chars : { name : 'char[]' , valid : String } ,
@@ -149,9 +162,6 @@ Object.keys(simpleTypeMap).forEach(function (key) {
149
162
*/
150
163
151
164
exports . abstract = function ( abstractClassName , className , val ) {
152
- if ( val == null ) {
153
- return null ;
154
- }
155
165
var res = combine ( className , val ) ;
156
166
res . $abstractClass = abstractClassName ;
157
167
return res ;
@@ -166,12 +176,10 @@ exports.abstract = function (abstractClassName, className, val) {
166
176
* }
167
177
*/
168
178
exports . enum = function ( className , name ) {
169
- if ( name == null ) {
170
- return null ;
171
- }
172
- return combine ( className , {
179
+ var value = name ? {
173
180
name : name
174
- } ) ;
181
+ } : null
182
+ return combine ( className , value ) ;
175
183
} ;
176
184
177
185
/**
@@ -183,12 +191,10 @@ exports.enum = function (className, name) {
183
191
* }
184
192
*/
185
193
exports . Class = function ( name ) {
186
- if ( name == null ) {
187
- return null ;
188
- }
189
- return combine ( 'java.lang.Class' , {
194
+ var value = name ? {
190
195
name : name
191
- } ) ;
196
+ } : null ;
197
+ return combine ( 'java.lang.Class' , value ) ;
192
198
} ;
193
199
194
200
/**
@@ -201,10 +207,8 @@ exports.Class = function (name) {
201
207
* }
202
208
*/
203
209
exports . Locale = function ( locale , handle ) {
204
- if ( locale == null ) {
205
- return null ;
206
- }
207
- return combine ( handle || 'com.caucho.hessian.io.LocaleHandle' , {
210
+ var value = locale ? {
208
211
value : locale
209
- } ) ;
212
+ } : null ;
213
+ return combine ( handle || 'com.caucho.hessian.io.LocaleHandle' , value ) ;
210
214
} ;
0 commit comments