/// <summary> /// Process local variable declaration. /// </summary> /// <param name="localVariableDeclaration"> /// The local variable declaration. /// </param> private static void ProcessLocalVariableDeclaration(ILocalVariableDeclaration localVariableDeclaration) { IMultipleLocalVariableDeclaration multipleDeclaration = MultipleLocalVariableDeclarationNavigator.GetByDeclarator(localVariableDeclaration); if (multipleDeclaration.Declarators.Count > 1) { IType newType = CSharpTypeFactory.CreateType(multipleDeclaration.TypeUsage); using (WriteLockCookie.Create(true)) { multipleDeclaration.SetTypeUsage(CSharpElementFactory.GetInstance(localVariableDeclaration.GetPsiModule()).CreateTypeUsageNode(newType)); } } else { ILocalVariable variable = localVariableDeclaration.DeclaredElement; if (variable != null) { if (!multipleDeclaration.IsVar) { using (WriteLockCookie.Create(true)) { localVariableDeclaration.SetType(variable.Type); } } } } }
public LocalVariableDeclarationCompiler(ILocalVariableDeclaration localVariableDeclaration, AbstractILCompilerParams @params) : base(@params) { myLocalVariableDeclaration = localVariableDeclaration; var variableName = myLocalVariableDeclaration.DeclaredName; myLocalVariableReference = MyParams.LocalVariableIndexer.GetNextVariable(variableName); }
public override void VisitLocalVariableDeclaration(ILocalVariableDeclaration decl, IList <IStatement> body) { if (IsTargetMatch(decl, CompletionCase.EmptyCompletionBefore)) { body.Add(EmptyCompletionExpression); } var id = decl.DeclaredName; ITypeName type; try { type = decl.Type.GetName(); } catch (AssertException) { // TODO this is an intermediate "fix"... the analysis sometimes fails here ("cannot create name for anonymous type") type = Names.UnknownType; } body.Add(SSTUtil.Declare(id, type)); IAssignableExpression initializer = null; if (decl.Initial != null) { initializer = _exprVisitor.ToAssignableExpr(decl.Initial, body); } else if (_marker.HandlingNode == decl && _marker.Case == CompletionCase.InBody) { initializer = new CompletionExpression(); } if (initializer != null) { if (!IsSelfAssign(id, initializer)) { body.Add(SSTUtil.AssignmentToLocal(id, initializer)); } } if (decl == _marker.HandlingNode && _marker.Case == CompletionCase.EmptyCompletionAfter) { body.Add(EmptyCompletionExpression); } }
private static (NamedElementKinds?, IReferenceName) GetKindAndDeclaration(ILocalVariableDeclaration localVarDeclaration, IFieldDeclaration fieldDeclaration, IRegularParameterDeclaration regularParameterDeclaration) { NamedElementKinds?kind = null; IReferenceName scalarTypeName = null; if (localVarDeclaration != null) { kind = NamedElementKinds.Locals; scalarTypeName = localVarDeclaration.GetScalarTypename(); } else if (fieldDeclaration != null) { scalarTypeName = fieldDeclaration.GetScalarTypename(); var isPrivate = fieldDeclaration.GetAccessRights().Has(AccessRights.PRIVATE); if (fieldDeclaration.IsStatic) { if (isPrivate) { kind = fieldDeclaration.IsReadonly ? NamedElementKinds.PrivateStaticReadonly : NamedElementKinds.PrivateStaticFields; } else { kind = fieldDeclaration.IsReadonly ? NamedElementKinds.StaticReadonly : NamedElementKinds.PublicFields; } } else { kind = isPrivate ? NamedElementKinds.PrivateInstanceFields : NamedElementKinds.PublicFields; } } else if (regularParameterDeclaration != null) { kind = NamedElementKinds.Parameters; scalarTypeName = regularParameterDeclaration.ScalarTypeName; } return(kind, scalarTypeName); }
/// <summary> /// Inserts the assertion code. /// </summary> /// <param name="localVariableDeclaration"> /// The local variable declaration. /// </param> private void CheckAssignment(ILocalVariableDeclaration localVariableDeclaration) { var localVariable = localVariableDeclaration.DeclaredElement as ILocalVariable; if (localVariable == null) { return; } IStatement anchor = null; ITreeNode treeNode = localVariableDeclaration.ToTreeNode(); while (treeNode != null) { anchor = treeNode as IStatement; if (anchor != null) { break; } treeNode = treeNode.Parent; } if (anchor == null) { return; } CheckAssignment(localVariableDeclaration, anchor, localVariable.ShortName); }
/// <summary>Inserts the assertion code.</summary> /// <param name="localVariableDeclaration">The local variable declaration.</param> private void InsertAssertionCode(ILocalVariableDeclaration localVariableDeclaration) { var localVariable = localVariableDeclaration.DeclaredElement as ILocalVariable; if (localVariable == null) { return; } this.InsertAssertionCode(localVariable.Type, localVariableDeclaration, localVariable.ShortName); }
/// <summary> /// Process local variable declaration. /// </summary> /// <param name="localVariableDeclaration"> /// The local variable declaration. /// </param> private static void ProcessLocalVariableDeclaration(ILocalVariableDeclaration localVariableDeclaration) { IMultipleLocalVariableDeclaration multipleDeclaration = MultipleLocalVariableDeclarationNavigator.GetByDeclarator(localVariableDeclaration); if (multipleDeclaration.Declarators.Count > 1) { IType newType = CSharpTypeFactory.CreateType(multipleDeclaration.TypeUsage); using (WriteLockCookie.Create(true)) { multipleDeclaration.SetTypeUsage(CSharpElementFactory.GetInstance(localVariableDeclaration.GetPsiModule()).CreateTypeUsageNode(newType)); } } else { ILocalVariable variable = localVariableDeclaration.DeclaredElement; if (variable != null) { if (!multipleDeclaration.IsVar) { using (WriteLockCookie.Create(true)) { localVariableDeclaration.SetType(variable.Type); } } } } }