/// <summary> /// Gets the dispose. /// </summary> /// <param name="objectName">Name of the object.</param> /// <returns>return dispose CodeDom</returns> internal static CodeConditionStatement GetDispose(string objectName) { var statments = new CodeStatementCollection(); statments.Add(GetInvokeMethod(objectName, "Dispose")); return (new CodeConditionStatement( new CodeBinaryOperatorExpression( new CodeVariableReferenceExpression(objectName), CodeBinaryOperatorType.IdentityInequality, new CodePrimitiveExpression(null)), statments.ToArray())); }
/// <summary> /// Gets the throw clause. /// </summary> /// <returns>return catch...throw statement</returns> internal static CodeCatchClause[] GetThrowClause() { var catchStatmanents = new CodeStatementCollection(); catchStatmanents.Add(new CodeThrowExceptionStatement(new CodeVariableReferenceExpression("ex"))); var catchClause = new CodeCatchClause( "ex", new CodeTypeReference(typeof(Exception)), catchStatmanents.ToArray()); var catchClauses = new[] { catchClause }; return(catchClauses); }
/// <summary> /// Gets the Silverlight save to isolate storage file. /// </summary> /// <param name="type">CodeTypeDeclaration type.</param> /// <returns>return the save to file code DOM method statment </returns> protected override CodeMemberMethod GetSaveToFileMethod() { // ----------------------------------------------- // public virtual void SaveToFile(string fileName) // ----------------------------------------------- var saveToFileMethod = new CodeMemberMethod { Attributes = MemberAttributes.Public, Name = GeneratorContext.GeneratorParams.Serialization.SaveToFileMethodName }; saveToFileMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(string), "fileName")); if (GeneratorContext.GeneratorParams.Serialization.EnableEncoding) { saveToFileMethod.Parameters.Add(new CodeParameterDeclarationExpression(typeof(Encoding), "encoding")); } saveToFileMethod.Statements.Add( new CodeVariableDeclarationStatement( new CodeTypeReference(typeof(StreamWriter)), "streamWriter", new CodePrimitiveExpression(null))); saveToFileMethod.Statements.Add( new CodeVariableDeclarationStatement( new CodeTypeReference(typeof(IsolatedStorageFile)), "isoFile", new CodePrimitiveExpression(null))); saveToFileMethod.Statements.Add( new CodeVariableDeclarationStatement( new CodeTypeReference(typeof(IsolatedStorageFileStream)), "isoStream", new CodePrimitiveExpression(null))); // ------------------------ // try {...} finally {...} // ----------------------- var tryExpression = new CodeStatementCollection(); tryExpression.Add( new CodeAssignStatement( new CodeVariableReferenceExpression("isoFile"), CodeDomHelper.GetInvokeMethod("IsolatedStorageFile", "GetUserStoreForApplication"))); tryExpression.Add( new CodeAssignStatement( new CodeVariableReferenceExpression("isoStream"), new CodeObjectCreateExpression( typeof(IsolatedStorageFileStream), new CodeExpression[] { new CodeArgumentReferenceExpression("fileName"), CodeDomHelper.GetEnum("FileMode", "Create"), new CodeVariableReferenceExpression("isoFile") }))); tryExpression.Add( new CodeAssignStatement( new CodeVariableReferenceExpression("streamWriter"), new CodeObjectCreateExpression( typeof(StreamWriter), new CodeExpression[] { new CodeVariableReferenceExpression("isoStream"), }))); // --------------------------------------- // string xmlString = Serialize(encoding); // --------------------------------------- CodeMethodInvokeExpression serializeMethodInvoke; if (GeneratorContext.GeneratorParams.Serialization.EnableEncoding) { serializeMethodInvoke = new CodeMethodInvokeExpression( new CodeMethodReferenceExpression(null, GeneratorContext.GeneratorParams.Serialization.SerializeMethodName), new CodeExpression[] { new CodeArgumentReferenceExpression("encoding") }); } else { serializeMethodInvoke = new CodeMethodInvokeExpression( new CodeMethodReferenceExpression(null, GeneratorContext.GeneratorParams.Serialization.SerializeMethodName)); } var xmlString = new CodeVariableDeclarationStatement( new CodeTypeReference(typeof(string)), "xmlString", serializeMethodInvoke); tryExpression.Add(xmlString); if (GeneratorContext.GeneratorParams.Serialization.EnableEncoding) { // ---------------------------------------------------------------- // streamWriter = new StreamWriter(fileName, false, Encoding.UTF8); // ---------------------------------------------------------------- tryExpression.Add(new CodeAssignStatement( new CodeVariableReferenceExpression("streamWriter"), new CodeObjectCreateExpression( typeof(StreamWriter), new CodeExpression[] { new CodeSnippetExpression("fileName"), new CodeSnippetExpression("false"), new CodeSnippetExpression(GeneratorContext.GeneratorParams.Serialization.GetEncoderString()) }))); } else { // -------------------------------------------------------------- // System.IO.FileInfo xmlFile = new System.IO.FileInfo(fileName); // -------------------------------------------------------------- tryExpression.Add(CodeDomHelper.CreateObject(typeof(FileInfo), "xmlFile", new[] { "fileName" })); // ---------------------------------------- // StreamWriter Tex = xmlFile.CreateText(); // ---------------------------------------- var createTextMethodInvoke = CodeDomHelper.GetInvokeMethod("xmlFile", "CreateText"); tryExpression.Add( new CodeAssignStatement( new CodeVariableReferenceExpression("streamWriter"), createTextMethodInvoke)); } // ---------------------------------- // streamWriter.WriteLine(xmlString); // ---------------------------------- var writeLineMethodInvoke = CodeDomHelper.GetInvokeMethod( "streamWriter", "WriteLine", new CodeExpression[] { new CodeVariableReferenceExpression("xmlString") }); tryExpression.Add(writeLineMethodInvoke); tryExpression.Add(CodeDomHelper.GetInvokeMethod("streamWriter", "Close")); tryExpression.Add(CodeDomHelper.GetInvokeMethod("isoStream", "Close")); var finallyStatmanentsCol = new CodeStatementCollection(); finallyStatmanentsCol.Add(CodeDomHelper.GetDispose("streamWriter")); finallyStatmanentsCol.Add(CodeDomHelper.GetDispose("isoFile")); finallyStatmanentsCol.Add(CodeDomHelper.GetDispose("isoStream")); var trycatch = new CodeTryCatchFinallyStatement(tryExpression.ToArray(), new CodeCatchClause[0], finallyStatmanentsCol.ToArray()); saveToFileMethod.Statements.Add(trycatch); return(saveToFileMethod); }