import { genericService } from '../../service/data'; import { utils } from '..'; import { convert2RefType } from './dataTypeUtils'; export function getGenericTypeRef(typeName: string) { return `#/genericTypes/${typeName}`; } export async function getGenericList() { let list = []; try { list = await genericService.getGenericClassList(); } catch (err) { } const genericTypeList: any = []; const genericTypemap: any = {}; if (list) { list.forEach((item: any) => { const tempItem = Object.assign({}, item); utils.traverse((current) => { if ( current.node.type === 'genericType' || current.node.format !== undefined ) { convert2RefType(current.node); } }, { node: tempItem, }, { mode: 'anyObject', }); genericTypemap[`#/genericTypes/${tempItem.name}`] = tempItem; const listItem = { kind: 'genericType', type: 'genericType', text: `${item.name}<${(item.typeParams || []).map((param: any) => param.typeParamName).join(',')}>`, value: `#/genericTypes/${tempItem.name}`, typeInstantiation: { typeName: item.name, typeParams: (item.typeParams || []).map((param: any) => Object.assign({ typeParamValue: '' }, param)), }, }; genericTypeList.push(listItem); }); } return { genericTypeList, genericTypemap, }; } export const genericTypeList = [ { level: 'structure', name: 'PageOf', type: 'genericClass', typeParams: [ { type: 'typeParam', typeParamName: 'T' }, ], propertyList: [ { level: 'property', name: 'content', type: 'genericType', typeKey: '#/genericTypes/List', typeInstantiation: { typeName: 'List', typeParams: [ { level: 'typeParam', typeParamName: 'V', typeParamValue: { type: 'genericParam', typeParamName: 'T', }, }, ], }, }, { name: 'number', type: 'integer' }, { name: 'size', type: 'integer' }, { name: 'totalPages', type: 'integer' }, { name: 'totalElements', type: 'integer' }, ], }, ]; export const genericTypeMap: { [name: string]: any } = { '#/genericTypes/PageOf': { name: 'PageOf', type: 'genericClass', typeParams: [ { type: 'typeParam', typeParamName: 'T' }, ], propertyList: [ { level: 'property', name: 'content', type: 'genericType', typeKey: '#/genericTypes/List', //获取数据后要处理一下,加上typeKey字段 typeInstantiation: { typeName: 'List', typeParams: [ { level: 'typeParam', typeParamName: 'V', typeParamValue: { type: 'genericParam', typeParamName: 'T', }, }, ], }, }, { name: 'number', type: 'integer' }, { name: 'size', type: 'integer' }, { name: 'totalPages', type: 'integer' }, { name: 'totalElements', type: 'integer' }, ], }, '#/genericTypes/ScopeOf': { name: 'ScopeOf', type: 'genericClass', typeParams: [ { type: 'typeParam', typeParamName: 'T' }, ], propertyList: [ { name: 'item', type: 'genericParam', typeParamName: 'T' }, { name: 'index', type: 'integer' }, { name: 'rowIndex', type: 'integer' }, { name: 'columnIndex', type: 'integer' }, { name: 'value', type: 'string' }, ], }, '#/genericTypes/List': { name: 'List', type: 'genericClass', typeParams: [ { type: 'typeParam', typeParamName: 'T' }, ], propertyList: [ { name: 'length', type: 'integer' }, ], }, };