@@ -94,7 +94,7 @@ void AddNestedTypes (TypeDefinition type)
9494 this . type = type ;
9595 this . log = log ;
9696
97- if ( ! type . IsClass )
97+ if ( type . IsEnum || type . IsInterface || type . IsValueType )
9898 Diagnostic . Error ( 4200 , LookupSource ( type ) , "Can only generate Java wrappers for 'class' types, not type '{0}'." , type . FullName ) ;
9999
100100 string jniName = JniType . ToJniName ( type ) ;
@@ -431,42 +431,47 @@ static string GetJniSignature (MethodDefinition ctor)
431431 // private native void n_onCreate (android.os.Bundle bundle);
432432 // }
433433
434- public void Generate ( string outputPath )
434+ public void Generate ( TextWriter writer )
435435 {
436- using ( StreamWriter sw = OpenStream ( outputPath ) ) {
437- if ( ! string . IsNullOrEmpty ( package ) ) {
438- sw . WriteLine ( "package " + package + ";" ) ;
439- sw . WriteLine ( ) ;
440- }
436+ if ( ! string . IsNullOrEmpty ( package ) ) {
437+ writer . WriteLine ( "package " + package + ";" ) ;
438+ writer . WriteLine ( ) ;
439+ }
441440
442- GenerateHeader ( sw ) ;
441+ GenerateHeader ( writer ) ;
443442
444- sw . WriteLine ( "/** @hide */" ) ;
445- sw . WriteLine ( "\t public static final String __md_methods;" ) ;
446- if ( children != null ) {
447- foreach ( var i in Enumerable . Range ( 1 , children . Count ) )
448- sw . WriteLine ( "\t static final String __md_{0}_methods;" , i ) ;
449- }
450- sw . WriteLine ( "\t static {" ) ;
451- GenerateRegisterType ( sw , this , "__md_methods" ) ;
452- if ( children != null ) {
453- for ( int i = 0 ; i < children . Count ; ++ i ) {
454- string methods = string . Format ( "__md_{0}_methods" , i + 1 ) ;
455- GenerateRegisterType ( sw , children [ i ] , methods ) ;
456- }
443+ writer . WriteLine ( "/** @hide */" ) ;
444+ writer . WriteLine ( "\t public static final String __md_methods;" ) ;
445+ if ( children != null ) {
446+ foreach ( var i in Enumerable . Range ( 1 , children . Count ) )
447+ writer . WriteLine ( "\t static final String __md_{0}_methods;" , i ) ;
448+ }
449+ writer . WriteLine ( "\t static {" ) ;
450+ GenerateRegisterType ( writer , this , "__md_methods" ) ;
451+ if ( children != null ) {
452+ for ( int i = 0 ; i < children . Count ; ++ i ) {
453+ string methods = string . Format ( "__md_{0}_methods" , i + 1 ) ;
454+ GenerateRegisterType ( writer , children [ i ] , methods ) ;
457455 }
458- sw . WriteLine ( "\t }" ) ;
456+ }
457+ writer . WriteLine ( "\t }" ) ;
459458
460- GenerateBody ( sw ) ;
459+ GenerateBody ( writer ) ;
461460
462- if ( children != null )
463- foreach ( JavaCallableWrapperGenerator child in children ) {
464- child . GenerateHeader ( sw ) ;
465- child . GenerateBody ( sw ) ;
466- child . GenerateFooter ( sw ) ;
467- }
461+ if ( children != null )
462+ foreach ( JavaCallableWrapperGenerator child in children ) {
463+ child . GenerateHeader ( writer ) ;
464+ child . GenerateBody ( writer ) ;
465+ child . GenerateFooter ( writer ) ;
466+ }
467+
468+ GenerateFooter ( writer ) ;
469+ }
468470
469- GenerateFooter ( sw ) ;
471+ public void Generate ( string outputPath )
472+ {
473+ using ( StreamWriter sw = OpenStream ( outputPath ) ) {
474+ Generate ( sw ) ;
470475 }
471476 }
472477
@@ -515,7 +520,7 @@ static string ManagedValueToJavaSource (object value)
515520 return value . ToString ( ) ;
516521 }
517522
518- void GenerateHeader ( StreamWriter sw )
523+ void GenerateHeader ( TextWriter sw )
519524 {
520525 sw . WriteLine ( ) ;
521526
@@ -541,7 +546,7 @@ void GenerateHeader (StreamWriter sw)
541546 sw . WriteLine ( "{" ) ;
542547 }
543548
544- void GenerateBody ( StreamWriter sw )
549+ void GenerateBody ( TextWriter sw )
545550 {
546551 foreach ( Signature ctor in ctors ) {
547552 if ( string . IsNullOrEmpty ( ctor . Params ) && JniType . IsApplication ( type ) )
@@ -584,7 +589,7 @@ void GenerateBody (StreamWriter sw)
584589 sw . WriteLine ( "\t }" ) ;
585590 }
586591
587- static void GenerateRegisterType ( StreamWriter sw , JavaCallableWrapperGenerator self , string field )
592+ static void GenerateRegisterType ( TextWriter sw , JavaCallableWrapperGenerator self , string field )
588593 {
589594 sw . WriteLine ( "\t \t {0} = " , field ) ;
590595 foreach ( Signature method in self . methods )
@@ -595,7 +600,7 @@ static void GenerateRegisterType (StreamWriter sw, JavaCallableWrapperGenerator
595600 self . type . GetAssemblyQualifiedName ( ) , self . name , field ) ;
596601 }
597602
598- void GenerateFooter ( StreamWriter sw )
603+ void GenerateFooter ( TextWriter sw )
599604 {
600605 sw . WriteLine ( "}" ) ;
601606 }
@@ -738,7 +743,7 @@ public string Retval {
738743 public readonly string Annotations ;
739744 }
740745
741- void GenerateConstructor ( Signature ctor , StreamWriter sw )
746+ void GenerateConstructor ( Signature ctor , TextWriter sw )
742747 {
743748 // TODO: we only generate constructors so that Android types w/ no
744749 // default constructor can be subclasses by our generated code.
@@ -760,7 +765,7 @@ void GenerateConstructor (Signature ctor, StreamWriter sw)
760765 sw . WriteLine ( "\t }" ) ;
761766 }
762767
763- void GenerateApplicationConstructor ( StreamWriter sw )
768+ void GenerateApplicationConstructor ( TextWriter sw )
764769 {
765770 if ( ! JniType . IsApplication ( type ) ) {
766771 return ;
@@ -773,15 +778,15 @@ void GenerateApplicationConstructor (StreamWriter sw)
773778 sw . WriteLine ( "\t }" ) ;
774779 }
775780
776- void GenerateExportedField ( JavaFieldInfo field , StreamWriter sw )
781+ void GenerateExportedField ( JavaFieldInfo field , TextWriter sw )
777782 {
778783 sw . WriteLine ( ) ;
779784 if ( field . Annotations != null )
780785 sw . WriteLine ( field . Annotations ) ;
781786 sw . WriteLine ( "\t {0} {1}{2} {3} = {4} ();" , field . GetJavaAccess ( ) , field . IsStatic ? "static " : null , field . TypeName , field . FieldName , field . InitializerName ) ;
782787 }
783788
784- void GenerateMethod ( Signature method , StreamWriter sw )
789+ void GenerateMethod ( Signature method , TextWriter sw )
785790 {
786791 sw . WriteLine ( ) ;
787792 if ( method . Annotations != null )
@@ -798,7 +803,7 @@ void GenerateMethod (Signature method, StreamWriter sw)
798803 sw . WriteLine ( "\t private {0}native {1} n_{2} ({3});" , method . IsStatic ? "static " : null , method . Retval , method . Name , method . Params ) ;
799804 }
800805
801- void WriteApplicationOnCreate ( StreamWriter sw , Action < StreamWriter > extra )
806+ void WriteApplicationOnCreate ( TextWriter sw , Action < TextWriter > extra )
802807 {
803808 sw . WriteLine ( ) ;
804809 sw . WriteLine ( "\t public void onCreate ()" ) ;
@@ -807,7 +812,7 @@ void WriteApplicationOnCreate (StreamWriter sw, Action<StreamWriter> extra)
807812 sw . WriteLine ( "\t }" ) ;
808813 }
809814
810- void WriteInstrumentationOnCreate ( StreamWriter sw , Action < StreamWriter > extra )
815+ void WriteInstrumentationOnCreate ( TextWriter sw , Action < TextWriter > extra )
811816 {
812817 sw . WriteLine ( ) ;
813818 sw . WriteLine ( "\t public void onCreate (android.os.Bundle arguments)" ) ;
0 commit comments