Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | 1x 1x 1x 1x 1x 1x 1x 1x 13x 13x 13x 13x 13x 13x 13x 45x 18x 18x 18x 16x 16x 18x 18x 18x 1x 1x 1x 1x 1x 1x 18x 4x 4x 4x 4x 4x 4x 4x 13x 13x 13x 13x 2x 2x 2x 2x 2x 2x 2x 13x 11x 11x 11x 11x 11x 11x 18x 45x 27x 27x 27x 27x 27x 45x 13x 13x 13x 1x 1x | import {AbstractType, IRegistry} from ".."; import {IStructureComponent, StructureType, UnknownType, VoidType} from "../abap/types/basic"; import {DDIC} from "../ddic"; import {ParsedDataDefinition} from "../objects"; export class CDSDetermineTypes { public parseType(reg: IRegistry, parsedData: ParsedDataDefinition, ddlsName: string): AbstractType { const ddic = new DDIC(reg); if (parsedData?.fields.length === 0) { return new VoidType("DDLS:todo"); } else { const components: IStructureComponent[] = []; for (const f of parsedData?.fields || []) { if (f.prefix !== "") { const prefixUpper = f.prefix.toUpperCase(); let source = parsedData.sources.find((s) => s.as?.toUpperCase() === prefixUpper); if (source?.name === undefined) { source = parsedData.sources.find((s) => s.name.toUpperCase() === prefixUpper); } if (source?.name === undefined && (parsedData.associations.find((s) => s.name.toUpperCase() === prefixUpper) || parsedData.associations.find((s) => s.as?.toUpperCase() === prefixUpper))) { components.push({ name: f.name, type: new VoidType("DDLS:association"), }); continue; } if (source?.name === undefined) { if (prefixUpper.startsWith("_")) { components.push({ name: f.name, type: new VoidType("DDLS:association"), }); continue; } components.push({ name: f.name, type: new UnknownType("CDS parser error, unknown source, " + ddlsName), }); continue; } const lookup = ddic.lookupTableOrView(source.name); if (lookup.type) { if (lookup.type instanceof StructureType) { const type = lookup.type.getComponentByName(f.name); if (type) { components.push({ name: f.name, type: type, }); } else { components.push({ name: f.name, type: new UnknownType(f.name + " not found in " + source.name + ", CDSDetermineTypes"), }); } } else { // its void or unknown components.push({ name: f.name, type: lookup.type, }); } } else if (reg.inErrorNamespace(source.name)) { components.push({ name: f.name, type: new UnknownType(source.name + " not found, CDSDetermineTypes"), }); } else { components.push({ name: f.name, type: new VoidType(source.name), }); } } else { components.push({ name: f.name, type: new VoidType("DDLS:fieldname:" + ddlsName), }); } } return new StructureType(components, parsedData.definitionName, parsedData.definitionName, parsedData.description); } } } |