コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }