/*
     * Build first-time intialization statements
     */
    protected override void BuildInitStatements(CodeStatementCollection trueStatements, CodeStatementCollection topLevelStatements) {

        base.BuildInitStatements(trueStatements, topLevelStatements);

        // 



        CodeMemberField fileDependencies = new CodeMemberField(typeof(object), fileDependenciesName);
        fileDependencies.Attributes |= MemberAttributes.Static;
        _sourceDataClass.Members.Add(fileDependencies);

        // Note: it may look like this local variable declaration is redundant. However it is necessary
        // to make this init code re-entrant safe. This way, even if two threads enter the contructor
        // at the same time, they will not add multiple dependencies.

        // e.g. string[] dependencies;
        CodeVariableDeclarationStatement dependencies = new CodeVariableDeclarationStatement();
        dependencies.Type = new CodeTypeReference(typeof(string[]));
        dependencies.Name = dependenciesLocalName;
        // Note: it is important to add all local variables at the top level for CodeDom Subset compliance.
        topLevelStatements.Insert(0, dependencies);

        Debug.Assert(Parser.SourceDependencies != null);

        StringSet virtualDependencies = new StringSet();
        virtualDependencies.AddCollection(Parser.SourceDependencies);

        // e.g. dependencies = new string[{{virtualDependencies.Count}}];;
        CodeAssignStatement assignDependencies = new CodeAssignStatement();
        assignDependencies.Left =
            new CodeVariableReferenceExpression(dependenciesLocalName);
        assignDependencies.Right =
            new CodeArrayCreateExpression(typeof(String), virtualDependencies.Count);
        trueStatements.Add(assignDependencies);

        int i = 0;
        foreach (string virtualDependency in virtualDependencies) {
            // e.g. dependencies[i] = "~/sub/foo.aspx";
            CodeAssignStatement addFileDep = new CodeAssignStatement();
            addFileDep.Left =
                new CodeArrayIndexerExpression(
                    new CodeVariableReferenceExpression(dependenciesLocalName),
                    new CodeExpression[] {new CodePrimitiveExpression(i++)});
            string src = UrlPath.MakeVirtualPathAppRelative(virtualDependency);
            addFileDep.Right = new CodePrimitiveExpression(src);
            trueStatements.Add(addFileDep);
        }

        // e.g. __fileDependencies = this.GetWrappedFileDependencies(dependencies);
        CodeAssignStatement initFile = new CodeAssignStatement();
        initFile.Left = new CodeFieldReferenceExpression(_classTypeExpr, fileDependenciesName);
        CodeMethodInvokeExpression createWrap = new CodeMethodInvokeExpression();
        createWrap.Method.TargetObject = new CodeThisReferenceExpression();
        createWrap.Method.MethodName = "GetWrappedFileDependencies";
        createWrap.Parameters.Add(new CodeVariableReferenceExpression(dependenciesLocalName));
        initFile.Right = createWrap;

#if DBG
        AppendDebugComment(trueStatements);
#endif
        trueStatements.Add(initFile);
    }
 protected override void BuildInitStatements(CodeStatementCollection trueStatements, CodeStatementCollection topLevelStatements)
 {
     CodeMemberField field;
     base.BuildInitStatements(trueStatements, topLevelStatements);
     field = new CodeMemberField(typeof(object), "__fileDependencies") {
         Attributes = field.Attributes | MemberAttributes.Static
     };
     base._sourceDataClass.Members.Add(field);
     CodeVariableDeclarationStatement statement = new CodeVariableDeclarationStatement {
         Type = new CodeTypeReference(typeof(string[])),
         Name = "dependencies"
     };
     topLevelStatements.Insert(0, statement);
     StringSet set = new StringSet();
     set.AddCollection(this.Parser.SourceDependencies);
     CodeAssignStatement statement2 = new CodeAssignStatement {
         Left = new CodeVariableReferenceExpression("dependencies"),
         Right = new CodeArrayCreateExpression(typeof(string), set.Count)
     };
     trueStatements.Add(statement2);
     int num = 0;
     foreach (string str in (IEnumerable) set)
     {
         CodeAssignStatement statement3 = new CodeAssignStatement {
             Left = new CodeArrayIndexerExpression(new CodeVariableReferenceExpression("dependencies"), new CodeExpression[] { new CodePrimitiveExpression(num++) })
         };
         string str2 = UrlPath.MakeVirtualPathAppRelative(str);
         statement3.Right = new CodePrimitiveExpression(str2);
         trueStatements.Add(statement3);
     }
     CodeAssignStatement statement4 = new CodeAssignStatement {
         Left = new CodeFieldReferenceExpression(base._classTypeExpr, "__fileDependencies")
     };
     CodeMethodInvokeExpression expression = new CodeMethodInvokeExpression {
         Method = { TargetObject = new CodeThisReferenceExpression(), MethodName = "GetWrappedFileDependencies" }
     };
     expression.Parameters.Add(new CodeVariableReferenceExpression("dependencies"));
     statement4.Right = expression;
     trueStatements.Add(statement4);
 }