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); }
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); } }
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); } } }
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)); } } } }
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); }
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); } } }