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