src/vs/platform/contextkey/common/contextkey.ts/ContextKeyExpr/_deserializeOne
class ContextKeyExpr:	private static _deserializeOne(serializedOne: string, strict: boolean): ContextKeyExpression {
		serializedOne = serializedOne.trim();

		if (serializedOne.indexOf('!=') >= 0) {
			const pieces = serializedOne.split('!=');
			return ContextKeyNotEqualsExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1], strict));
		}

		if (serializedOne.indexOf('==') >= 0) {
			const pieces = serializedOne.split('==');
			return ContextKeyEqualsExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1], strict));
		}

		if (serializedOne.indexOf('=~') >= 0) {
			const pieces = serializedOne.split('=~');
			return ContextKeyRegexExpr.create(pieces[0].trim(), this._deserializeRegexValue(pieces[1], strict));
		}

		if (serializedOne.indexOf(' in ') >= 0) {
			const pieces = serializedOne.split(' in ');
			return ContextKeyInExpr.create(pieces[0].trim(), pieces[1].trim());
		}

		if (/^[^<=>]+>=[^<=>]+$/.test(serializedOne)) {
			const pieces = serializedOne.split('>=');
			return ContextKeyGreaterEqualsExpr.create(pieces[0].trim(), pieces[1].trim());
		}

		if (/^[^<=>]+>[^<=>]+$/.test(serializedOne)) {
			const pieces = serializedOne.split('>');
			return ContextKeyGreaterExpr.create(pieces[0].trim(), pieces[1].trim());
		}

		if (/^[^<=>]+<=[^<=>]+$/.test(serializedOne)) {
			const pieces = serializedOne.split('<=');
			return ContextKeySmallerEqualsExpr.create(pieces[0].trim(), pieces[1].trim());
		}

		if (/^[^<=>]+<[^<=>]+$/.test(serializedOne)) {
			const pieces = serializedOne.split('<');
			return ContextKeySmallerExpr.create(pieces[0].trim(), pieces[1].trim());
		}

		if (/^\!\s*/.test(serializedOne)) {
			return ContextKeyNotExpr.create(serializedOne.substr(1).trim());
		}

		return ContextKeyDefinedExpr.create(serializedOne);
	}