function preProcessSymbols(symbols) {
			// Create treeName and modify module names
			symbols.forEach((oSymbol) => {
				const sModuleClearName = oSymbol.name.replace(/^module:/, "");
				oSymbol.displayName = sModuleClearName;
				oSymbol.treeName = normalizeToUI5GlobalNotation(sModuleClearName);
			});

			// Create missing - virtual namespaces
			symbols.forEach((oSymbol) => {
				oSymbol.treeName.split(".").forEach((sPart, i, a) => {
					const sName = a.slice(0, (i + 1)).join(".");

					if (!symbols.find((o) => o.treeName === sName)) {
						symbols.push({
							name: sName,
							displayName: sName,
							treeName: sName,
							lib: oSymbol.lib,
							kind: "namespace"
						});
					}
				});
			});

			// Discover parents
			symbols.forEach((oSymbol) => {
				const aParent = oSymbol.treeName.split(".");

				// Extract parent name
				aParent.pop();
				const sParent = aParent.join(".");

				// Mark parent
				if (symbols.find(({treeName}) => treeName === sParent)) {
					oSymbol.parent = sParent;
				}
			});

			// Attach children info
			symbols.forEach((oSymbol) => {
				if (oSymbol.parent) {
					const oParent = symbols.find(({treeName}) => treeName === oSymbol.parent);

					if (!oParent.nodes) {oParent.nodes = [];}

					const oNode = {
						name: oSymbol.displayName,
						description: formatters._preProcessLinksInTextBlock(
							extractFirstSentence(oSymbol.description)
						),
						href: "api/" + encodeURIComponent(oSymbol.name)
					};

					if (oSymbol.deprecated) {
						oNode.deprecated = true;
					}

					oParent.nodes.push(oNode);
				}
			});

			// Clean list - keep file size down
			symbols.forEach((o) => {
				delete o.treeName;
				delete o.parent;
			});
		}
Pre-processes the symbols list - creating virtual namespace records and attaching children list to namespace
records.
@param {object} symbols list