상속: Assertion
        public override bool IsAvailable(JetBrains.Util.IUserDataHolder cache)
        {
            var invocationExpression = provider.GetSelectedElement<IInvocationExpression>(true, false);

            assertion = invocationExpression != null ? InlineAssertion.TryFromInvocationExpression(invocationExpression) : null;

            return assertion != null;
        }
예제 #2
0
        internal static HashSet <Assertion> CollectAssertions(
            [NotNull] AssertionMethodAnnotationProvider assertionMethodAnnotationProvider,
            [NotNull] AssertionConditionAnnotationProvider assertionConditionAnnotationProvider,
            [NotNull] ICSharpTreeNode rootNode)
        {
            var forTypeLevelInitializersOnly = rootNode is IClassLikeDeclaration;

            var assertions = new HashSet <Assertion>();

            foreach (var invocationExpression in rootNode.Descendants <IInvocationExpression>())
            {
                Debug.Assert(invocationExpression != null);

                var isInTypeLevelInitializer = invocationExpression.PathToRoot()
                                               .Any(node => node is IExpressionInitializer && (node.Parent is IFieldDeclaration || node.Parent is IPropertyDeclaration));

                if (forTypeLevelInitializersOnly != isInTypeLevelInitializer)
                {
                    continue;
                }

                var assertionStatement = AssertionStatement.TryFromInvocationExpression(
                    invocationExpression,
                    assertionMethodAnnotationProvider,
                    assertionConditionAnnotationProvider);
                if (assertionStatement != null)
                {
                    assertions.Add(assertionStatement);
                }

                var inlineAssertion = InlineAssertion.TryFromInvocationExpression(invocationExpression);
                if (inlineAssertion != null)
                {
                    assertions.Add(inlineAssertion);
                }
            }

            return(assertions);
        }
        protected override Action<ITextControl> ExecutePsiTransaction(ISolution solution, IProgressIndicator progress)
        {
            Debug.Assert(assertion != null);

            try
            {
                // changing the tree with the ModificationUtil does not retrigger the analysis for the current statement => changing the text directly
                // does retrigger the analysis

                var textRange = assertion.InvocationExpression.GetDocumentRange().TextRange;
                var qualifierExpressionText = assertion.QualifierExpression.GetText();

                return textControl =>
                {
                    Debug.Assert(textControl != null);

                    textControl.Document.ReplaceText(textRange, qualifierExpressionText);
                };
            }
            finally
            {
                assertion = null;
            }
        }
 internal RedundantInlineAssertionHighlighting([NotNull] string message, [NotNull] InlineAssertion assertion) : base(message)
 {
     this.assertion = assertion;
 }