Skip to content

parseType #10

@EdwardZZZ

Description

@EdwardZZZ
// const jstr = 'Ljava/util/Map<Ljava/util/Map<Ljava/lang/String;Lcom/bj58/fangchan/fangfe/entity/SimpleEntity;>;Lcom/bj58/fangchan/fangfe/entity/SimpleEntity;>;Ljava/util/Map<Ljava/lang/String;Lcom/bj58/fangchan/fangfe/entity/SimpleEntity;>;'
const jstr = 'Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;III';

const BaseType = {
    B: 'byte',
    C: 'char',
    D: 'double',
    F: 'float',
    I: 'int',
    J: 'long',
    S: 'short',
    Z: 'boolean',
};
const BaseTypeKeys = Object.keys(BaseType);
// const BaseType = 'BCDFIJSZ';

function parseType(jstr) {
    let str = '';
    let stackArr = [{
        tag: 'ROOT',
        children: [],
    }];

    for(const w of jstr) {
        str += w;

        if (w === '<') {
            const obj = {
                tag: str.slice(0, -1),
                children: [],
            };

            stackArr[stackArr.length - 1].children.push(obj);
            stackArr.push(obj);
            str = '';
        }

        if (w === ';') {
            str !== ';' && stackArr[stackArr.length - 1].children.push({
                tag: str.slice(0, -1),
                children: [],
            });
            str = '';
        }

        if (str.length === 1 && BaseTypeKeys.indexOf(w) > -1) {
            stackArr[stackArr.length - 1].children.push({
                tag: BaseType[str],
                children: [],
            });
            str = '';
        }

        if (w === '>') {
            stackArr.length = stackArr.length - 1;
            str = '';
        }
    }

    return stackArr[0].children;
}


function stringify(obj) {
    if (!Array.isArray(obj)) return obj;

    return obj.map(o => {
        return o.tag + (o.children.length > 0 ? `<${stringify(o.children)}>` : '');
    }).join(',');
}

console.log(JSON.stringify(parseType(jstr), null, 4));
console.log(stringify(parseType(jstr)));

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions