// TODO: out parameters protected Dictionary <ParameterIndex, Reference> GetVariablePairsFromInvoked(IPrimaryExpression invokedExpression) { var vars = new Dictionary <ParameterIndex, Reference>(); vars.Add(ParameterIndex.ReturnValueIndex, MyParams.LocalVariableIndexer.GetNextVariable()); switch (invokedExpression) { case IMethod method: // for (int i = 0; i < method.Parameters.Count; i++) // { // if (method.Parameters[i].Kind == ParameterKind.OUTPUT) // { // var name = method.Parameters[i].ShortName; // vars.Add(MyParams.LocalVariableIndexer.GetNextVariable()); // } // } // // method.Parameters break; case ILocalFunctionDeclaration localFunction: break; } return(vars); }
/// <summary> /// Swap base to this unless local implementation. /// </summary> /// <param name="invocationExpression"> /// The invocation expression. /// </param> public static void SwapBaseToThisUnlessLocalImplementation(IInvocationExpression invocationExpression) { bool isOverride = false; bool isNew = false; IPrimaryExpression invokedExpression = invocationExpression.InvokedExpression; if (invokedExpression != null) { IReferenceExpression referenceExpressionNode = invokedExpression as IReferenceExpression; if (referenceExpressionNode != null) { IReferenceExpression referenceExpression = invokedExpression as IReferenceExpression; if (referenceExpression != null) { ICSharpExpression qualifierExpression = referenceExpression.QualifierExpression; if (qualifierExpression is IBaseExpression) { string methodName = referenceExpressionNode.NameIdentifier.Name; ICSharpTypeDeclaration typeDeclaration = invocationExpression.GetContainingNode <ICSharpTypeDeclaration>(true); if (typeDeclaration != null) { foreach (ICSharpTypeMemberDeclaration memberDeclaration in typeDeclaration.MemberDeclarations) { if (memberDeclaration.DeclaredName == methodName) { IMethodDeclaration methodDeclaration = memberDeclaration as IMethodDeclaration; if (methodDeclaration != null) { isOverride = methodDeclaration.IsOverride; isNew = methodDeclaration.IsNew(); break; } } } if (isOverride || isNew) { return; } using (WriteLockCookie.Create(true)) { // swap the base to this ICSharpExpression expression = CSharpElementFactory.GetInstance(invocationExpression.GetPsiModule()).CreateExpression("this"); referenceExpression.SetQualifierExpression(expression); } } } } } } }
/// <summary> /// Returns the text of a <see cref="ILiteralLikeNode"/> that was constructed as part of a <see cref="ITaggedTemplateExpression"/>. /// </summary> public static string GetTemplateText(this IPrimaryExpression expression) { Contract.Requires(expression != null); return(expression.Cast <ILiteralLikeNode>().Text); }
public IPrimaryExpression SetInvokedExpression(IPrimaryExpression param) { return(_invocationExpression.SetInvokedExpression(param)); }
/// <summary> /// Swap base to this unless local implementation. /// </summary> /// <param name="invocationExpression"> /// The invocation expression. /// </param> public static void SwapBaseToThisUnlessLocalImplementation(IInvocationExpression invocationExpression) { bool isOverride = false; bool isNew = false; IPrimaryExpression invokedExpression = invocationExpression.InvokedExpression; if (invokedExpression == null) { return; } IReferenceExpression referenceExpression = invokedExpression as IReferenceExpression; if (referenceExpression == null) { return; } ICSharpExpression qualifierExpression = referenceExpression.QualifierExpression; if (!(qualifierExpression is IBaseExpression)) { return; } ICSharpTypeDeclaration typeDeclaration = invocationExpression.GetContainingNode <ICSharpTypeDeclaration>(true); if (typeDeclaration == null) { return; } ITypeElement typeDeclaredElement = typeDeclaration.DeclaredElement; if (typeDeclaredElement == null) { return; } IDeclaredElement referenceDeclaredElement = referenceExpression.Reference.Resolve().DeclaredElement; if (referenceDeclaredElement == null) { return; } foreach (var member in typeDeclaredElement.GetAllClassMembers(referenceDeclaredElement.ShortName)) { if (!member.Equals(referenceDeclaredElement)) { continue; } using (WriteLockCookie.Create(true)) { // swap the base to this ICSharpExpression expression = CSharpElementFactory.GetInstance(invocationExpression.GetPsiModule()).CreateExpression("this"); referenceExpression.SetQualifierExpression(expression); } } }
public override Expression VisitPrimaryExpression(IPrimaryExpression primaryExpressionParam, IMetadataResolver context) { return(null); }