Skip to content

Commit 60334df

Browse files
committed
Address feedback.
If `IJavaPeerable.PeerReference` isn't valid, return null.
1 parent 647a22b commit 60334df

File tree

4 files changed

+12
-8
lines changed

4 files changed

+12
-8
lines changed

src/Java.Interop/Java.Interop/JavaObject.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff 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

src/Java.Interop/Java.Interop/JavaPeerableExtensions.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff 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,

src/Java.Interop/Java.Interop/ManagedPeer.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff 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

tests/Java.Interop-Tests/Java.Interop/JavaPeerableExtensionsTests.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff 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)]
8694
internal class IJavaInterfaceInvoker : JavaObject, IJavaInterface {
8795

8896
internal static readonly JniPeerMembers _members = new JniPeerMembers (IJavaInterface.JniTypeName, typeof (IJavaInterfaceInvoker));

0 commit comments

Comments
 (0)