/// <summary> /// Replacement for VBExpressionBase.ReplaceBy that does not insert unnecessary parentheses. /// </summary> /// <param name="oldExpression"></param> /// <param name="newExpression"></param> /// <returns></returns> public static IVBExpression ReplaceByExtension(this IVBExpression oldExpression, IVBExpression newExpression) { using (WriteLockCookie.Create(oldExpression.IsPhysical())) { if (oldExpression.Contains(newExpression)) { newExpression = newExpression.Copy(oldExpression.Parent); } return(ModificationUtil.ReplaceChild(oldExpression, newExpression)); } }
public void MakeCallExtension(IReference reference) { var treeNode = reference.GetTreeNode(); if (!treeNode.IsVB9Supported()) { return; } var referenceExpression = treeNode as IReferenceExpression; if (referenceExpression == null) { return; } IIndexExpression byExpression = IndexExpressionNavigator.GetByExpression(referenceExpression); if (byExpression == null) { return; } IVBArgument vbArgument = null; int index = 0; using (var enumerator = byExpression.ArgumentList.Arguments.GetEnumerator()) { while (enumerator.MoveNext()) { var current = enumerator.Current; var matchingParameter = current.GetMatchingParameter(); if (matchingParameter != null && matchingParameter.Element.IndexOf() == 0) { vbArgument = current; break; } ++index; } } if (vbArgument == null) { return; } IVBExpression vbExpression = null; var expressionArgument = vbArgument as IExpressionArgument; if (expressionArgument != null) { vbExpression = expressionArgument.Expression; } if (vbExpression == null) { return; } var indexExpression1 = (IIndexExpression)VBElementFactory.GetInstance(treeNode.GetPsiModule()) .CreateExpression("$0." + reference.GetName() + "()", new object[] { vbExpression }); indexExpression1.SetArgumentList(byExpression.ArgumentList); indexExpression1.RemoveArgument(indexExpression1.Arguments[index]); byExpression.ReplaceBy(indexExpression1); }