Skip to content

Commit 54ba3c3

Browse files
authored
[.JavaSource, .ApiXmlAdjuster] Use Nullable Reference Types (#746)
Update `Java.Interop.Tools.JavaSource.dll` and `Xamarin.Android.Tools.ApiXmlAdjuster.dll` so that C# 8 [Nullable Reference Types][0] are used. [0]: https://docs.microsoft.com/dotnet/csharp/nullable-references
1 parent b588ef5 commit 54ba3c3

18 files changed

+302
-219
lines changed

src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
<Project Sdk="Microsoft.NET.Sdk">
33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
5+
<LangVersion>8.0</LangVersion>
6+
<Nullable>enable</Nullable>
7+
<DefineConstants>INTERNAL_NULLABLE_ATTRIBUTES</DefineConstants>
58
<ProjectGuid>{5C0B3562-8DA0-4726-9762-75B9709ED6B7}</ProjectGuid>
69
<AssemblyTitle>Java.Interop.Tools.JavaSource</AssemblyTitle>
710
<Company>Microsoft Corporation</Company>
@@ -11,6 +14,9 @@
1114
<PropertyGroup>
1215
<OutputPath>$(ToolOutputFullPath)</OutputPath>
1316
</PropertyGroup>
17+
<ItemGroup>
18+
<Compile Include="..\utils\NullableAttributes.cs" />
19+
</ItemGroup>
1420
<ItemGroup>
1521
<PackageReference Include="Irony" Version="1.1.0" />
1622
</ItemGroup>

src/Java.Interop.Tools.JavaSource/Java.Interop.Tools.JavaSource/JavaStubParser.cs

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,9 @@ public JavaStubGrammar ()
421421
var packageTokens = s.Split ('.').TakeWhile (t => !t.Any (c => Char.IsUpper (c)));
422422
return s.Substring (Enumerable.Sum (packageTokens.Select (t => t.Length)) + packageTokens.Count ());
423423
};
424-
method.Exceptions = ((IEnumerable<string>)node.ChildNodes [ctor ? 6 : 7].AstNode)?.Select (s => new JavaException { Type = s, Name = stripPackage (s) })?.ToArray ();
424+
method.Exceptions = ((IEnumerable<string>)node.ChildNodes [ctor ? 6 : 7].AstNode)
425+
?.Select (s => new JavaException { Type = s, Name = stripPackage (s) })
426+
?.ToArray ();
425427
method.Deprecated = ((IEnumerable<string>)node.ChildNodes [0].AstNode).Any (v => v == "java.lang.Deprecated" || v == "Deprecated") ? "deprecated" : "not deprecated";
426428
method.Final = mods.Contains ("final");
427429
method.TypeParameters = modsOrTps.OfType<JavaTypeParameters> ().FirstOrDefault ();
@@ -501,7 +503,7 @@ public JavaStubGrammar ()
501503
assignment.AstConfig.NodeCreator = SelectChildValueAt (0);
502504
assign_expr.AstConfig.NodeCreator = (ctx, node) => {
503505
ProcessChildren (ctx, node);
504-
node.AstNode = new KeyValuePair<string, string> ((string)node.ChildNodes [0].AstNode, node.ChildNodes [2].AstNode?.ToString ());
506+
node.AstNode = new KeyValuePair<string, string?> ((string)node.ChildNodes [0].AstNode, node.ChildNodes [2].AstNode?.ToString ());
505507
};
506508
rvalue_expressions.AstConfig.NodeCreator = CreateArrayCreator<object> ();
507509
rvalue_expression.AstConfig.NodeCreator = SelectSingleChild;
@@ -542,7 +544,7 @@ public JavaStubGrammar ()
542544
};
543545
generic_definition_arguments.AstConfig.NodeCreator = (ctx, node) => {
544546
ProcessChildren (ctx, node);
545-
node.AstNode = new JavaTypeParameters ((JavaMethod) null) { TypeParameters = node.ChildNodes.Select (c => c.AstNode).Cast<JavaTypeParameter> ().ToList () };
547+
node.AstNode = new JavaTypeParameters ((JavaMethod?) null) { TypeParameters = node.ChildNodes.Select (c => c.AstNode).Cast<JavaTypeParameter> ().ToList () };
546548
};
547549
generic_definition_argument.AstConfig.NodeCreator = (ctx, node) => {
548550
ProcessChildren (ctx, node);
@@ -557,7 +559,7 @@ public JavaStubGrammar ()
557559
generic_instance_identifier_or_q.AstConfig.NodeCreator = SelectSingleChild;
558560
generic_instance_constraints.AstConfig.NodeCreator = (ctx, node) => {
559561
ProcessChildren (ctx, node);
560-
var c = (JavaGenericConstraints) node.ChildNodes.FirstOrDefault ()?.AstNode;
562+
var c = (JavaGenericConstraints?) node.ChildNodes.FirstOrDefault ()?.AstNode;
561563
if (c != null)
562564
node.AstNode = " " + c.BoundsType + " " + string.Join (" & ", c.GenericConstraints.Select (cc => cc.Type));
563565
};
@@ -602,27 +604,27 @@ public JavaStubParser ()
602604

603605
}
604606

605-
public JavaPackage TryLoad (string uri)
607+
public JavaPackage? TryLoad (string uri)
606608
{
607609
return TryLoad (uri, out var _);
608610
}
609611

610-
public JavaPackage TryLoad (string uri, out ParseTree parseTree)
612+
public JavaPackage? TryLoad (string uri, out ParseTree parseTree)
611613
{
612614
return TryParse (File.ReadAllText (uri), uri, out parseTree);
613615
}
614616

615-
public JavaPackage TryParse (string text)
617+
public JavaPackage? TryParse (string text)
616618
{
617619
return TryParse (text, null, out var _);
618620
}
619621

620-
public JavaPackage TryParse (string text, out ParseTree parseTree)
622+
public JavaPackage? TryParse (string text, out ParseTree parseTree)
621623
{
622624
return TryParse (text, null, out parseTree);
623625
}
624626

625-
public JavaPackage TryParse (string text, string fileName, out ParseTree parseTree)
627+
public JavaPackage? TryParse (string text, string? fileName, out ParseTree parseTree)
626628
{
627629
parseTree = base.Parse (text, fileName);
628630
if (parseTree.HasErrors ())
@@ -634,32 +636,35 @@ public JavaPackage TryParse (string text, string fileName, out ParseTree parseTr
634636

635637
void FlattenNestedTypes (JavaPackage package)
636638
{
637-
Action<List<JavaType>,JavaType> flatten = null;
638-
flatten = (list, t) => {
639+
var results = new List<JavaType> ();
640+
foreach (var t in package.Types)
641+
Flatten (results, t);
642+
package.Types = results.ToList ();
643+
644+
void Flatten (List<JavaType> list, JavaType t)
645+
{
639646
list.Add (t);
640647
foreach (var nt in t.Members.OfType<JavaNestedType> ()) {
648+
if (nt.Type == null)
649+
continue;
641650
nt.Type.Name = t.Name + '.' + nt.Type.Name;
642651
foreach (var nc in nt.Type.Members.OfType<JavaConstructor> ())
643652
nc.Name = nt.Type.Name;
644-
flatten (list, nt.Type);
653+
Flatten (list, nt.Type);
645654
}
646655
t.Members = t.Members.Where (_ => !(_ is JavaNestedType)).ToArray ();
647-
};
648-
var results = new List<JavaType> ();
649-
foreach (var t in package.Types)
650-
flatten (results, t);
651-
package.Types = results.ToList ();
656+
}
652657
}
653658
}
654659

655660
class JavaNestedType : JavaMember
656661
{
657-
public JavaNestedType (JavaType type)
662+
public JavaNestedType (JavaType? type)
658663
: base (type)
659664
{
660665
}
661666

662-
public JavaType Type { get; set; }
667+
public JavaType? Type { get; set; }
663668
}
664669
}
665670

src/Xamarin.Android.Tools.ApiXmlAdjuster/JavaApi.RelationAnalysisModel.cs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,47 +7,48 @@ namespace Xamarin.Android.Tools.ApiXmlAdjuster
77

88
public partial class JavaClass
99
{
10-
public JavaTypeReference ResolvedExtends { get; set; }
10+
public JavaTypeReference? ResolvedExtends { get; set; }
1111
}
1212

1313
public partial class JavaImplements
1414
{
15-
public JavaTypeReference ResolvedName { get; set; }
15+
public JavaTypeReference? ResolvedName { get; set; }
1616
}
1717

1818
public partial class JavaField
1919
{
20-
public JavaTypeReference ResolvedType { get; set; }
20+
public JavaTypeReference? ResolvedType { get; set; }
2121
}
2222

2323
public partial class JavaMethod
2424
{
25-
public JavaTypeReference ResolvedReturnType { get; set; }
25+
public JavaTypeReference? ResolvedReturnType { get; set; }
2626
}
2727

2828
public partial class JavaParameter
2929
{
30-
public JavaTypeReference ResolvedType { get; set; }
30+
public JavaTypeReference? ResolvedType { get; set; }
3131
}
3232

3333
public partial class JavaGenericConstraint
3434
{
35-
public JavaTypeReference ResolvedType { get; set; }
35+
public JavaTypeReference? ResolvedType { get; set; }
3636
}
3737

3838
// GenericInheritanceMapper extensibility
3939

4040
public partial class JavaClass
4141
{
42-
public IDictionary<JavaTypeReference,JavaTypeReference> GenericInheritanceMapping { get; set; }
42+
public IDictionary<JavaTypeReference,JavaTypeReference>?
43+
GenericInheritanceMapping { get; set; }
4344
}
4445

4546
// OverrideMarker extensibility
4647

4748
public partial class JavaMethod
4849
{
49-
public JavaMethodReference BaseMethod { get; set; }
50-
public IList<JavaInterface> ImplementedInterfaces { get; set; }
50+
public JavaMethodReference? BaseMethod { get; set; }
51+
public IList<JavaInterface>? ImplementedInterfaces { get; set; }
5152
}
5253

5354
public partial class JavaMethodReference
@@ -57,12 +58,12 @@ public JavaMethodReference (JavaMethod candidate)
5758
this.Method = candidate;
5859
}
5960

60-
public JavaMethod Method { get; set; }
61+
public JavaMethod? Method { get; set; }
6162
}
6263

6364
public partial class JavaParameter
6465
{
65-
public string InstantiatedGenericArgumentName { get; set; }
66+
public string? InstantiatedGenericArgumentName { get; set; }
6667
}
6768
}
6869

0 commit comments

Comments
 (0)