File tree Expand file tree Collapse file tree 4 files changed +12
-8
lines changed
src/Java.Interop/Java.Interop
tests/Java.Interop-Tests/Java.Interop Expand file tree Collapse file tree 4 files changed +12
-8
lines changed Original file line number Diff line number Diff line change @@ -8,7 +8,8 @@ namespace Java.Interop
88 [ JniTypeSignature ( "java/lang/Object" , GenerateJavaPeer = false ) ]
99 unsafe public class JavaObject : IJavaPeerable
1010 {
11- internal const DynamicallyAccessedMemberTypes ConstructorsAndInterfaces = DynamicallyAccessedMemberTypes . PublicConstructors | DynamicallyAccessedMemberTypes . NonPublicConstructors | DynamicallyAccessedMemberTypes . Interfaces ;
11+ internal const DynamicallyAccessedMemberTypes Constructors = DynamicallyAccessedMemberTypes . PublicConstructors | DynamicallyAccessedMemberTypes . NonPublicConstructors ;
12+ internal const DynamicallyAccessedMemberTypes ConstructorsAndInterfaces = Constructors | DynamicallyAccessedMemberTypes . Interfaces ;
1213
1314 readonly static JniPeerMembers _members = new JniPeerMembers ( "java/lang/Object" , typeof ( JavaObject ) ) ;
1415
Original file line number Diff line number Diff line change @@ -24,23 +24,19 @@ public static bool TryJavaCast<
2424 }
2525
2626 public static TResult ? JavaAs <
27- [ DynamicallyAccessedMembers ( JavaObject . ConstructorsAndInterfaces ) ]
27+ [ DynamicallyAccessedMembers ( JavaObject . Constructors ) ]
2828 TResult
2929 > ( this IJavaPeerable ? self )
3030 where TResult : class , IJavaPeerable
3131 {
32- if ( self == null ) {
32+ if ( self == null || ! self . PeerReference . IsValid ) {
3333 return null ;
3434 }
3535
3636 if ( self is TResult result ) {
3737 return result ;
3838 }
3939
40- if ( ! self . PeerReference . IsValid ) {
41- throw new ObjectDisposedException ( self . GetType ( ) . FullName ) ;
42- }
43-
4440 var r = self . PeerReference ;
4541 return JniEnvironment . Runtime . ValueManager . CreatePeer (
4642 ref r , JniObjectReferenceOptions . Copy ,
Original file line number Diff line number Diff line change @@ -18,7 +18,6 @@ namespace Java.Interop {
1818 /* static */ sealed class ManagedPeer : JavaObject {
1919
2020 internal const string JniTypeName = "net/dot/jni/ManagedPeer" ;
21- internal const DynamicallyAccessedMemberTypes Constructors = DynamicallyAccessedMemberTypes . PublicConstructors | DynamicallyAccessedMemberTypes . NonPublicConstructors ;
2221 internal const DynamicallyAccessedMemberTypes ConstructorsMethodsNestedTypes = Constructors | DynamicallyAccessedMemberTypes . PublicMethods | DynamicallyAccessedMemberTypes . NonPublicMethods | DynamicallyAccessedMemberTypes . NonPublicNestedTypes ;
2322
2423
Original file line number Diff line number Diff line change @@ -35,6 +35,13 @@ public void JavaAs_NullSelfReturnsNull ()
3535 Assert . AreEqual ( null , JavaPeerableExtensions . JavaAs < IAndroidInterface > ( null ) ) ;
3636 }
3737
38+ public void JavaAs_InvalidPeerRefReturnsNull ( )
39+ {
40+ var v = new MyJavaInterfaceImpl ( ) ;
41+ v . Dispose ( ) ;
42+ Assert . AreEqual ( null , JavaPeerableExtensions . JavaAs < IJavaInterface > ( v ) ) ;
43+ }
44+
3845 [ Test ]
3946 public void JavaAs_InstanceThatDoesNotImplementInterfaceReturnsNull ( )
4047 {
@@ -83,6 +90,7 @@ public string Value {
8390 }
8491}
8592
93+ [ JniTypeSignature ( IJavaInterface . JniTypeName , GenerateJavaPeer = false ) ]
8694internal class IJavaInterfaceInvoker : JavaObject , IJavaInterface {
8795
8896 internal static readonly JniPeerMembers _members = new JniPeerMembers ( IJavaInterface . JniTypeName , typeof ( IJavaInterfaceInvoker ) ) ;
You can’t perform that action at this time.
0 commit comments