private void HandleReturnType(ReturnNode returnNode, HandleContext context)
        {
            _blockParserContext.Inspect(returnNode.Expression);
            string returnSymbol = IntrospectionUtility.GetVariableName(returnNode.Expression);

            if (returnSymbol != null)
            {
                ProblemMetadata problemMetadata = new ProblemMetadata(
                    returnNode.UniqueKey, returnNode.SourceContext, _blockParserContext.ReturnFragmentType, context.SymbolTable.GetFragmentType(returnSymbol));
                AssignabilityPreCondition returnBlockCondition = new AssignabilityPreCondition(
                    returnSymbol, _blockParserContext.ReturnFragmentType, problemMetadata);
                context.PreConditions.Add(returnBlockCondition);
                context.PreConditions.AddRange(_blockParserContext.ReturnConditions);
            }
        }
        public void IsViolated_ViolatingContext_ChangesProblemMetadatasGivenType()
        {
            var                       expectedFragment   = Fragment.CreateNamed("expectedFragment");
            var                       unexpectedFragment = Fragment.CreateNamed("unexpectedFragment");
            ProblemMetadata           problemMetaData    = new ProblemMetadata(0, new SourceContext(), expectedFragment, Fragment.CreateNamed("dummy"));
            IBlacklistManager         blackListManager   = _mocks.Stub <IBlacklistManager>();
            AssignabilityPreCondition preCondition       = new AssignabilityPreCondition("testSymbol", expectedFragment, problemMetaData);
            SymbolTable               context            = new SymbolTable(blackListManager);

            context.MakeSafe("testSymbol", unexpectedFragment);

            preCondition.IsViolated(context);

            Assert.That(problemMetaData.GivenFragment, Is.EqualTo(unexpectedFragment));
        }
Ejemplo n.º 3
0
        private void AddAssignmentPreCondition(AssignmentStatement assignmentStatement, HandleContext context)
        {
            Field    targetField        = IntrospectionUtility.GetField(assignmentStatement.Target);
            Fragment targetFragmentType = FragmentUtility.GetFragmentType(targetField.Attributes);

            if (targetFragmentType != Fragment.CreateEmpty())
            {
                ProblemMetadata problemMetadata = new ProblemMetadata(
                    assignmentStatement.UniqueKey,
                    assignmentStatement.SourceContext,
                    targetFragmentType,
                    Fragment.CreateNamed("??"));
                string sourceSymbol = IntrospectionUtility.GetVariableName(assignmentStatement.Source);
                if (sourceSymbol != null)
                {
                    AssignabilityPreCondition preCondition = new AssignabilityPreCondition(sourceSymbol, targetFragmentType, problemMetadata);
                    context.PreConditions.Add(preCondition);
                }
            }
        }