Esempio n. 1
0
 private void MergePostConditions(ISymbolTable adjustedContext, ISymbolTable postConditionSymbolTable)
 {
     foreach (string symbol in postConditionSymbolTable.Symbols)
     {
         adjustedContext.MakeSafe(symbol, postConditionSymbolTable.GetFragmentType(symbol));
     }
 }
 private void SetProblemMetadatasGivenFragment(ISymbolTable context)
 {
     if (_problemMetadata != null)
     {
         _problemMetadata.GivenFragment = context.GetFragmentType(_symbol);
     }
 }
        public void GetResult_ParameterizedMethodSymbolTableBuiltWithEmptyEnvironment_NonFragmentFieldIsEmptyFragment()
        {
            Method sampleMethod = TestHelper.GetSample <SymbolTableBuilderSample>("ParameterizedMethod", _floatType, _objectType);
            EmbeddedInitialSymbolTableBuilder embeddedInitialSymbolTableBuilder = new EmbeddedInitialSymbolTableBuilder(sampleMethod, _blacklistManager, _environment);
            ISymbolTable resultSymbolTable = embeddedInitialSymbolTableBuilder.GetResult();

            Assert.That(resultSymbolTable.GetFragmentType("_nonFragmentField"), Is.EqualTo(Fragment.CreateEmpty()));
        }
        public void GetResult_ParameterizedMethodSymbolTableBuiltWithNonOverlappingEnvironment_FragmentParameterIsOfCorrectFragmentType()
        {
            Method sampleMethod = TestHelper.GetSample <SymbolTableBuilderSample>("ParameterizedMethod", _floatType, _objectType);
            EmbeddedInitialSymbolTableBuilder embeddedInitialSymbolTableBuilder = new EmbeddedInitialSymbolTableBuilder(sampleMethod, _blacklistManager, _environment);
            ISymbolTable resultSymbolTable = embeddedInitialSymbolTableBuilder.GetResult();

            Assert.That(resultSymbolTable.GetFragmentType("fragmentParameter"), Is.EqualTo(Fragment.CreateNamed("FragmentType")));
        }
Esempio n. 5
0
 private void MergeBlockAssignments(ISymbolTable context, ISymbolTable adjustedContext, BlockAssignment[] blockAssignments)
 {
     foreach (var blockAssignment in blockAssignments)
     {
         Fragment propagatedFragmentType = context.GetFragmentType(blockAssignment.SourceSymbol);
         adjustedContext.MakeSafe(blockAssignment.TargetSymbol, propagatedFragmentType);
     }
 }
Esempio n. 6
0
        public void GetResult_ParameterizedMethodSymbolTable_UnknownSymbolIsListedAsEmptyFragment()
        {
            Method sampleMethod = TestHelper.GetSample <SymbolTableBuilderSample>("ParameterizedMethod", _floatType, _objectType);
            InitialSymbolTableBuilder initialSymbolTableBuilder = new InitialSymbolTableBuilder(sampleMethod, _blacklistManager);
            ISymbolTable resultSymbolTable = initialSymbolTableBuilder.GetResult();

            Assert.That(resultSymbolTable.GetFragmentType("unknownSymbol"), Is.EqualTo(Fragment.CreateEmpty()));
        }
Esempio n. 7
0
        public void GetResult_ParameterizedMethodSymbolTable_FragmentParameterIsOfCorrectFragmentType()
        {
            Method sampleMethod = TestHelper.GetSample <SymbolTableBuilderSample>("ParameterizedMethod", _floatType, _objectType);
            InitialSymbolTableBuilder initialSymbolTableBuilder = new InitialSymbolTableBuilder(sampleMethod, _blacklistManager);
            ISymbolTable resultSymbolTable = initialSymbolTableBuilder.GetResult();

            Assert.That(resultSymbolTable.GetFragmentType("fragmentParameter"), Is.EqualTo(Fragment.CreateNamed("FragmentType")));
        }
        public void GetResult_ParameterizedMethodSymbolTableBuiltWithOverlappingEnvironment_FragmentFieldIsEmptyFragment()
        {
            Method sampleMethod = TestHelper.GetSample <SymbolTableBuilderSample>("ParameterizedMethod", _floatType, _objectType);
            EmbeddedInitialSymbolTableBuilder embeddedInitialSymbolTableBuilder = new EmbeddedInitialSymbolTableBuilder(sampleMethod, _blacklistManager, _environment);

            _environment.MakeSafe("_fragmentField", Fragment.CreateNamed("ThisShouldBeIgnored"));
            ISymbolTable resultSymbolTable = embeddedInitialSymbolTableBuilder.GetResult();

            Assert.That(resultSymbolTable.GetFragmentType("_fragmentField"), Is.EqualTo(Fragment.CreateEmpty()));
        }
        private void InferArrayFragment(AssignmentStatement assignmentStatement, string targetName, HandleContext context)
        {
            ISymbolTable symbolTable        = context.SymbolTable;
            Fragment     targetFragmentType = symbolTable.InferFragmentType(assignmentStatement.Source);

            if (context.ArrayFragmentTypeDefined[targetName] == false)
            {
                symbolTable.MakeSafe(targetName, targetFragmentType);
                context.ArrayFragmentTypeDefined[targetName] = true;
            }
            else if (symbolTable.GetFragmentType(targetName) == Fragment.CreateLiteral())
            {
                symbolTable.MakeSafe(targetName, targetFragmentType);
            }
            else if (symbolTable.GetFragmentType(targetName) != targetFragmentType && targetFragmentType != Fragment.CreateLiteral())
            {
                symbolTable.MakeUnsafe(targetName);
            }
        }
        public void GetResult_ParameterizedMethodSymbolTableBuiltWithOverlappingNonFragmentField_EnvironmentSymbolIsPropagated()
        {
            Method sampleMethod = TestHelper.GetSample <SymbolTableBuilderSample>("ParameterizedMethod", _floatType, _objectType);
            EmbeddedInitialSymbolTableBuilder embeddedInitialSymbolTableBuilder = new EmbeddedInitialSymbolTableBuilder(sampleMethod, _blacklistManager, _environment);

            _environment.MakeSafe("_nonFragmentField", Fragment.CreateNamed("OverlappingType"));
            ISymbolTable resultSymbolTable = embeddedInitialSymbolTableBuilder.GetResult();

            Assert.That(resultSymbolTable.GetFragmentType("_nonFragmentField"), Is.EqualTo(Fragment.CreateNamed("OverlappingType")));
        }
        private void CheckAssignment(AssignmentStatement assignmentStatement, string targetName, HandleContext context)
        {
            ISymbolTable symbolTable        = context.SymbolTable;
            Fragment     targetFragmentType = symbolTable.GetFragmentType(targetName);
            Fragment     sourceFragmentType = symbolTable.InferFragmentType(assignmentStatement.Source);

            if (targetFragmentType != sourceFragmentType)
            {
                symbolTable.MakeUnsafe(targetName);
            }
            else
            {
                SetPreConditionForIndexerObject(assignmentStatement, targetName, sourceFragmentType, context);
            }
        }
        public override void HandleViolation(ISymbolTable context, IProblemPipe problemPipe)
        {
            if (!IsViolated (context))
            return;

              bool symbolIsUndefined = context.Contains (_symbol) && context.GetFragmentType (_symbol).Undefined;
              if (symbolIsUndefined)
              {
            SetSymbolFragmentType(context);
              }
              else
              {
            HandleFragmentConflict (context, problemPipe);
              }
        }
        public Fragment InferFragmentType(MethodCall methodCall, ISymbolTable context)
        {
            Fragment returnFragment = Fragment.CreateEmpty();
            Method   method         = IntrospectionUtility.ExtractMethod(methodCall);

            if (Infers(method) && methodCall.Callee is MemberBinding)
            {
                MemberBinding memberBinding = (MemberBinding)methodCall.Callee;
                string        variableName;
                if (IntrospectionUtility.IsVariable(memberBinding.TargetObject, out variableName))
                {
                    returnFragment = context.GetFragmentType(variableName);
                }
            }
            return(returnFragment);
        }
        public override void HandleViolation(ISymbolTable context, IProblemPipe problemPipe)
        {
            if (!IsViolated(context))
            {
                return;
            }

            bool symbolIsUndefined = context.Contains(_symbol) && context.GetFragmentType(_symbol).Undefined;

            if (symbolIsUndefined)
            {
                SetSymbolFragmentType(context);
            }
            else
            {
                HandleFragmentConflict(context, problemPipe);
            }
        }
        public void Analyze(MethodCall methodCall, ISymbolTable context, List <IPreCondition> preConditions)
        {
            Method method = IntrospectionUtility.ExtractMethod(methodCall);

            if (Analyzes(method) && methodCall.Callee is MemberBinding)
            {
                MemberBinding memberBinding = (MemberBinding)methodCall.Callee;

                if (IsFragmentParameterInferenceMethod(method))
                {
                    string variableName;
                    if (IntrospectionUtility.IsVariable(memberBinding.TargetObject, out variableName))
                    {
                        Fragment parameterFragment    = ParameterFragmentUtility.ParameterFragmentIntersection(methodCall, context);
                        Fragment targetObjectFragment = context.GetFragmentType(variableName);
                        if (targetObjectFragment == Fragment.CreateLiteral() || targetObjectFragment.Undefined)
                        {
                            context.MakeSafe(variableName, parameterFragment);
                        }
                        else
                        {
                            if (targetObjectFragment == Fragment.CreateEmpty() && parameterFragment != Fragment.CreateLiteral()) // && parameterFragment != Fragment.CreateEmpty()
                            {
                                ProblemMetadata problemMetadata = new ProblemMetadata(methodCall.UniqueKey, methodCall.SourceContext, parameterFragment, targetObjectFragment);
                                IPreCondition   precondition    = new CustomInferencePreCondition(variableName, parameterFragment, problemMetadata);
                                preConditions.Add(precondition);
                            }
                            else if (!FragmentUtility.FragmentTypesAssignable(parameterFragment, targetObjectFragment))
                            {
                                context.MakeUnsafe(variableName);
                            }
                        }
                    }
                }
                else if (!IsSafeMethod(method))
                {
                    string variableName;
                    if (IntrospectionUtility.IsVariable(memberBinding.TargetObject, out variableName))
                    {
                        context.MakeUnsafe(variableName);
                    }
                }
            }
        }
        public void HandleStatement_InitializationWithEmptyConstructor_VariableFragmentTypeIsNull()
        {
            Method    sampleMethod = IntrospectionUtility.MethodFactory <StringBuilderConstructStatementHandlerSample> ("InitializationWithEmptyConstructor");
            Block     sampleBlock  = (Block)sampleMethod.Body.Statements[0];
            Statement sample       = sampleBlock.Statements[1];

            HandleContext context = new HandleContext(
                sample,
                _symbolTable,
                new List <IPreCondition>(),
                new List <string>(),
                new List <BlockAssignment>(),
                new List <int>(),
                new Dictionary <string, bool>(),
                _stringBuilderFragmentTypesDefined);

            _handler.Handle(context);

            bool variableUndefined = _symbolTable.GetFragmentType("local$0").Undefined;

            Assert.That(variableUndefined, Is.True);
        }
 protected override bool ViolationCheckStrategy(ISymbolTable context)
 {
     return context.GetFragmentType (_symbol) != _fragment;
 }
Esempio n. 18
0
 protected override bool ViolationCheckStrategy(ISymbolTable context)
 {
     return(context.GetFragmentType(_symbol) != _fragment);
 }
 protected override bool ViolationCheckStrategy(ISymbolTable context)
 {
     Fragment givenFragment = context.GetFragmentType (_symbol);
       return !FragmentUtility.FragmentTypesAssignable (givenFragment, _fragment);
 }
 private void MergeBlockAssignments(ISymbolTable context, ISymbolTable adjustedContext, BlockAssignment[] blockAssignments)
 {
     foreach (var blockAssignment in blockAssignments)
       {
     Fragment propagatedFragmentType = context.GetFragmentType (blockAssignment.SourceSymbol);
     adjustedContext.MakeSafe (blockAssignment.TargetSymbol, propagatedFragmentType);
       }
 }
 private void MergePostConditions(ISymbolTable adjustedContext, ISymbolTable postConditionSymbolTable)
 {
     foreach (string symbol in postConditionSymbolTable.Symbols)
       {
     adjustedContext.MakeSafe (symbol, postConditionSymbolTable.GetFragmentType (symbol));
       }
 }
 public Fragment InferFragmentType(MethodCall methodCall, ISymbolTable context)
 {
     Fragment returnFragment = Fragment.CreateEmpty();
       Method method = IntrospectionUtility.ExtractMethod (methodCall);
       if (Infers (method) && methodCall.Callee is MemberBinding)
       {
     MemberBinding memberBinding = (MemberBinding) methodCall.Callee;
     string variableName;
     if (IntrospectionUtility.IsVariable (memberBinding.TargetObject, out variableName))
     {
       returnFragment = context.GetFragmentType (variableName);
     }
       }
       return returnFragment;
 }
        public void Analyze(MethodCall methodCall, ISymbolTable context, List<IPreCondition> preConditions)
        {
            Method method = IntrospectionUtility.ExtractMethod (methodCall);
              if (Analyzes(method) && methodCall.Callee is MemberBinding)
              {
            MemberBinding memberBinding = (MemberBinding) methodCall.Callee;

            if (IsFragmentParameterInferenceMethod (method))
            {
              string variableName;
              if (IntrospectionUtility.IsVariable (memberBinding.TargetObject, out variableName))
              {
            Fragment parameterFragment = ParameterFragmentUtility.ParameterFragmentIntersection (methodCall, context);
            Fragment targetObjectFragment = context.GetFragmentType (variableName);
            if (targetObjectFragment == Fragment.CreateLiteral() || targetObjectFragment.Undefined)
            {
              context.MakeSafe (variableName, parameterFragment);
            }
            else
            {
              if (targetObjectFragment == Fragment.CreateEmpty() && parameterFragment != Fragment.CreateLiteral()) // && parameterFragment != Fragment.CreateEmpty()
              {
                ProblemMetadata problemMetadata = new ProblemMetadata(methodCall.UniqueKey, methodCall.SourceContext, parameterFragment, targetObjectFragment);
                IPreCondition precondition = new CustomInferencePreCondition(variableName, parameterFragment, problemMetadata);
                preConditions.Add(precondition);
              }
              else if (!FragmentUtility.FragmentTypesAssignable(parameterFragment, targetObjectFragment))
              {
                context.MakeUnsafe(variableName);
              }
            }

              }
            }
            else if (!IsSafeMethod(method))
            {
              string variableName;
              if (IntrospectionUtility.IsVariable(memberBinding.TargetObject, out variableName))
              {
            context.MakeUnsafe(variableName);
              }
            }
              }
        }
        protected override bool ViolationCheckStrategy(ISymbolTable context)
        {
            Fragment givenFragment = context.GetFragmentType(_symbol);

            return(!FragmentUtility.FragmentTypesAssignable(givenFragment, _fragment));
        }
Esempio n. 25
0
 private void SetProblemMetadatasGivenFragment(ISymbolTable context)
 {
     if(_problemMetadata != null)
     _problemMetadata.GivenFragment = context.GetFragmentType (_symbol);
 }