public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (value is IRegexPattern regexPattern) { PatternUst patternUst = (PatternUst)value; JObject jObject = CreateJObject(patternUst); if (!ExcludeDefaults || !patternUst.Any) { jObject.Add(nameof(IRegexPattern.Regex), regexPattern.RegexString); } AddTextSpanAndWrite(writer, jObject, patternUst, serializer); } else if (value is PatternIntRangeLiteral patternIntRangeLiteral) { JObject jObject = CreateJObject(patternIntRangeLiteral); if (!ExcludeDefaults || !patternIntRangeLiteral.Any) { string str = patternIntRangeLiteral.ToString(); jObject.Add(nameof(PatternIntLiteral.Value), str.Substring(2, str.Length - 4)); } AddTextSpanAndWrite(writer, jObject, patternIntRangeLiteral, serializer); } else { base.WriteJson(writer, value, serializer); } }
private static JObject CreateJObject(PatternUst patternUst) { var jObject = new JObject(); jObject.Add(nameof(PatternUst.Kind), patternUst.Kind); return(jObject); }
private static void ReadTextSpan(JObject jObject, PatternUst patternUst) { if ((string)jObject[nameof(PatternUst.TextSpan)] is string textSpan) { patternUst.TextSpan = TextUtils.ParseTextSpan(textSpan); } }
private static void ReadTextSpan(JObject jObject, PatternUst patternUst, JsonSerializer serializer) { if (jObject[nameof(PatternUst.TextSpan)] is JToken textSpanToken) { patternUst.TextSpan = textSpanToken.ToObject <TextSpan>(serializer); } }
private void AddTextSpanAndWrite(JsonWriter writer, JObject jObject, PatternUst patternUst, JsonSerializer serializer) { if (IncludeTextSpans && (!ExcludeDefaults || !patternUst.TextSpan.IsZero)) { jObject.Add(nameof(PatternUst.TextSpan), JToken.FromObject(patternUst.TextSpan, serializer)); } jObject.WriteTo(writer); }
public virtual T Visit(PatternUst patternBase) { if (patternBase == null) { return(default(T)); } return(Visit((dynamic)patternBase)); }
private void AddTextSpanAndWrite(JsonWriter writer, JObject jObject, PatternUst patternUst) { if (!ExcludeDefaults || !patternUst.TextSpan.IsZero) { jObject.Add(nameof(PatternUst.TextSpan), patternUst.TextSpan.ToString()); } jObject.WriteTo(writer); }
protected virtual T VisitChildren(PatternUst patternBase) { try { return(propertyEnumerator.VisitProperties(patternBase, Visit)); } catch (Exception ex) when(!(ex is ThreadAbortException)) { Logger.LogError(new ConversionException(patternBase.Root?.CodeFile, ex) { TextSpan = patternBase.TextSpan }); return(default(T)); } }
public void Simplify_MultiMultiPattern_RemovedDuplicates() { var input = new PatternStatements { Statements = new List <PatternUst>() { new PatternInvocationExpression { Target = new PatternIdToken("test_call"), Arguments = new PatternArgs ( new PatternIdToken("a"), new PatternIdToken("b"), new PatternMultipleExpressions(), new PatternMultipleExpressions(), new PatternIdToken("z") ) }, new PatternVarOrFieldDeclaration { Type = new PatternIdToken("int"), Assignment = new PatternAssignmentExpression { Left = new PatternIdToken("a"), Right = new PatternIntLiteral(42) } } } }; var logger = new LoggerMessageCounter(); var processor = new DslProcessor(); var normalizer = new PatternNormalizer() { Logger = logger }; PatternUst result = normalizer.Visit(input); var statements = ((PatternStatements)result).Statements; var invocation = (PatternInvocationExpression)statements.ElementAt(0); Assert.AreEqual(1, ((PatternArgs)invocation.Arguments).Args.Count(child => child is PatternMultipleExpressions)); }
public virtual T Visit(PatternUst patternUst) { if (patternUst == null) { return(default);