/// <summary> /// Check if the Method Signature Matches with the Method Signature of the Crysl /// </summary> /// <param name="cryptoMethod"></param> /// <param name="methodSymbol"></param> /// <returns></returns> public bool IsMethodInEvents(CryptoSignature cryptoMethod, IMethodSymbol methodSymbol, ICollection <ObjectsDeclaration> objectsDeclarations) { bool isMethodInEvents = false; if (cryptoMethod.Method_Name.Equals(methodSymbol.Name) && !cryptoMethod.Is_property) { if (cryptoMethod.Argument_types.Count == methodSymbol.Parameters.Length) { bool isValidArgument = false; if (cryptoMethod.Argument_types.Count > 0) { var argumentsArray = cryptoMethod.Argument_types.ToArray(); for (int i = 0; i < cryptoMethod.Argument_types.Count; i++) { isValidArgument = IsArgumentValid(argumentsArray[i], methodSymbol.Parameters[i], objectsDeclarations); if (!isValidArgument) { return(false); } } isMethodInEvents = true; } else { isMethodInEvents = true; } } } return(isMethodInEvents); }
public override object VisitObjectAssnWithoutArguments(CryslGrammarParser.ObjectAssnWithoutArgumentsContext context) { CryptoSignature cryptoSignature = new CryptoSignature(); foreach (var varName in context.VARNAME()) { //Check for crypto signature identifiers if (varName.Symbol.TokenIndex < context.COLON().Symbol.TokenIndex) { cryptoSignature.Event_Var_Name = varName.GetText(); } //Check for Object Assignment else if (varName.Symbol.TokenIndex > context.COLON().Symbol.TokenIndex&& varName.Symbol.TokenIndex < context.EQUALS().Symbol.TokenIndex) { cryptoSignature.Object_variable = varName.GetText(); } //Check for crypto signature methods else if (varName.Symbol.TokenIndex > context.EQUALS().Symbol.TokenIndex&& (varName.Symbol.TokenIndex < context.OP().Symbol.TokenIndex&& varName.Symbol.TokenIndex < context.CP().Symbol.TokenIndex)) { cryptoSignature.Method_Name = varName.GetText(); cryptoSignature.Is_property = false; } } return(cryptoSignature); }
public override object VisitObjectAssnWithArguments(CryslGrammarParser.ObjectAssnWithArgumentsContext context) { Dictionary <int, string> argumentValues = new Dictionary <int, string>(); CryptoSignature cryptoSignature = new CryptoSignature(); //ArgumentTypes argumentTypes = new ArgumentTypes(); List <ArgumentTypes> argumentsList = new List <ArgumentTypes>(); foreach (var varName in context.VARNAME()) { //Check for crypto signature identifiers if (varName.Symbol.TokenIndex < context.COLON().Symbol.TokenIndex) { cryptoSignature.Event_Var_Name = varName.GetText(); } //Check for Object Assignment else if (varName.Symbol.TokenIndex > context.COLON().Symbol.TokenIndex&& varName.Symbol.TokenIndex < context.EQUALS().Symbol.TokenIndex) { cryptoSignature.Object_variable = varName.GetText(); } //Check for crypto signature methods else if (varName.Symbol.TokenIndex > context.EQUALS().Symbol.TokenIndex&& (varName.Symbol.TokenIndex < context.OP().Symbol.TokenIndex&& varName.Symbol.TokenIndex < context.CP().Symbol.TokenIndex)) { cryptoSignature.Method_Name = varName.GetText(); cryptoSignature.Is_property = false; } //Check for crypto signature argument values else if (varName.Symbol.TokenIndex > context.OP().Symbol.TokenIndex&& varName.Symbol.TokenIndex < context.CP().Symbol.TokenIndex) { argumentValues.Add(varName.Symbol.TokenIndex, varName.GetText()); } } //Check for optional arguments foreach (var opArguments in context.UNSCORE()) { if (opArguments.Symbol.TokenIndex > context.OP().Symbol.TokenIndex&& opArguments.Symbol.TokenIndex < context.CP().Symbol.TokenIndex) { argumentValues.Add(opArguments.Symbol.TokenIndex, opArguments.GetText()); } } var sortedArgumentsList = from arguments in argumentValues orderby arguments.Key ascending select arguments; foreach (KeyValuePair <int, string> sortedArguments in sortedArgumentsList) { ArgumentTypes argumentTypes = new ArgumentTypes(); argumentTypes.Argument = sortedArguments.Value; argumentsList.Add(argumentTypes); } cryptoSignature.Argument_types = argumentsList; return(cryptoSignature); }
public override object VisitWithoutAggregator(CryslGrammarParser.WithoutAggregatorContext context) { List <CryptoSignature> cryptoSignatureList = new List <CryptoSignature>(); Methods eventMethods = new Methods(); CryptoSignature cryptoSignature = (CryptoSignature)Visit(context.sngevent()); cryptoSignatureList.Add(cryptoSignature); eventMethods.Crypto_Signature = cryptoSignatureList; return(eventMethods); }
public override object VisitWithAggregator(CryslGrammarParser.WithAggregatorContext context) { List <CryptoSignature> cryptoSignatureList = new List <CryptoSignature>(); Methods eventMethods = new Methods(); foreach (var events in context.@event()) { CryptoSignature cryptoSignature = (CryptoSignature)Visit(events); cryptoSignatureList.Add(cryptoSignature); } eventMethods.Crypto_Signature = cryptoSignatureList; Aggregator aggregator = (Aggregator)Visit(context.aggregator()); eventMethods.Aggregator = aggregator; return(eventMethods); }