コード例 #1
0
        /// <summary>
        /// Analyze thr MemberAcessExpressionSyntax Nodes
        /// </summary>
        /// <param name="memberAccessExpressions"></param>
        /// <param name="cryslData"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public ValidEvents AnalyzeMemAccessExprSyntax(IdentifierNameSyntax identifier, IEnumerable <CryptoSignature> cryptoMethods, Methods methods, CryslJsonModel cryslData, SyntaxNodeAnalysisContext context, IMethodSymbol identifierSymbolInfo, TextSpan nodeSPan)
        {
            ValidEvents validEvents = new ValidEvents();

            // Check for valid event only if Identifier is of Spec type in Crysl.
            if (identifierSymbolInfo.ReturnType.ToString().Equals(cryslData.Spec_Section.Class_Name))
            {
                List <MethodSignatureModel> methodSignatureModelsList = new List <MethodSignatureModel>();
                foreach (var method in cryptoMethods)
                {
                    ICommonUtilities commonUtilities = serviceProvider.GetService <ICommonUtilities>();
                    //Check if the Event is Valid
                    bool isValidEvent = commonUtilities.IsMethodInEvents(method, identifierSymbolInfo, cryslData.Object_Section.Objects_Declaration);
                    if (isValidEvent)
                    {
                        MethodSignatureModel currentValidEvent = new MethodSignatureModel
                        {
                            MethodName = identifierSymbolInfo.Name,
                            Parameters = method.Argument_types,
                        };
                        methodSignatureModelsList.Add(currentValidEvent);
                        //Go to the Containing Method Declaration Node
                        var containingMethodDeclarationNode = identifier.FirstAncestorOrSelf <MethodDeclarationSyntax>();
                        var invExprSyntaxWalker             = new InvocationExpressionSyntaxWalker(cryslData, context, nodeSPan);
                        //Walk through the current method to find all invocations of the given type
                        invExprSyntaxWalker.Visit(containingMethodDeclarationNode);
                        Dictionary <string, List <MethodSignatureModel> > validEventsDict = invExprSyntaxWalker.GetMethodsList();
                        if (!validEventsDict.ContainsKey(method.Event_Var_Name))
                        {
                            validEventsDict.Add(method.Event_Var_Name, methodSignatureModelsList);
                        }
                        //If there are two events of same type
                        else if (validEventsDict.ContainsKey(method.Event_Var_Name))
                        {
                            foreach (var methodSig in validEventsDict.Values)
                            {
                                methodSignatureModelsList.AddRange(methodSig);
                            }
                            validEventsDict[method.Event_Var_Name] = methodSignatureModelsList;
                        }
                        //Check if the Aggregator Condition Satisfies
                        bool isAggregatorCondition = commonUtilities.CheckAggregator(validEventsDict, methods.Aggregator.Aggregators);
                        if (isAggregatorCondition)
                        {
                            validEvents.IsValidEvent    = true;
                            validEvents.ValidEventsDict = validEventsDict;
                            validEvents.AggregatorName  = methods.Aggregator.Aggregator_Name;
                        }
                        else
                        {
                            validEvents.IsValidEvent = false;
                        }

                        return(validEvents);
                    }
                }
            }
            validEvents.IsValidEvent = false;
            return(validEvents);
        }
        /// <summary>
        /// Visit InvocationExpressions for a Given MethodDeclarationSyntax Node.
        /// </summary>
        /// <param name="invocationExpressionNode"></param>
        /// <returns></returns>
        public override void VisitMemberAccessExpression(MemberAccessExpressionSyntax node)
        {
            if (!node.Span.Equals(nodeLocation))
            {
                var identifierNode = node.ChildNodes().OfType <IdentifierNameSyntax>();
                foreach (var identifier in identifierNode)
                {
                    var result = _cryslSpecificationModel.Event_Section.Methods.Select(x => x.Crypto_Signature
                                                                                       .Where(y => y.Method_Name.ToString().Equals(identifier.Identifier.Value.ToString())));
                    foreach (var methods in _cryslSpecificationModel.Event_Section.Methods)
                    {
                        // Check if method signature matches with the method signature defined in events section of the Crysl.
                        var cryptoMethods = methods.Crypto_Signature.Select(y => y).Where(x => x.Method_Name.ToString().Equals(identifier.Identifier.Value.ToString()));
                        if (cryptoMethods.Count() > 0)
                        {
                            if (_context.SemanticModel.GetSymbolInfo(identifier).Symbol.Kind.Equals(SymbolKind.Method))
                            {
                                var identifierSymbolInfo = (IMethodSymbol)_context.SemanticModel.GetSymbolInfo(identifier).Symbol;
                                // Check for valid event only if Identifier is of Spec type in Crysl.
                                if (identifierSymbolInfo.ReturnType.ToString().Equals(_cryslSpecificationModel.Spec_Section.Class_Name))
                                {
                                    List <MethodSignatureModel> methodSignatureModelsList = new List <MethodSignatureModel>();
                                    foreach (var method in cryptoMethods)
                                    {
                                        ICommonUtilities commonUtilities = serviceProvider.GetService <ICommonUtilities>();
                                        bool             isValidEvent    = commonUtilities.IsMethodInEvents(method, identifierSymbolInfo, _cryslSpecificationModel.Object_Section.Objects_Declaration);

                                        if (isValidEvent)
                                        {
                                            MethodSignatureModel methodSignatureModel = new MethodSignatureModel
                                            {
                                                MethodName = identifierSymbolInfo.Name,
                                                Parameters = method.Argument_types
                                            };
                                            methodSignatureModelsList.Add(methodSignatureModel);

                                            if (!methodSignatureDict.ContainsKey(method.Event_Var_Name))
                                            {
                                                methodSignatureDict.Add(method.Event_Var_Name, methodSignatureModelsList);
                                            }
                                            else
                                            {
                                                methodSignatureDict[method.Event_Var_Name] = methodSignatureModelsList;
                                            }

                                            /*methodSignatureList.Add(method.Event_Var_Name, new MethodSignatureModel
                                             * {
                                             *  MethodName = identifierSymbolInfo.Name,
                                             *  Parameters = method.Argument_types
                                             * });*/
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
 public FlowerManager(
     IImageDrawing imageDrawing,
     ILifeFactory lifeFactory,
     ILandscapeManager landscape,
     IFlowerLifeCycle flowerLifeCycle,
     IShapeDrawing shapeDrawing,
     ICommonUtilities utilitiesResolver)
 {
     _imageDrawing      = imageDrawing;
     _flowerLifeCycle   = flowerLifeCycle;
     _lifeFactory       = lifeFactory;
     _landscape         = landscape;
     _shapeDrawing      = shapeDrawing;
     _utilitiesResolver = utilitiesResolver;
 }
コード例 #4
0
 public BeeManager(
     IBeeCommon beeCommon,
     IBeeBehaviorResolver beeBehaviorResolver,
     IBeeWingsMovementInvoker beeWingsMovementInvoker,
     IImageDrawing imageDrawing,
     IMovementBehaviorCommandInvoker movementBehaviorCommandInvoker,
     ILifeFactory lifeFactory,
     IInteractionManager interactionManager,
     ILinearMovementStrategy linearMovementStrategy,
     IMovementSelector movementSelector,
     ICommonUtilities utilitiesResolver
     )
 {
     _beeCommon                      = beeCommon;
     _beeBehaviorResolver            = beeBehaviorResolver;
     _beeWingsMovementInvoker        = beeWingsMovementInvoker;
     _movementBehaviorCommandInvoker = movementBehaviorCommandInvoker;
     _imageDrawing                   = imageDrawing;
     _lifeFactory                    = lifeFactory;
     _interactionManager             = interactionManager;
     _linearMovementStrategy         = linearMovementStrategy;
     _movementSelector               = movementSelector;
     _utilitiesResolver              = utilitiesResolver;
 }
コード例 #5
0
ファイル: RetrieveRaceData.cs プロジェクト: Ki1gore/GHRace
 public RetrieveRaceData(ICommonUtilities utils)
 {
     _utils = utils;
 }
コード例 #6
0
 public MunharaundaRepository(MunharaundaDbContext context, ICommonUtilities util)
 {
     _context = context;
     _util    = util;
 }
コード例 #7
0
ファイル: HomeController.cs プロジェクト: Ki1gore/GHRace
 public HomeController(IRetrieveRaceData retrieveRaceData, ICommonUtilities utils)
 {
     _retrieveRaceData = retrieveRaceData;
     _utils = utils;
     _dba = new GHRaceDBAccessService();
 }