private static void parseUsingStatement(CsStatement pArg1, CodeBuilder pSb, FactoryExpressionCreator pCreator) { CsUsingStatement statement = (CsUsingStatement)pArg1; CsLocalVariableDeclaration declaration = statement.resource as CsLocalVariableDeclaration; string varname; if (declaration == null) { varname = "$$using$$"; Expression e = pCreator.Parse(statement.resource); pSb.AppendFormat("var {0}:{1} = {2};", varname, As3Helpers.Convert(Helpers.GetType(e.Type)), e.Value ); pSb.AppendLine(); } else { CsLocalVariableDeclarator declarator = declaration.declarators.First.Value; StringBuilder sb = new StringBuilder(); sb.AppendFormat("var {0}:{1}", declarator.identifier.identifier, As3Helpers.Convert(Helpers.GetType(declaration.type)) ); varname = declarator.identifier.identifier; if (declarator.initializer == null) { sb.Append(";"); } else { sb.AppendFormat(" = {0};", parseNode(declarator.initializer, pCreator)); } pSb.Append(sb.ToString()); pSb.AppendLine(); } pSb.Append("try {"); pSb.AppendLine(); ParseNode(statement.statement, pSb, pCreator); pSb.Append("} finally {"); pSb.AppendLine(); pSb.AppendFormat(" if ({0} != null) {0}.Dispose();", varname); pSb.AppendLine(); pSb.Append("}"); pSb.AppendLine(); pSb.AppendLine(); }
/// <summary> /// Extension method that creates a fully formatted using statement. /// </summary> /// <example> /// Format with alias using [alias] = [namespace]; /// Format without alias using [namespace]; /// </example> /// <param name="source">The source using statement to use.</param> /// <param name="includeAlias">Optional flag that determines if a alias is included to add it to the using statement definition.</param> /// <param name="alias">Optional flag that allows you to set a custom alias. If set this will always overrider the <see cref="includeAlias"/> flag and any internal alias assigned to the model.</param> /// <returns>Fully formatted using statement, or null if namespace data is missing from the model</returns> public static string CSharpFormatUsingStatement(this CsUsingStatement source, bool includeAlias = true, string alias = null) { var nameSpace = source.ReferenceNamespace; if (string.IsNullOrEmpty(nameSpace)) { return(null); } var formattedAlias = alias; bool useAlias = !string.IsNullOrEmpty(formattedAlias); if (!useAlias) { if (includeAlias & source.HasAlias) { formattedAlias = source.Alias; useAlias = true; } } return(!useAlias ? $"using {nameSpace};" : $"using {formattedAlias} = {nameSpace};"); }