diff --git a/src/mpu/Program.cs b/src/mpu/Program.cs index 85243e61e..46b4474f1 100644 --- a/src/mpu/Program.cs +++ b/src/mpu/Program.cs @@ -83,6 +83,7 @@ private static int Execute( IEnumerable args ) var excludingPattern = default( string ); var treatWarningsAsErrors = false; var warningLevel = 4; + var admitNonPublicTypes = false; var configuration = new SerializerCodeGenerationConfiguration { @@ -181,6 +182,10 @@ private static int Execute( IEnumerable args ) "excludes=", "[serializer, optional] Specify additional regular expression to filter in serialization target types. This filter is used for type full name including its namespace.", value => excludingPattern = value }, + { + "admit-non-public-types", "[serializer, optional] Specify to enable code generation for non-public types.", + _ => admitNonPublicTypes = true + }, { "treat-warning-as-errors|treatWarningsAsErrors", "[serializer, optional] Specify to generate error for compiler warnings for serialization target types.", _ => treatWarningsAsErrors = true @@ -220,6 +225,7 @@ private static int Execute( IEnumerable args ) excludingPattern, treatWarningsAsErrors, warningLevel, + admitNonPublicTypes, configuration ); return 0; @@ -288,6 +294,7 @@ private static void GenerateSerializers( string excludingPattern, bool treatWarningsAsErrors, int warningLevel, + bool admitNonPublicTypes, SerializerCodeGenerationConfiguration configuration ) { @@ -311,7 +318,8 @@ SerializerCodeGenerationConfiguration configuration referenceAssemblies ?? new string[ 0 ] ), includingPattern, - excludingPattern + excludingPattern, + admitNonPublicTypes ); } else @@ -320,7 +328,8 @@ SerializerCodeGenerationConfiguration configuration generator.GenerateSerializers( sourceFilePathes[ 0 ], includingPattern, - excludingPattern + excludingPattern, + admitNonPublicTypes ); } diff --git a/src/mpu/SerializerCodeGenerator.cs b/src/mpu/SerializerCodeGenerator.cs index c5f647669..7b335b7d4 100644 --- a/src/mpu/SerializerCodeGenerator.cs +++ b/src/mpu/SerializerCodeGenerator.cs @@ -71,14 +71,16 @@ public SerializerCodeGenerator( SerializerCodeGenerationConfiguration configurat public IEnumerable GenerateSerializers( string sourceAssemblyFile, string includingPattern, - string excludingPattern + string excludingPattern, + bool admitNonPublicTypes ) { return this.GenerateSerializers( Assembly.LoadFrom( sourceAssemblyFile ), includingPattern, - excludingPattern + excludingPattern, + admitNonPublicTypes ); } @@ -95,7 +97,8 @@ string excludingPattern public IEnumerable GenerateSerializers( Assembly sourceAssembly, string includingPattern, - string excludingPattern + string excludingPattern, + bool admitNonPublicTypes ) { if ( sourceAssembly == null ) @@ -129,7 +132,7 @@ string excludingPattern sourceAssembly.GetTypes() .Where( type => - type.IsPublic + (admitNonPublicTypes || type.IsPublic) && !type.IsAbstract && !type.IsInterface && ( includingRegex == null || includingRegex.IsMatch( type.FullName ) )