public void GetFragmentType_ContainsNonFragmentParameter_ThrowsException()
        {
            TypeNode stringTypeNode   = IntrospectionUtility.TypeNodeFactory <string>();
            Method   sample           = TestHelper.GetSample <FragmentUtilitySample>("ContainsNonFragmentParameter", stringTypeNode);
            var      returnedFragment = FragmentUtility.GetFragmentType(sample.Parameters[0].Attributes);

            Assert.That(returnedFragment, Is.EqualTo(Fragment.CreateEmpty()));
        }
        public void GetFragmentType_ContainsStronglyTypedSqlFragmentParameter_True()
        {
            TypeNode stringTypeNode = IntrospectionUtility.TypeNodeFactory <string>();
            Method   sample         = TestHelper.GetSample <FragmentUtilitySample>("ContainsStronglyTypedSqlFragmentParameter", stringTypeNode);
            var      fragmentType   = FragmentUtility.GetFragmentType(sample.Parameters[0].Attributes);

            Assert.That(fragmentType, Is.EqualTo(Fragment.CreateNamed("SqlFragment")));
        }
        private ISymbolTable GetDelegatesEnvironment(DelegateNode sourceDelegateType)
        {
            ISymbolTable environment = new SymbolTable(_blockParserContext.BlacklistManager);

            foreach (Parameter parameter in sourceDelegateType.Parameters)
            {
                if (parameter.Attributes != null)
                {
                    environment.MakeSafe(parameter.Name.Name, FragmentUtility.GetFragmentType(parameter.Attributes));
                }
            }
            return(environment);
        }
Ejemplo n.º 4
0
        private void PassReturnFragmentTypeToContext(Expression operand, Parameter parameter)
        {
            string   symbol       = IntrospectionUtility.GetVariableName(operand);
            Fragment fragmentType = FragmentUtility.GetFragmentType(parameter.Attributes);

            if (FragmentUtility.ContainsFragment(parameter.Attributes))
            {
                _symbolTable.MakeSafe(symbol, fragmentType);
            }
            else
            {
                _symbolTable.MakeUnsafe(symbol);
            }
        }
Ejemplo n.º 5
0
 private void SetSymbolFragmentType(string name, AttributeNodeCollection attributes)
 {
     if (!_result.Contains(name))
     {
         if (FragmentUtility.ContainsFragment(attributes))
         {
             Fragment fragmentType = FragmentUtility.GetFragmentType(attributes);
             _result.MakeSafe(name, fragmentType);
         }
         else
         {
             _result.MakeUnsafe(name);
         }
     }
 }
Ejemplo n.º 6
0
        private void ValidateAssignmentOnField(AssignmentStatement assignmentStatement, HandleContext context)
        {
            Field    targetField        = IntrospectionUtility.GetField(assignmentStatement.Target);
            Fragment targetFragmentType = FragmentUtility.GetFragmentType(targetField.Attributes);
            Fragment givenFragmentType  = context.SymbolTable.InferFragmentType(assignmentStatement.Source);

            if (!FragmentUtility.FragmentTypesAssignable(givenFragmentType, targetFragmentType))
            {
                ProblemMetadata problemMetadata = new ProblemMetadata(
                    targetField.UniqueKey,
                    targetField.SourceContext,
                    targetFragmentType,
                    givenFragmentType);
                _blockParserContext.ProblemPipe.AddProblem(problemMetadata);
            }
        }
        protected void MatchFragments(Method baseMethod, Method overridingMethod)
        {
            foreach (var parameter in baseMethod.Parameters)
            {
                var fragmentType = FragmentUtility.GetFragmentType(parameter.Attributes);

                if (fragmentType != Fragment.CreateEmpty())
                {
                    var overriddenParameter    = overridingMethod.Parameters[parameter.ParameterListIndex];
                    var overriddenFragmentType = FragmentUtility.GetFragmentType(overriddenParameter.Attributes);

                    if (overriddenFragmentType != fragmentType && overriddenFragmentType != Fragment.CreateEmpty())
                    {
                        AddProblem(new ProblemMetadata(overridingMethod.UniqueKey, overridingMethod.SourceContext, fragmentType, overriddenFragmentType));
                    }
                }
            }
        }
Ejemplo n.º 8
0
        private List <ReturnCondition> ReferenceAndOutConditions(Method method)
        {
            List <ReturnCondition> referenceAndOutConditions = new List <ReturnCondition>();

            foreach (var parameter in method.Parameters)
            {
                if (parameter.Type is Reference && parameter.Attributes != null)
                {
                    Fragment parameterFragmentType = FragmentUtility.GetFragmentType(parameter.Attributes);
                    if (parameterFragmentType != null)
                    {
                        string          parameterName   = IntrospectionUtility.GetVariableName(parameter);
                        ReturnCondition returnCondition = new ReturnCondition(parameterName, parameterFragmentType);
                        referenceAndOutConditions.Add(returnCondition);
                    }
                }
            }
            return(referenceAndOutConditions);
        }
Ejemplo n.º 9
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);
                }
            }
        }