Skip to content

Commit 8ea5901

Browse files
committed
[Java.Interop.Tools.JavaTypeSystem] Add 'annotated-visibility' for types.
1 parent 07d5595 commit 8ea5901

File tree

10 files changed

+63
-20
lines changed

10 files changed

+63
-20
lines changed

src/Java.Interop.Tools.JavaTypeSystem/Adapters/JavaXmlApiExporter.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,15 @@ public static void Save (JavaTypeCollection types, XmlWriter writer)
5858
static void SaveType (JavaTypeModel type, XmlWriter writer)
5959
{
6060
if (type is JavaClassModel cls)
61-
SaveType (type, writer, "class", XmlConvert.ToString (cls.IsAbstract), cls.BaseType, cls.BaseTypeGeneric, cls.BaseTypeJni);
61+
SaveType (type, writer, "class", XmlConvert.ToString (cls.IsAbstract), cls.BaseType, cls.BaseTypeGeneric, cls.BaseTypeJni, cls.AnnotatedVisibility);
6262
else
63-
SaveType (type, writer, "interface", "true", null, null, null);
63+
SaveType (type, writer, "interface", "true", null, null, null, type.AnnotatedVisibility);
6464

6565
foreach (var nested in type.NestedTypes)
6666
SaveType (nested, writer);
6767
}
6868

69-
static void SaveType (JavaTypeModel cls, XmlWriter writer, string elementName, string abs, string? ext, string? extgen, string? jniExt)
69+
static void SaveType (JavaTypeModel cls, XmlWriter writer, string elementName, string abs, string? ext, string? extgen, string? jniExt, string annotatedVisibility)
7070
{
7171
writer.WriteStartElement (elementName);
7272

@@ -80,6 +80,7 @@ static void SaveType (JavaTypeModel cls, XmlWriter writer, string elementName, s
8080
writer.WriteAttributeString ("static", XmlConvert.ToString (cls.IsStatic));
8181
writer.WriteAttributeString ("visibility", cls.Visibility);
8282
writer.WriteAttributeStringIfValue ("jni-signature", cls.ExtendedJniSignature);
83+
writer.WriteAttributeStringIfValue ("annotated-visibility", annotatedVisibility);
8384

8485
if (cls.PropertyBag.TryGetValue ("merge.SourceFile", out var source))
8586
writer.WriteAttributeString ("merge.SourceFile", source);

src/Java.Interop.Tools.JavaTypeSystem/Adapters/JavaXmlApiImporter.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ public static JavaClassModel ParseClass (JavaPackage package, XElement element)
113113
javaDeprecated: element.XGetAttribute ("deprecated"),
114114
javaStatic: element.XGetAttributeAsBool ("static"),
115115
jniSignature: element.XGetAttribute ("jni-signature"),
116-
baseTypeJni: element.XGetAttribute ("jni-extends")
116+
baseTypeJni: element.XGetAttribute ("jni-extends"),
117+
annotatedVisibility: element.XGetAttribute ("annotated-visibility")
117118
);
118119

119120
if (element.XGetAttribute ("merge.SourceFile") is string source && source.HasValue ())
@@ -151,8 +152,9 @@ public static JavaInterfaceModel ParseInterface (JavaPackage package, XElement e
151152
var deprecated = element.XGetAttribute ("deprecated");
152153
var is_static = element.XGetAttribute ("static") == "true";
153154
var jni_signature = element.XGetAttribute ("jni-signature");
155+
var annotated_visibility = element.XGetAttribute ("annotated-visibility");
154156

155-
var model = new JavaInterfaceModel (package, nested_name, visibility, deprecated, is_static, jni_signature);
157+
var model = new JavaInterfaceModel (package, nested_name, visibility, deprecated, is_static, jni_signature, annotated_visibility);
156158

157159
if (element.XGetAttribute ("merge.SourceFile") is string source && source.HasValue ())
158160
model.PropertyBag.Add ("merge.SourceFile", source);

src/Java.Interop.Tools.JavaTypeSystem/Adapters/ManagedApiImporter.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,8 @@ static bool ShouldImport (TypeDefinition td)
114114
javaDeprecated: obs_attr != null ? "deprecated" : "not-deprecated",
115115
javaStatic: false,
116116
jniSignature: FormatJniSignature (package, nested_name),
117-
baseTypeJni: base_jni.HasValue () ? $"L{base_jni};" : string.Empty
117+
baseTypeJni: base_jni.HasValue () ? $"L{base_jni};" : string.Empty,
118+
annotatedVisibility: string.Empty
118119
); ;
119120

120121
ParseImplementedInterfaces (type, model);
@@ -144,7 +145,8 @@ static bool ShouldImport (TypeDefinition td)
144145
javaVisibility: type.IsPublic || type.IsNestedPublic ? "public" : "protected internal",
145146
javaDeprecated: obs_attr != null ? "deprecated" : "not-deprecated",
146147
javaStatic: false,
147-
jniSignature: FormatJniSignature (package, nested_name)
148+
jniSignature: FormatJniSignature (package, nested_name),
149+
annotatedVisibility: ""
148150
);
149151

150152
ParseImplementedInterfaces (type, model);

src/Java.Interop.Tools.JavaTypeSystem/JavaModels/JavaBuiltInType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Java.Interop.Tools.JavaTypeSystem.Models
66
// Represents a Java built-in type like 'int' or 'float'
77
public class JavaBuiltInType : JavaTypeModel
88
{
9-
public JavaBuiltInType (string name) : base (new JavaPackage ("", "", null), name, "public", false, true, "not deprecated", false, "") { }
9+
public JavaBuiltInType (string name) : base (new JavaPackage ("", "", null), name, "public", false, true, "not deprecated", false, "", "") { }
1010

1111
public override void Resolve (JavaTypeCollection types, ICollection<JavaUnresolvableModel> unresolvables)
1212
{

src/Java.Interop.Tools.JavaTypeSystem/JavaModels/JavaClassModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ public class JavaClassModel : JavaTypeModel
1515
public JavaTypeReference? BaseTypeReference { get; private set; }
1616
public List<JavaConstructorModel> Constructors { get; } = new List<JavaConstructorModel> ();
1717

18-
public JavaClassModel (JavaPackage javaPackage, string javaNestedName, string javaVisibility, bool javaAbstract, bool javaFinal, string javaBaseType, string javaBaseTypeGeneric, string javaDeprecated, bool javaStatic, string jniSignature, string baseTypeJni) :
19-
base (javaPackage, javaNestedName, javaVisibility, javaAbstract, javaFinal, javaDeprecated, javaStatic, jniSignature)
18+
public JavaClassModel (JavaPackage javaPackage, string javaNestedName, string javaVisibility, bool javaAbstract, bool javaFinal, string javaBaseType, string javaBaseTypeGeneric, string javaDeprecated, bool javaStatic, string jniSignature, string baseTypeJni, string annotatedVisibility) :
19+
base (javaPackage, javaNestedName, javaVisibility, javaAbstract, javaFinal, javaDeprecated, javaStatic, jniSignature, annotatedVisibility)
2020
{
2121
BaseType = javaBaseType;
2222
BaseTypeGeneric = javaBaseTypeGeneric;

src/Java.Interop.Tools.JavaTypeSystem/JavaModels/JavaInterfaceModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ namespace Java.Interop.Tools.JavaTypeSystem.Models
44
{
55
public class JavaInterfaceModel : JavaTypeModel
66
{
7-
public JavaInterfaceModel (JavaPackage javaPackage, string javaNestedName, string javaVisibility, string javaDeprecated, bool javaStatic, string jniSignature) :
8-
base (javaPackage, javaNestedName, javaVisibility, false, false, javaDeprecated, javaStatic, jniSignature)
7+
public JavaInterfaceModel (JavaPackage javaPackage, string javaNestedName, string javaVisibility, string javaDeprecated, bool javaStatic, string jniSignature, string annotatedVisibility) :
8+
base (javaPackage, javaNestedName, javaVisibility, false, false, javaDeprecated, javaStatic, jniSignature, annotatedVisibility)
99
{
1010
}
1111

src/Java.Interop.Tools.JavaTypeSystem/JavaModels/JavaTypeModel.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public abstract class JavaTypeModel : IJavaResolvable
1717
public string NestedName { get; set; }
1818

1919
public string Visibility { get; }
20+
public string AnnotatedVisibility { get; }
2021
public bool IsAbstract { get; }
2122
public bool IsFinal { get; }
2223
public string Deprecated { get; }
@@ -36,12 +37,13 @@ public abstract class JavaTypeModel : IJavaResolvable
3637

3738
public Dictionary<string, string> PropertyBag { get; } = new Dictionary<string, string> ();
3839

39-
protected JavaTypeModel (JavaPackage javaPackage, string javaNestedName, string javaVisibility, bool javaAbstract, bool javaFinal, string deprecated, bool javaStatic, string jniSignature)
40+
protected JavaTypeModel (JavaPackage javaPackage, string javaNestedName, string javaVisibility, bool javaAbstract, bool javaFinal, string deprecated, bool javaStatic, string jniSignature, string annotatedVisibility)
4041
{
4142
Package = javaPackage;
4243
NestedName = javaNestedName.Replace ('$', '.');
4344
Name = NestedName.LastSubset ('.');
4445
Visibility = javaVisibility;
46+
AnnotatedVisibility = annotatedVisibility;
4547
IsAbstract = javaAbstract;
4648
IsFinal = javaFinal;
4749
Deprecated = deprecated;

tests/Java.Interop.Tools.JavaTypeSystem-Tests/JavaApiTestHelper.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public static JavaTypeCollection GetLoadedApi ()
1414
return JavaXmlApiImporter.Parse (ApiPath);
1515
}
1616

17-
public static JavaClassModel CreateClass (JavaPackage javaPackage, string javaNestedName, string javaVisibility = "public", bool javaAbstract = false, bool javaFinal = false, string javaBaseType = "java.lang.Object", string javaBaseTypeGeneric = "java.lang.Object", string javaDeprecated = "not deprecated", bool javaStatic = false, string jniSignature = "", string baseTypeJni = "java/lang/Object")
17+
public static JavaClassModel CreateClass (JavaPackage javaPackage, string javaNestedName, string javaVisibility = "public", bool javaAbstract = false, bool javaFinal = false, string javaBaseType = "java.lang.Object", string javaBaseTypeGeneric = "java.lang.Object", string javaDeprecated = "not deprecated", bool javaStatic = false, string jniSignature = "", string baseTypeJni = "java/lang/Object", string annotatedVisibility = "")
1818
{
1919
if (string.IsNullOrWhiteSpace (jniSignature))
2020
jniSignature = $"{(!string.IsNullOrWhiteSpace (javaPackage.Name) ? javaPackage.Name + "." : "")}{javaNestedName}".Replace ('.', '/');
@@ -30,7 +30,8 @@ public static JavaClassModel CreateClass (JavaPackage javaPackage, string javaNe
3030
javaDeprecated: javaDeprecated,
3131
javaStatic: javaStatic,
3232
jniSignature: jniSignature,
33-
baseTypeJni: baseTypeJni
33+
baseTypeJni: baseTypeJni,
34+
annotatedVisibility: annotatedVisibility
3435
);
3536

3637
return klass;

tests/Java.Interop.Tools.JavaTypeSystem-Tests/JavaTypeModelsTests.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System;
2+
using System.IO;
23
using System.Linq;
4+
using System.Xml;
35
using Java.Interop.Tools.JavaTypeSystem.Models;
46
using NUnit.Framework;
57

@@ -25,5 +27,33 @@ public void TestToString ()
2527
var kls = pkg.Types.First (t => t.FullName == "android.database.ContentObservable");
2628
Assert.AreEqual ("[Class] android.database.ContentObservable", kls.ToString ());
2729
}
30+
31+
[Test]
32+
public void AnnotatedVisibility ()
33+
{
34+
// Ensure the 'annotated-visibility' attribute gets passed through
35+
using var sw = new StringWriter ();
36+
37+
using (var xml = XmlWriter.Create (sw))
38+
JavaXmlApiExporter.Save (api, xml);
39+
40+
var doc = new XmlDocument ();
41+
doc.LoadXml (sw.ToString ());
42+
43+
var annotated_class = doc.SelectSingleNode ("/api/package/class[@name='StateListAnimator']");
44+
Assert.AreEqual ("TESTS", annotated_class.Attributes ["annotated-visibility"].InnerText);
45+
46+
var annotated_ctor = annotated_class ["constructor"];
47+
Assert.AreEqual ("TESTS", annotated_ctor.Attributes ["annotated-visibility"].InnerText);
48+
49+
var annotated_method = annotated_class ["method"];
50+
Assert.AreEqual ("TESTS", annotated_method.Attributes ["annotated-visibility"].InnerText);
51+
52+
var annotated_interface = doc.SelectSingleNode ("/api/package/interface[@name='DrmStore.ConstraintsColumns']");
53+
Assert.AreEqual ("TESTS", annotated_interface.Attributes ["annotated-visibility"].InnerText);
54+
55+
var annotated_field = annotated_interface ["field"];
56+
Assert.AreEqual ("TESTS", annotated_field.Attributes ["annotated-visibility"].InnerText);
57+
}
2858
}
2959
}

tests/Java.Interop.Tools.JavaTypeSystem-Tests/api-24.xml.in

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43190,7 +43190,8 @@
4319043190
name="StateListAnimator"
4319143191
jni-signature="Landroid/animation/StateListAnimator;"
4319243192
static="false"
43193-
visibility="public">
43193+
visibility="public"
43194+
annotated-visibility="TESTS">
4319443195
<implements
4319543196
name="java.lang.Cloneable"
4319643197
name-generic-aware="java.lang.Cloneable"
@@ -43203,7 +43204,8 @@
4320343204
visibility="public"
4320443205
bridge="false"
4320543206
synthetic="false"
43206-
jni-signature="()V" />
43207+
jni-signature="()V"
43208+
annotated-visibility="TESTS" />
4320743209
<method
4320843210
abstract="false"
4320943211
deprecated="not deprecated"
@@ -43217,7 +43219,8 @@
4321743219
visibility="public"
4321843220
bridge="false"
4321943221
synthetic="false"
43220-
jni-signature="([ILandroid/animation/Animator;)V">
43222+
jni-signature="([ILandroid/animation/Animator;)V"
43223+
annotated-visibility="TESTS">
4322143224
<parameter
4322243225
name="specs"
4322343226
type="int[]"
@@ -167236,7 +167239,8 @@
167236167239
name="DrmStore.ConstraintsColumns"
167237167240
jni-signature="Landroid/drm/DrmStore$ConstraintsColumns;"
167238167241
static="true"
167239-
visibility="public">
167242+
visibility="public"
167243+
annotated-visibility="TESTS">
167240167244
<field
167241167245
deprecated="not deprecated"
167242167246
final="true"
@@ -167249,7 +167253,8 @@
167249167253
jni-signature="Ljava/lang/String;"
167250167254
value="&quot;extended_metadata&quot;"
167251167255
visibility="public"
167252-
volatile="false" />
167256+
volatile="false"
167257+
annotated-visibility="TESTS" />
167253167258
<field
167254167259
deprecated="not deprecated"
167255167260
final="true"

0 commit comments

Comments
 (0)