src/vs/workbench/services/themes/common/iconExtensionPoint.ts/IconFontExtensionPoint/constructor
class IconFontExtensionPoint:	constructor() {
		iconFontConfigurationExtPoint.setHandler((_extensions, delta) => {
			for (const extension of delta.added) {
				const extensionValue = <IIconFontExtensionPoint[]>extension.value;
				const collector = extension.collector;

				if (!extension.description.enableProposedApi) {
					collector.error(nls.localize('invalid.iconFonts.proposedAPI', "'configuration.iconFonts is a proposed contribution point and only available when running out of dev or with the following command line switch: --enable-proposed-api {0}", extension.description.identifier.value));
					return;
				}

				if (!extensionValue || !Array.isArray(extensionValue)) {
					collector.error(nls.localize('invalid.iconFonts.configuration', "'configuration.iconFonts' must be a array"));
					return;
				}

				for (const iconFontContribution of extensionValue) {
					if (typeof iconFontContribution.id !== 'string' || iconFontContribution.id.length === 0) {
						collector.error(nls.localize('invalid.iconFonts.id', "'configuration.iconFonts.id' must be defined and can not be empty"));
						return;
					}
					if (!iconFontContribution.id.match(fontIdRegex)) {
						collector.error(nls.localize('invalid.iconFonts.id.format', "'configuration.iconFonts.id'  must only contain letters, numbers, underscore and minus."));
						return;
					}
					if (!Array.isArray(iconFontContribution.src) || !iconFontContribution.src.length) {
						collector.error(nls.localize('invalid.iconFonts.src', "'configuration.iconFonts.src' must be an array with locations of the icon font."));
						return;
					}
					const def: IconFontDefinition = { src: [] };
					for (const src of iconFontContribution.src) {
						if (typeof src === 'object' && typeof src.path === 'string' && typeof src.format === 'string') {
							const extensionLocation = extension.description.extensionLocation;
							const iconFontLocation = resources.joinPath(extensionLocation, src.path);
							if (!resources.isEqualOrParent(iconFontLocation, extensionLocation)) {
								collector.warn(nls.localize('invalid.iconFonts.src.path', "Expected `contributes.iconFonts.src.path` ({0}) to be included inside extension's folder ({0}). This might make the extension non-portable.", iconFontLocation.path, extensionLocation.path));
							}
							def.src.push({
								location: iconFontLocation,
								format: src.format,
							});
						} else {
							collector.error(nls.localize('invalid.iconFonts.src.item', "Items of 'configuration.iconFonts.src' must be objects with properties 'path' and 'format'"));
						}
					}
					iconRegistry.registerIconFont(getFontId(extension.description, iconFontContribution.id), def);
				}
			}
			for (const extension of delta.removed) {
				const extensionValue = <IIconFontExtensionPoint[]>extension.value;
				for (const iconFontContribution of extensionValue) {
					iconRegistry.deregisterIconFont(getFontId(extension.description, iconFontContribution.id));
				}
			}
		});
	}