public void MaskingVariables()
{
CodeNamespace ns = new CodeNamespace("ns");
CodeTypeDeclaration class1 = new CodeTypeDeclaration();
class1.Name = "Class1";
ns.Types.Add(class1);
var cmm = new CodeMemberMethod();
cmm.Name = "for";
class1.Members.Add(cmm);
cmm = new CodeMemberMethod();
cmm.Name = "while";
cmm.Attributes = MemberAttributes.Final | MemberAttributes.Public;
cmm.Statements.Add(new CodeExpressionStatement(new CodeMethodInvokeExpression(new CodeThisReferenceExpression(), "for")));
class1.Members.Add(cmm);
class1 = new CodeTypeDeclaration();
class1.Name = "TestMasking";
ns.Types.Add(class1);
cmm = new CodeMemberMethod();
cmm.Name = "TestMasks";
cmm.ReturnType = new CodeTypeReference(typeof(int));
cmm.Parameters.Add(new CodeParameterDeclarationExpression(typeof(int), "i"));
cmm.Attributes = MemberAttributes.Static | MemberAttributes.Public;
cmm.Statements.Add(new CodeVariableDeclarationStatement(new CodeTypeReference("Class1"), "temp", new CodeObjectCreateExpression(new CodeTypeReference("Class1"))));
cmm.Statements.Add(new CodeExpressionStatement(new CodeMethodInvokeExpression(new CodeVariableReferenceExpression("temp"), "while")));
cmm.Statements.Add(new CodeMethodReturnStatement(new CodeVariableReferenceExpression("i")));
class1.Members.Add(cmm);
AssertEqual(ns,
@"namespace ns {
public class Class1 {
private void @for() { }
public void @while() {
this.@for();
}
}
public class TestMasking {
public static int TestMasks(int i) {
Class1 temp = new Class1();
temp.@while();
return i;
}
}
}");
}