Skip to content

Commit

Permalink
fix: fix set encode
Browse files Browse the repository at this point in the history
  • Loading branch information
killagu authored and fengmk2 committed Mar 13, 2022
1 parent ebc32a4 commit c6ac845
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 2 deletions.
44 changes: 44 additions & 0 deletions lib/primitive_type/java.util.set.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
'use strict';

const utils = require('../utils');

module.exports = (gen, classInfo, version, options) => {
gen('if (obj && obj.$class) { obj = obj.$; }');
gen('if (obj == null) { return encoder.writeNull(); }');
gen('if (encoder._checkRef(obj)) { return; }');

gen('const hasEnd = encoder._writeListBegin(obj.size || obj.length, \'%s\');', classInfo.type);

const generic = classInfo.generic;
if (generic && generic.length === 1) {
gen('for (const item of obj) {');
const genericDefine = utils.normalizeType(generic[0]);
const uniqueId = utils.normalizeUniqId(genericDefine, version);
gen(' let desc;');
gen(' let val = item;');
gen(' let uniqueId = \'%s\'', uniqueId);
gen(' if (item && item.$class) {');
gen(' desc = item;');
gen(' let type = item.$class;');
gen(' if (item.isArray) {');
gen(' let arrayDepth = item.arrayDepth || 1;');
gen(' while (arrayDepth--) type = \'[\' + type;');
gen(' }');
gen(' uniqueId = type;');
gen(' if (item.generic) {');
gen(' for (const it of item.generic) {');
gen(' uniqueId += (\'#\' + it.type);');
gen(' }');
gen(' }');
gen(' uniqueId += \'#\' + version;');
gen(' val = item.$;');
gen(' } else {');
gen(' desc = %j;', genericDefine);
gen(' }');
gen(' compile(uniqueId, desc, classMap, version, %j)(val, encoder, appClassMap);', options);
gen('}');
} else {
gen('for (const item of obj) { encoder.write(item); }');
}
gen('if (hasEnd) { encoder.byteBuffer.putChar(\'z\'); }');
};
2 changes: 1 addition & 1 deletion lib/v3/compile.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const typeMap = {
'java.util.Map': require('../primitive_type/java.util.map'),
'java.util.HashMap': require('../primitive_type/java.util.map'),
'java.util.List': require('../primitive_type/java.util.list'),
'java.util.Set': require('../primitive_type/java.util.list'),
'java.util.Set': require('../primitive_type/java.util.set'),
'java.util.Collection': require('../primitive_type/java.util.list'),
'java.util.ArrayList': require('../primitive_type/java.util.arraylist'),
'java.util.Date': require('../primitive_type/java.util.date'),
Expand Down
2 changes: 1 addition & 1 deletion lib/v4/compile.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const typeMap = {
'java.util.Map': require('./type/java.util.map'),
'java.util.HashMap': require('./type/java.util.map'),
'java.util.List': require('../primitive_type/java.util.list'),
'java.util.Set': require('../primitive_type/java.util.list'),
'java.util.Set': require('../primitive_type/java.util.set'),
'java.util.Collection': require('../primitive_type/java.util.list'),
'java.util.ArrayList': require('../primitive_type/java.util.arraylist'),
'java.util.Date': require('../primitive_type/java.util.date'),
Expand Down
14 changes: 14 additions & 0 deletions test/edge_case.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -380,5 +380,19 @@ describe('test/edge_case.test.js', () => {
},
});
});

it('should work with set', () => {
const a = {
$class: 'com.test.foo.SetProperty',
$: {
setProperty: new Set([ 233, 23333 ]),
},
};
const bufA = encode(a, version, classMap);
const decodeObj = hessian.decode(bufA, version);
assert.deepStrictEqual(decodeObj, {
setProperty: [ '233', '23333' ],
});
});
});
});
10 changes: 10 additions & 0 deletions test/fixtures/edge_class_map.js
Original file line number Diff line number Diff line change
Expand Up @@ -160,4 +160,14 @@ module.exports = {
'com.test.model.datum.DatumStaus2': new Enums([
{ $name: 'PRERELEASING', name: 'TEST_NAME' },
]),

'com.test.foo.SetProperty': {
'setProperty': {
'type': 'java.util.Set',
'abstractClass': 'java.util.Set',
'generic': [
{'type':'java.lang.String'},
]
},
},
};

0 comments on commit c6ac845

Please sign in to comment.