private string GetSerializedATN(ITypeMirror recognizerClass) { IList <IElement> elements = processingEnv.GetElementUtils().GetAllMembers((ITypeElement )processingEnv.GetTypeUtils().AsElement(recognizerClass)); foreach (IElement element in elements) { if (element.GetKind() != ElementKind.Field) { continue; } IVariableElement field = (IVariableElement)element; bool isStatic = element.GetModifiers().Contains(Modifier.Static); object constantValue = field.GetConstantValue(); bool isString = constantValue is string; string name = field.GetSimpleName().ToString(); if (isStatic && isString && name.Equals("_serializedATN")) { return((string)constantValue); } } processingEnv.GetMessager().PrintMessage(Diagnostic.Kind.Error, "Could not retrieve serialized ATN from grammar." ); return(null); }
private int[] GetRuleVersions(ITypeMirror recognizerClass, string[] ruleNames) { int[] versions = new int[ruleNames.Length]; IList <IElement> elements = processingEnv.GetElementUtils().GetAllMembers((ITypeElement)processingEnv.GetTypeUtils().AsElement(recognizerClass)); foreach (IElement element in elements) { if (element.GetKind() != ElementKind.Field) { continue; } IVariableElement field = (IVariableElement)element; bool isStatic = element.GetModifiers().Contains(Modifier.Static); object constantValue = field.GetConstantValue(); bool isInteger = constantValue is int; string name = field.GetSimpleName().ToString(); if (isStatic && isInteger && name.StartsWith("RULE_")) { try { name = Sharpen.Runtime.Substring(name, "RULE_".Length); if (name.IsEmpty() || !System.Char.IsLower(name[0])) { continue; } int index = (int)constantValue; if (index < 0 || index >= versions.Length) { string message = string.Format("Rule index {0} for rule '{1}' out of bounds for recognizer {2}.", index, name, recognizerClass.ToString()); processingEnv.GetMessager().PrintMessage(Diagnostic.Kind.Error, message, element); continue; } if (name.IndexOf(ATNSimulator.RuleVariantDelimiter) >= 0) { // ignore left-factored pseudo-rules continue; } IExecutableElement ruleMethod = GetRuleMethod(recognizerClass, name); if (ruleMethod == null) { string message = string.Format("Could not find rule method for rule '{0}' in recognizer {1}.", name, recognizerClass.ToString()); processingEnv.GetMessager().PrintMessage(Diagnostic.Kind.Error, message, element); continue; } RuleVersion ruleVersion = ruleMethod.GetAnnotation <RuleVersion>(); int version = ruleVersion != null?ruleVersion.Value() : 0; versions[index] = version; } catch (ArgumentException) { processingEnv.GetMessager().PrintMessage(Diagnostic.Kind.Error, "Exception occurred while validating rule dependencies.", element); } } } return(versions); }
private string[] GetRuleNames(ITypeMirror recognizerClass) { IList <string> result = new List <string>(); IList <IElement> elements = processingEnv.GetElementUtils().GetAllMembers((ITypeElement )processingEnv.GetTypeUtils().AsElement(recognizerClass)); foreach (IElement element in elements) { if (element.GetKind() != ElementKind.Field) { continue; } IVariableElement field = (IVariableElement)element; bool isStatic = element.GetModifiers().Contains(Modifier.Static); object constantValue = field.GetConstantValue(); bool isInteger = constantValue is int; string name = field.GetSimpleName().ToString(); if (isStatic && isInteger && name.StartsWith("RULE_")) { try { name = Sharpen.Runtime.Substring(name, "RULE_".Length); if (name.IsEmpty() || !System.Char.IsLower(name[0])) { continue; } int index = (int)constantValue; if (index < 0) { continue; } while (result.Count <= index) { result.AddItem(string.Empty); } result.Set(index, name); } catch (ArgumentException) { processingEnv.GetMessager().PrintMessage(Diagnostic.Kind.Error, "Exception occurred while validating rule dependencies." , element); } } } return(Sharpen.Collections.ToArray(result, new string[result.Count])); }