Skip to content

Commit 3c94f6f

Browse files
authored
[Mono.Android] Hide "internal" members of JLO from IDEs (#4583)
Fixes: #4582 `Java.Lang.Object` and `Java.Lang.Throwable` contain various `public` and `protected` members that are required by our bindings, such as the `Handle` and `PeerReference` properties. We cannot make them `internal` because our bindings need them, but we can make them "invisible" to users using IDEs by applying the attributes: * [`[EditorBrowsable (EditorBrowsableState.Never)]`][0] * [`[DebuggerBrowsable (DebuggerBrowsableState.Never)]`][1] This will prevent them from showing up in IntelliSense and debugger displays, as they should not be used by users. Note they are still usable if needed, they simply do not show up in IntelliSense. You have to type them out manually. Intellisense for a class deriving JLO before: ![before](https://user-images.githubusercontent.com/179295/79778416-4fc78000-82fe-11ea-840a-fb0b4688d6aa.png) After: ![after](https://user-images.githubusercontent.com/179295/79778430-535b0700-82fe-11ea-9ff6-d6e41eabcf9a.png) [0]: https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.editorbrowsableattribute [1]: https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.debuggerbrowsableattribute
1 parent fcdf728 commit 3c94f6f

File tree

4 files changed

+45
-0
lines changed

4 files changed

+45
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
### Tidier IntelliSense suggestions for Java.Lang.Object subclasses
2+
3+
`Java.Lang.Object` contains several properties and methods that are
4+
required to be `public` to support bindings, but are not intended
5+
to be called by users. Use `[EditorBrowser]` to hide them from
6+
IntelliSense, making it easier to find useful members.
7+
8+
[IntelliSense cleanup)[images/4583.png]
9+
10+
### Issues fixed
11+
12+
#### IDE compatibility
13+
14+
* [GitHub 4582](https://github.com/xamarin/xamarin-android/issues/4582):
15+
Some `Java.Lang.Object` properties and methods like `Handle` and
16+
`PeerReference` appeared in IntelliSense suggestions even though they were
17+
primarily intended for use only in generated code.
8.4 KB
Loading

src/Mono.Android/Java.Lang/Object.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
using Java.Interop;
77

88
using Android.Runtime;
9+
using System.ComponentModel;
10+
using System.Diagnostics;
911

1012
namespace Java.Lang {
1113

@@ -91,21 +93,27 @@ internal void SetHandleOnDeserialized (StreamingContext context)
9193
}
9294

9395
#if JAVA_INTEROP
96+
[EditorBrowsable (EditorBrowsableState.Never)]
9497
public int JniIdentityHashCode {
9598
get {return (int) key_handle;}
9699
}
97100

101+
[DebuggerBrowsable (DebuggerBrowsableState.Never)]
102+
[EditorBrowsable (EditorBrowsableState.Never)]
98103
public JniObjectReference PeerReference {
99104
get {
100105
return new JniObjectReference (handle, (JniObjectReferenceType) handle_type);
101106
}
102107
}
103108

109+
[DebuggerBrowsable (DebuggerBrowsableState.Never)]
110+
[EditorBrowsable (EditorBrowsableState.Never)]
104111
public virtual JniPeerMembers JniPeerMembers {
105112
get { return _members; }
106113
}
107114
#endif // JAVA_INTEROP
108115

116+
[EditorBrowsable (EditorBrowsableState.Never)]
109117
public IntPtr Handle {
110118
get {
111119
if (weak_handle != IntPtr.Zero)
@@ -115,10 +123,14 @@ public IntPtr Handle {
115123
}
116124
}
117125

126+
[DebuggerBrowsable (DebuggerBrowsableState.Never)]
127+
[EditorBrowsable (EditorBrowsableState.Never)]
118128
protected virtual IntPtr ThresholdClass {
119129
get { return Class.Object; }
120130
}
121131

132+
[DebuggerBrowsable (DebuggerBrowsableState.Never)]
133+
[EditorBrowsable (EditorBrowsableState.Never)]
122134
protected virtual System.Type ThresholdType {
123135
get { return typeof (Java.Lang.Object); }
124136
}
@@ -154,6 +166,7 @@ void IJavaPeerable.DisposeUnlessReferenced ()
154166
}
155167
}
156168

169+
[EditorBrowsable (EditorBrowsableState.Never)]
157170
public void UnregisterFromRuntime ()
158171
{
159172
JNIEnv.AndroidValueManager.RemovePeer (this, key_handle);
@@ -231,6 +244,7 @@ internal static void Dispose (IJavaPeerable instance, ref IntPtr handle, IntPtr
231244
}
232245
}
233246

247+
[EditorBrowsable (EditorBrowsableState.Never)]
234248
protected void SetHandle (IntPtr value, JniHandleOwnership transfer)
235249
{
236250
JNIEnv.AndroidValueManager.AddPeer (this, value, transfer, out handle);
@@ -287,6 +301,7 @@ internal static IJavaPeerable GetObject (IntPtr handle, JniHandleOwnership trans
287301
return Java.Interop.TypeManager.CreateInstance (handle, transfer, type);
288302
}
289303

304+
[EditorBrowsable (EditorBrowsableState.Never)]
290305
public T[] ToArray<T>()
291306
{
292307
return JNIEnv.GetArray<T>(Handle);

src/Mono.Android/Java.Lang/Throwable.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
using Java.Interop;
55

66
using Android.Runtime;
7+
using System.ComponentModel;
8+
using System.Diagnostics;
79

810
namespace Java.Lang {
911

@@ -171,27 +173,37 @@ public override string ToString ()
171173
}
172174

173175
#if JAVA_INTEROP
176+
[EditorBrowsable (EditorBrowsableState.Never)]
174177
public int JniIdentityHashCode {
175178
get {return (int) key_handle;}
176179
}
177180

181+
[DebuggerBrowsable (DebuggerBrowsableState.Never)]
182+
[EditorBrowsable (EditorBrowsableState.Never)]
178183
public JniObjectReference PeerReference {
179184
get {
180185
return new JniObjectReference (handle, (JniObjectReferenceType) handle_type);
181186
}
182187
}
183188

189+
[DebuggerBrowsable (DebuggerBrowsableState.Never)]
190+
[EditorBrowsable (EditorBrowsableState.Never)]
184191
public virtual JniPeerMembers JniPeerMembers {
185192
get { return _members; }
186193
}
187194
#endif // JAVA_INTEROP
188195

196+
[EditorBrowsable (EditorBrowsableState.Never)]
189197
public IntPtr Handle { get { return handle; } }
190198

199+
[DebuggerBrowsable (DebuggerBrowsableState.Never)]
200+
[EditorBrowsable (EditorBrowsableState.Never)]
191201
protected virtual IntPtr ThresholdClass {
192202
get { return class_ref; }
193203
}
194204

205+
[DebuggerBrowsable (DebuggerBrowsableState.Never)]
206+
[EditorBrowsable (EditorBrowsableState.Never)]
195207
protected virtual System.Type ThresholdType {
196208
get { return typeof (Java.Lang.Throwable); }
197209
}
@@ -226,6 +238,7 @@ public unsafe Java.Lang.Class Class {
226238
}
227239
}
228240

241+
[EditorBrowsable (EditorBrowsableState.Never)]
229242
protected void SetHandle (IntPtr value, JniHandleOwnership transfer)
230243
{
231244
JNIEnv.AndroidValueManager.AddPeer (this, value, transfer, out handle);

0 commit comments

Comments
 (0)