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