@@ -99,6 +99,102 @@ public void WriteKotlinUnsignedArrayTypePropertiesClass ()
9999
100100 Assert . AreEqual ( GetTargetedExpected ( nameof ( WriteKotlinUnsignedArrayTypePropertiesClass ) ) , writer . ToString ( ) . NormalizeLineEndings ( ) ) ;
101101 }
102+
103+ [ Test ]
104+ public void ManagedOverrideMethod_Virtual ( )
105+ {
106+ var xml = @"<api>
107+ <package name='java.lang' jni-name='java/lang'>
108+ <class abstract='false' deprecated='not deprecated' final='false' name='Object' static='false' visibility='public' jni-signature='Ljava/lang/Object;' />
109+ </package>
110+ <package name='com.xamarin.android' jni-name='com/xamarin/android'>
111+ <class abstract='false' deprecated='not deprecated' extends='java.lang.Object' extends-generic-aware='java.lang.Object' jni-extends='Ljava/lang/Object;' final='false' name='MyClass' static='false' visibility='public' jni-signature='Lcom/xamarin/android/MyClass;'>
112+ <method abstract='false' deprecated='not deprecated' final='true' name='DoStuff' jni-signature='()I' bridge='false' native='false' return='int' jni-return='I' static='false' synchronized='false' synthetic='false' visibility='public' managedOverride='virtual'></method>
113+ </class>
114+ </package>
115+ </api>" ;
116+
117+ var gens = ParseApiDefinition ( xml ) ;
118+ var klass = gens . Single ( g => g . Name == "MyClass" ) ;
119+
120+ generator . Context . ContextTypes . Push ( klass ) ;
121+ generator . WriteType ( klass , string . Empty , new GenerationInfo ( "" , "" , "MyAssembly" ) ) ;
122+ generator . Context . ContextTypes . Pop ( ) ;
123+
124+ Assert . True ( writer . ToString ( ) . Contains ( "public virtual unsafe int DoStuff ()" ) ) ;
125+ }
126+
127+ [ Test ]
128+ public void ManagedOverrideMethod_Override ( )
129+ {
130+ var xml = @"<api>
131+ <package name='java.lang' jni-name='java/lang'>
132+ <class abstract='false' deprecated='not deprecated' final='false' name='Object' static='false' visibility='public' jni-signature='Ljava/lang/Object;' />
133+ </package>
134+ <package name='com.xamarin.android' jni-name='com/xamarin/android'>
135+ <class abstract='false' deprecated='not deprecated' extends='java.lang.Object' extends-generic-aware='java.lang.Object' jni-extends='Ljava/lang/Object;' final='false' name='MyClass' static='false' visibility='public' jni-signature='Lcom/xamarin/android/MyClass;'>
136+ <method abstract='false' deprecated='not deprecated' final='true' name='DoStuff' jni-signature='()I' bridge='false' native='false' return='int' jni-return='I' static='false' synchronized='false' synthetic='false' visibility='public' managedOverride='override'></method>
137+ </class>
138+ </package>
139+ </api>" ;
140+
141+ var gens = ParseApiDefinition ( xml ) ;
142+ var klass = gens . Single ( g => g . Name == "MyClass" ) ;
143+
144+ generator . Context . ContextTypes . Push ( klass ) ;
145+ generator . WriteType ( klass , string . Empty , new GenerationInfo ( "" , "" , "MyAssembly" ) ) ;
146+ generator . Context . ContextTypes . Pop ( ) ;
147+
148+ Assert . True ( writer . ToString ( ) . Contains ( "public override unsafe int DoStuff ()" ) ) ;
149+ }
150+
151+ [ Test ]
152+ public void ManagedOverrideProperty_Virtual ( )
153+ {
154+ var xml = @"<api>
155+ <package name='java.lang' jni-name='java/lang'>
156+ <class abstract='false' deprecated='not deprecated' final='false' name='Object' static='false' visibility='public' jni-signature='Ljava/lang/Object;' />
157+ </package>
158+ <package name='com.xamarin.android' jni-name='com/xamarin/android'>
159+ <class abstract='false' deprecated='not deprecated' extends='java.lang.Object' extends-generic-aware='java.lang.Object' jni-extends='Ljava/lang/Object;' final='false' name='MyClass' static='false' visibility='public' jni-signature='Lcom/xamarin/android/MyClass;'>
160+ <method abstract='false' deprecated='not deprecated' final='true' name='getName' jni-signature='()I' bridge='false' native='false' return='int' jni-return='I' static='false' synchronized='false' synthetic='false' visibility='public' managedOverride='virtual'></method>
161+ </class>
162+ </package>
163+ </api>" ;
164+
165+ var gens = ParseApiDefinition ( xml ) ;
166+ var klass = gens . Single ( g => g . Name == "MyClass" ) ;
167+
168+ generator . Context . ContextTypes . Push ( klass ) ;
169+ generator . WriteType ( klass , string . Empty , new GenerationInfo ( "" , "" , "MyAssembly" ) ) ;
170+ generator . Context . ContextTypes . Pop ( ) ;
171+
172+ Assert . True ( writer . ToString ( ) . Contains ( "public virtual unsafe int Name {" ) ) ;
173+ }
174+
175+ [ Test ]
176+ public void ManagedOverrideProperty_Override ( )
177+ {
178+ var xml = @"<api>
179+ <package name='java.lang' jni-name='java/lang'>
180+ <class abstract='false' deprecated='not deprecated' final='false' name='Object' static='false' visibility='public' jni-signature='Ljava/lang/Object;' />
181+ </package>
182+ <package name='com.xamarin.android' jni-name='com/xamarin/android'>
183+ <class abstract='false' deprecated='not deprecated' extends='java.lang.Object' extends-generic-aware='java.lang.Object' jni-extends='Ljava/lang/Object;' final='false' name='MyClass' static='false' visibility='public' jni-signature='Lcom/xamarin/android/MyClass;'>
184+ <method abstract='false' deprecated='not deprecated' final='true' name='getName' jni-signature='()I' bridge='false' native='false' return='int' jni-return='I' static='false' synchronized='false' synthetic='false' visibility='public' managedOverride='override'></method>
185+ </class>
186+ </package>
187+ </api>" ;
188+
189+ var gens = ParseApiDefinition ( xml ) ;
190+ var klass = gens . Single ( g => g . Name == "MyClass" ) ;
191+
192+ generator . Context . ContextTypes . Push ( klass ) ;
193+ generator . WriteType ( klass , string . Empty , new GenerationInfo ( "" , "" , "MyAssembly" ) ) ;
194+ generator . Context . ContextTypes . Pop ( ) ;
195+
196+ Assert . True ( writer . ToString ( ) . Contains ( "public override unsafe int Name {" ) ) ;
197+ }
102198 }
103199
104200 [ TestFixture ]
0 commit comments