Skip to content
This repository was archived by the owner on Jul 6, 2026. It is now read-only.

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

Lines changed: 302 additions & 219 deletions

‎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
<ProjectSdk="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+
<CompileInclude="..\utils\NullableAttributes.cs" />
19+
</ItemGroup>
1420
<ItemGroup>
1521
<PackageReferenceInclude="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
varpackageTokens=s.Split('.').TakeWhile(t =>!t.Any(c =>Char.IsUpper(c)));
422422
returns.Substring(Enumerable.Sum(packageTokens.Select(t =>t.Length))+packageTokens.Count());
423423
};
424-
method.Exceptions=((IEnumerable<string>)node.ChildNodes[ctor?6:7].AstNode)?.Select(s =>newJavaException{Type=s,Name=stripPackage(s)})?.ToArray();
424+
method.Exceptions=((IEnumerable<string>)node.ChildNodes[ctor?6:7].AstNode)
425+
?.Select(s =>newJavaException{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=newKeyValuePair<string,string>((string)node.ChildNodes[0].AstNode,node.ChildNodes[2].AstNode?.ToString());
506+
node.AstNode=newKeyValuePair<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=newJavaTypeParameters((JavaMethod)null){TypeParameters=node.ChildNodes.Select(c =>c.AstNode).Cast<JavaTypeParameter>().ToList()};
547+
node.AstNode=newJavaTypeParameters((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-
varc=(JavaGenericConstraints)node.ChildNodes.FirstOrDefault()?.AstNode;
562+
varc=(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-
publicJavaPackageTryLoad(stringuri)
607+
publicJavaPackage?TryLoad(stringuri)
606608
{
607609
returnTryLoad(uri,outvar_);
608610
}
609611

610-
publicJavaPackageTryLoad(stringuri,outParseTreeparseTree)
612+
publicJavaPackage?TryLoad(stringuri,outParseTreeparseTree)
611613
{
612614
returnTryParse(File.ReadAllText(uri),uri,outparseTree);
613615
}
614616

615-
publicJavaPackageTryParse(stringtext)
617+
publicJavaPackage?TryParse(stringtext)
616618
{
617619
returnTryParse(text,null,outvar_);
618620
}
619621

620-
publicJavaPackageTryParse(stringtext,outParseTreeparseTree)
622+
publicJavaPackage?TryParse(stringtext,outParseTreeparseTree)
621623
{
622624
returnTryParse(text,null,outparseTree);
623625
}
624626

625-
publicJavaPackageTryParse(stringtext,stringfileName,outParseTreeparseTree)
627+
publicJavaPackage?TryParse(stringtext,string?fileName,outParseTreeparseTree)
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
voidFlattenNestedTypes(JavaPackagepackage)
636638
{
637-
Action<List<JavaType>,JavaType>flatten=null;
638-
flatten=(list,t)=>{
639+
varresults=newList<JavaType>();
640+
foreach(vartinpackage.Types)
641+
Flatten(results,t);
642+
package.Types=results.ToList();
643+
644+
voidFlatten(List<JavaType>list,JavaTypet)
645+
{
639646
list.Add(t);
640647
foreach(varntint.Members.OfType<JavaNestedType>()){
648+
if(nt.Type==null)
649+
continue;
641650
nt.Type.Name=t.Name+'.'+nt.Type.Name;
642651
foreach(varncinnt.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(_ =>!(_isJavaNestedType)).ToArray();
647-
};
648-
varresults=newList<JavaType>();
649-
foreach(vartinpackage.Types)
650-
flatten(results,t);
651-
package.Types=results.ToList();
656+
}
652657
}
653658
}
654659

655660
classJavaNestedType:JavaMember
656661
{
657-
publicJavaNestedType(JavaTypetype)
662+
publicJavaNestedType(JavaType?type)
658663
:base(type)
659664
{
660665
}
661666

662-
publicJavaTypeType{get;set;}
667+
publicJavaType?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
publicpartialclassJavaClass
99
{
10-
publicJavaTypeReferenceResolvedExtends{get;set;}
10+
publicJavaTypeReference?ResolvedExtends{get;set;}
1111
}
1212

1313
publicpartialclassJavaImplements
1414
{
15-
publicJavaTypeReferenceResolvedName{get;set;}
15+
publicJavaTypeReference?ResolvedName{get;set;}
1616
}
1717

1818
publicpartialclassJavaField
1919
{
20-
publicJavaTypeReferenceResolvedType{get;set;}
20+
publicJavaTypeReference?ResolvedType{get;set;}
2121
}
2222

2323
publicpartialclassJavaMethod
2424
{
25-
publicJavaTypeReferenceResolvedReturnType{get;set;}
25+
publicJavaTypeReference?ResolvedReturnType{get;set;}
2626
}
2727

2828
publicpartialclassJavaParameter
2929
{
30-
publicJavaTypeReferenceResolvedType{get;set;}
30+
publicJavaTypeReference?ResolvedType{get;set;}
3131
}
3232

3333
publicpartialclassJavaGenericConstraint
3434
{
35-
publicJavaTypeReferenceResolvedType{get;set;}
35+
publicJavaTypeReference?ResolvedType{get;set;}
3636
}
3737

3838
// GenericInheritanceMapper extensibility
3939

4040
publicpartialclassJavaClass
4141
{
42-
publicIDictionary<JavaTypeReference,JavaTypeReference>GenericInheritanceMapping{get;set;}
42+
publicIDictionary<JavaTypeReference,JavaTypeReference>?
43+
GenericInheritanceMapping{get;set;}
4344
}
4445

4546
// OverrideMarker extensibility
4647

4748
publicpartialclassJavaMethod
4849
{
49-
publicJavaMethodReferenceBaseMethod{get;set;}
50-
publicIList<JavaInterface>ImplementedInterfaces{get;set;}
50+
publicJavaMethodReference?BaseMethod{get;set;}
51+
publicIList<JavaInterface>?ImplementedInterfaces{get;set;}
5152
}
5253

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

60-
publicJavaMethodMethod{get;set;}
61+
publicJavaMethod?Method{get;set;}
6162
}
6263

6364
publicpartialclassJavaParameter
6465
{
65-
publicstringInstantiatedGenericArgumentName{get;set;}
66+
publicstring?InstantiatedGenericArgumentName{get;set;}
6667
}
6768
}
6869

0 commit comments

Comments
 (0)