Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions lang/csharp/src/apache/codegen/AvroGen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ static int Main(string[] args)
bool? isProtocol = null;
string inputFile = null;
string outputDir = null;
bool skipDirectoriesCreation = false;
var namespaceMapping = new Dictionary<string, string>();
for (int i = 0; i < args.Length; ++i)
{
Expand Down Expand Up @@ -89,6 +90,10 @@ static int Main(string[] args)

namespaceMapping[parts[0]] = parts[1];
}
else if (args[i] == "--skip-directories")
{
skipDirectoriesCreation = true;
}
else if (outputDir == null)
{
outputDir = args[i];
Expand Down Expand Up @@ -123,7 +128,7 @@ static int Main(string[] args)
else if (isProtocol.Value)
rc = GenProtocol(inputFile, outputDir, namespaceMapping);
else
rc = GenSchema(inputFile, outputDir, namespaceMapping);
rc = GenSchema(inputFile, outputDir, namespaceMapping, skipDirectoriesCreation);

return rc;
}
Expand All @@ -138,7 +143,9 @@ static void Usage()
" -h --help Show this screen.\n" +
" --namespace Map an Avro schema/protocol namespace to a C# namespace.\n" +
" The format is \"my.avro.namespace:my.csharp.namespace\".\n" +
" May be specified multiple times to map multiple namespaces.\n",
" May be specified multiple times to map multiple namespaces.\n" +
" --skip-directories Skip creation of namespace directories. It will generate classes right inside output directory\n",

AppDomain.CurrentDomain.FriendlyName);
return;
}
Expand Down Expand Up @@ -168,7 +175,8 @@ static int GenProtocol(string infile, string outdir,
return 0;
}
static int GenSchema(string infile, string outdir,
IEnumerable<KeyValuePair<string, string>> namespaceMapping)
IEnumerable<KeyValuePair<string, string>> namespaceMapping,
bool skipDirectories)
{
try
{
Expand All @@ -182,7 +190,7 @@ static int GenSchema(string infile, string outdir,
codegen.NamespaceMapping[entry.Key] = entry.Value;

codegen.GenerateCode();
codegen.WriteTypes(outdir);
codegen.WriteTypes(outdir, skipDirectories);
}
catch (Exception ex)
{
Expand Down
10 changes: 6 additions & 4 deletions lang/csharp/src/apache/main/CodeGen/CodeGen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1110,7 +1110,7 @@ public virtual void WriteCompileUnit(string outputFile)
/// Writes each types in each namespaces into individual files.
/// </summary>
/// <param name="outputdir">name of directory to write to.</param>
public virtual void WriteTypes(string outputdir)
public virtual void WriteTypes(string outputdir, bool skipDirectories = false)
{
var cscp = new CSharpCodeProvider();

Expand All @@ -1125,11 +1125,13 @@ public virtual void WriteTypes(string outputdir)
var ns = nsc[i];

string dir = outputdir;
foreach (string name in CodeGenUtil.Instance.UnMangle(ns.Name).Split('.'))
if (skipDirectories != true)
{
dir = Path.Combine(dir, name);
foreach (string name in CodeGenUtil.Instance.UnMangle(ns.Name).Split('.'))
{
dir = Path.Combine(dir, name);
}
}

Directory.CreateDirectory(dir);

var new_ns = new CodeNamespace(ns.Name);
Expand Down