Skip to content
This repository was archived by the owner on Jul 6, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,6 +2,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
<DefineConstants>INTERNAL_NULLABLE_ATTRIBUTES</DefineConstants>
<ProjectGuid>{5C0B3562-8DA0-4726-9762-75B9709ED6B7}</ProjectGuid>
<AssemblyTitle>Java.Interop.Tools.JavaSource</AssemblyTitle>
<Company>Microsoft Corporation</Company>
Expand All@@ -11,6 +14,9 @@
<PropertyGroup>
<OutputPath>$(ToolOutputFullPath)</OutputPath>
</PropertyGroup>
<ItemGroup>
<Compile Include="..\utils\NullableAttributes.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Irony" Version="1.1.0" />
</ItemGroup>
Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -421,7 +421,9 @@ public JavaStubGrammar ()
var packageTokens = s.Split ('.').TakeWhile (t => !t.Any (c => Char.IsUpper (c)));
return s.Substring (Enumerable.Sum (packageTokens.Select (t => t.Length)) + packageTokens.Count ());
};
method.Exceptions = ((IEnumerable<string>)node.ChildNodes [ctor ? 6 : 7].AstNode)?.Select (s => new JavaException { Type = s, Name = stripPackage (s) })?.ToArray ();
method.Exceptions = ((IEnumerable<string>)node.ChildNodes [ctor ? 6 : 7].AstNode)
?.Select (s => new JavaException { Type = s, Name = stripPackage (s) })
?.ToArray ();
method.Deprecated = ((IEnumerable<string>)node.ChildNodes [0].AstNode).Any (v => v == "java.lang.Deprecated" || v == "Deprecated") ? "deprecated" : "not deprecated";
method.Final = mods.Contains ("final");
method.TypeParameters = modsOrTps.OfType<JavaTypeParameters> ().FirstOrDefault ();
Expand DownExpand Up@@ -501,7 +503,7 @@ public JavaStubGrammar ()
assignment.AstConfig.NodeCreator = SelectChildValueAt (0);
assign_expr.AstConfig.NodeCreator = (ctx, node) => {
ProcessChildren (ctx, node);
node.AstNode = new KeyValuePair<string, string> ((string)node.ChildNodes [0].AstNode, node.ChildNodes [2].AstNode?.ToString ());
node.AstNode = new KeyValuePair<string, string?> ((string)node.ChildNodes [0].AstNode, node.ChildNodes [2].AstNode?.ToString ());
};
rvalue_expressions.AstConfig.NodeCreator = CreateArrayCreator<object> ();
rvalue_expression.AstConfig.NodeCreator = SelectSingleChild;
Expand DownExpand Up@@ -542,7 +544,7 @@ public JavaStubGrammar ()
};
generic_definition_arguments.AstConfig.NodeCreator = (ctx, node) => {
ProcessChildren (ctx, node);
node.AstNode = new JavaTypeParameters ((JavaMethod) null) { TypeParameters = node.ChildNodes.Select (c => c.AstNode).Cast<JavaTypeParameter> ().ToList () };
node.AstNode = new JavaTypeParameters ((JavaMethod?) null) { TypeParameters = node.ChildNodes.Select (c => c.AstNode).Cast<JavaTypeParameter> ().ToList () };
};
generic_definition_argument.AstConfig.NodeCreator = (ctx, node) => {
ProcessChildren (ctx, node);
Expand All@@ -557,7 +559,7 @@ public JavaStubGrammar ()
generic_instance_identifier_or_q.AstConfig.NodeCreator = SelectSingleChild;
generic_instance_constraints.AstConfig.NodeCreator = (ctx, node) => {
ProcessChildren (ctx, node);
var c = (JavaGenericConstraints) node.ChildNodes.FirstOrDefault ()?.AstNode;
var c = (JavaGenericConstraints?) node.ChildNodes.FirstOrDefault ()?.AstNode;
if (c != null)
node.AstNode = " " + c.BoundsType + " " + string.Join (" & ", c.GenericConstraints.Select (cc => cc.Type));
};
Expand DownExpand Up@@ -602,27 +604,27 @@ public JavaStubParser ()

}

public JavaPackage TryLoad (string uri)
public JavaPackage? TryLoad (string uri)
{
return TryLoad (uri, out var _);
}

public JavaPackage TryLoad (string uri, out ParseTree parseTree)
public JavaPackage? TryLoad (string uri, out ParseTree parseTree)
{
return TryParse (File.ReadAllText (uri), uri, out parseTree);
}

public JavaPackage TryParse (string text)
public JavaPackage? TryParse (string text)
{
return TryParse (text, null, out var _);
}

public JavaPackage TryParse (string text, out ParseTree parseTree)
public JavaPackage? TryParse (string text, out ParseTree parseTree)
{
return TryParse (text, null, out parseTree);
}

public JavaPackage TryParse (string text, string fileName, out ParseTree parseTree)
public JavaPackage? TryParse (string text, string? fileName, out ParseTree parseTree)
{
parseTree = base.Parse (text, fileName);
if (parseTree.HasErrors ())
Expand All@@ -634,32 +636,35 @@ public JavaPackage TryParse (string text, string fileName, out ParseTree parseTr

void FlattenNestedTypes (JavaPackage package)
{
Action<List<JavaType>,JavaType> flatten = null;
flatten = (list, t) => {
var results = new List<JavaType> ();
foreach (var t in package.Types)
Flatten (results, t);
package.Types = results.ToList ();

void Flatten (List<JavaType> list, JavaType t)
{
list.Add (t);
foreach (var nt in t.Members.OfType<JavaNestedType> ()) {
if (nt.Type == null)
continue;
nt.Type.Name = t.Name + '.' + nt.Type.Name;
foreach (var nc in nt.Type.Members.OfType<JavaConstructor> ())
nc.Name = nt.Type.Name;
flatten (list, nt.Type);
Flatten (list, nt.Type);
}
t.Members = t.Members.Where (_ => !(_ is JavaNestedType)).ToArray ();
};
var results = new List<JavaType> ();
foreach (var t in package.Types)
flatten (results, t);
package.Types = results.ToList ();
}
}
}

class JavaNestedType : JavaMember
{
public JavaNestedType (JavaType type)
public JavaNestedType (JavaType? type)
: base (type)
{
}

public JavaTypeType { get; set; }
public JavaType? Type { get; set; }
}
}

Original file line numberDiff line numberDiff line change
Expand Up@@ -7,47 +7,48 @@ namespace Xamarin.Android.Tools.ApiXmlAdjuster

public partial class JavaClass
{
public JavaTypeReferenceResolvedExtends { get; set; }
public JavaTypeReference? ResolvedExtends { get; set; }
}

public partial class JavaImplements
{
public JavaTypeReferenceResolvedName { get; set; }
public JavaTypeReference? ResolvedName { get; set; }
}

public partial class JavaField
{
public JavaTypeReferenceResolvedType { get; set; }
public JavaTypeReference? ResolvedType { get; set; }
}

public partial class JavaMethod
{
public JavaTypeReferenceResolvedReturnType { get; set; }
public JavaTypeReference? ResolvedReturnType { get; set; }
}

public partial class JavaParameter
{
public JavaTypeReferenceResolvedType { get; set; }
public JavaTypeReference? ResolvedType { get; set; }
}

public partial class JavaGenericConstraint
{
public JavaTypeReferenceResolvedType { get; set; }
public JavaTypeReference? ResolvedType { get; set; }
}

// GenericInheritanceMapper extensibility

public partial class JavaClass
{
public IDictionary<JavaTypeReference,JavaTypeReference> GenericInheritanceMapping { get; set; }
public IDictionary<JavaTypeReference,JavaTypeReference>?
GenericInheritanceMapping { get; set; }
}

// OverrideMarker extensibility

public partial class JavaMethod
{
public JavaMethodReferenceBaseMethod { get; set; }
public IList<JavaInterface>ImplementedInterfaces { get; set; }
public JavaMethodReference? BaseMethod { get; set; }
public IList<JavaInterface>? ImplementedInterfaces { get; set; }
}

public partial class JavaMethodReference
Expand All@@ -57,12 +58,12 @@ public JavaMethodReference (JavaMethod candidate)
this.Method = candidate;
}

public JavaMethodMethod { get; set; }
public JavaMethod? Method { get; set; }
}

public partial class JavaParameter
{
public string InstantiatedGenericArgumentName { get; set; }
public string? InstantiatedGenericArgumentName { get; set; }
}
}

Loading