Skip to content
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 number Diff line number Diff 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 number Diff line number Diff 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 Down Expand 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 Down Expand 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 Down Expand 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 JavaType Type { get; set; }
public JavaType? Type { get; set; }
}
}

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

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

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

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

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

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

public partial class JavaGenericConstraint
{
public JavaTypeReference ResolvedType { 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 JavaMethodReference BaseMethod { 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 JavaMethod Method { get; set; }
public JavaMethod? Method { get; set; }
}

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

Loading