Skip to content
This repository was archived by the owner on Jun 20, 2023. It is now read-only.

Commit cf8d50b

Browse files
authored
Merge pull request #158 from xamarin/mattleibow/add-google
Include Google Mappings
2 parents a1ccd2e + dee976e commit cf8d50b

File tree

2 files changed

+62
-33
lines changed

2 files changed

+62
-33
lines changed

util/AndroidXMapper/AndroidXMapper/FullType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public FullType(string container, string ns, string n)
2626
$"{Namespace}.{Name}";
2727

2828
public bool IsEmpty =>
29-
Namespace == string.Empty || Name == string.Empty;
29+
string.IsNullOrEmpty(Namespace) || string.IsNullOrEmpty(Name);
3030

3131
public override bool Equals(object obj) =>
3232
obj is FullType other && Container == other.Container && Namespace == other.Namespace && Name == other.Name;

util/AndroidXMapper/AndroidXMapper/MappingGenerator.cs

Lines changed: 61 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,14 @@ public void Generate(TextWriter writer, bool includeWarnings)
3333
var overrideMappings = LoadMapping(OverridesPath);
3434
var javaMappings = LoadMapping(JavaMappingPath);
3535

36-
const string Prefix = ",,,,,,,,,";
37-
38-
writer.WriteLine(
39-
"Support .NET namespace," +
40-
"Support .NET type name," +
41-
"AndroidX .NET namespace," +
42-
"AndroidX .NET type name," +
43-
"AndroidX .NET assembly," +
44-
"Support Java package," +
45-
"Support Java class," +
46-
"AndroidX Java package," +
47-
"AndroidX Java class," +
36+
WriteRecord(
37+
writer,
38+
new BindingType(
39+
new FullType("Support .NET namespace", "Support .NET type name"),
40+
new FullType("Support Java package", "Support Java class")),
41+
new BindingType(
42+
new FullType("AndroidX .NET assembly", "AndroidX .NET namespace", "AndroidX .NET type name"),
43+
new FullType("AndroidX Java package", "AndroidX Java class")),
4844
"Messages");
4945

5046
foreach (var supportType in supportTypes)
@@ -61,12 +57,12 @@ public void Generate(TextWriter writer, bool includeWarnings)
6157
else if (matched.Count > 1)
6258
{
6359
if (includeWarnings)
64-
writer.WriteLine($"{Prefix}WARNING: Too many override types found for type {overrideType}: {string.Join(", ", matched)}.");
60+
WriteRecord(writer, $"WARNING: Too many override types found for type {overrideType}: {string.Join(", ", matched)}.");
6561
}
6662
else
6763
{
6864
if (includeWarnings)
69-
writer.WriteLine($"{Prefix}WARNING: Unable to find override type for type {overrideType}.");
65+
WriteRecord(writer, $"WARNING: Unable to find override type for type {overrideType}.");
7066
}
7167
}
7268
else if (TryGetExactMatch(xTypes, supportType, out var exactMatch))
@@ -91,53 +87,86 @@ public void Generate(TextWriter writer, bool includeWarnings)
9187
else if (matched.Count > 1)
9288
{
9389
if (includeWarnings)
94-
writer.WriteLine($"{Prefix}WARNING: Too many AndroidX types found for Java type {androidx}: {string.Join(", ", matched)}.");
90+
WriteRecord(writer, $"WARNING: Too many AndroidX types found for Java type {androidx}: {string.Join(", ", matched)}.");
9591
}
9692
else
9793
{
9894
if (includeWarnings)
99-
writer.WriteLine($"{Prefix}WARNING: Unable to find AndroidX type for Java type {androidx}.");
95+
WriteRecord(writer, $"WARNING: Unable to find AndroidX type for Java type {androidx}.");
10096
}
10197
}
10298
else
10399
{
104100
if (includeWarnings && useJavaType)
105-
writer.WriteLine($"{Prefix}WARNING: Unable to find a Java mapping for {supportType}. Trying managed mapping...");
101+
WriteRecord(writer, $"WARNING: Unable to find a Java mapping for {supportType}. Trying managed mapping...");
106102

107103
var matched = xTypes.Where(xt => xt.NetType.Name == supportType.NetType.Name).ToList();
108104
if (matched.Count == 1)
109105
{
110106
typeMappings[supportType] = matched[0];
111107

112108
if (includeWarnings && useJavaType)
113-
writer.WriteLine($"{Prefix}WARNING: Found a type that appears to match {matched[0]}.");
109+
WriteRecord(writer, $"WARNING: Found a type that appears to match {matched[0]}.");
114110
}
115111
else if (matched.Count > 1)
116112
{
117113
if (includeWarnings)
118-
writer.WriteLine($"{Prefix}WARNING: Too many AndroidX types found for .NET type {supportType.NetType}: {string.Join(", ", matched)}.");
114+
WriteRecord(writer, $"WARNING: Too many AndroidX types found for .NET type {supportType.NetType}: {string.Join(", ", matched)}.");
119115
}
120116
else
121117
{
122118
if (includeWarnings)
123-
writer.WriteLine($"{Prefix}WARNING: Unable to find AndroidX type for .NET type {supportType.NetType}.");
119+
WriteRecord(writer, $"WARNING: Unable to find AndroidX type for .NET type {supportType.NetType}.");
124120
}
125121
}
126122

127123
if (typeMappings.TryGetValue(supportType, out var androidXType))
128-
{
129-
writer.WriteLine(
130-
$"{supportType.NetType.Namespace}," +
131-
$"{supportType.NetType.Name}," +
132-
$"{androidXType.NetType.Namespace}," +
133-
$"{androidXType.NetType.Name}," +
134-
$"{androidXType.NetType.Container}," +
135-
$"{supportType.JavaType.Namespace}," +
136-
$"{supportType.JavaType.Name}," +
137-
$"{androidXType.JavaType.Namespace}," +
138-
$"{androidXType.JavaType.Name},");
139-
}
124+
WriteRecord(writer, supportType, androidXType);
125+
}
126+
127+
foreach (var mapping in javaMappings.Skip(1))
128+
{
129+
var mapped = typeMappings.Keys.FirstOrDefault(k => k.JavaType.FullName == mapping.Key);
130+
if (!mapped.JavaType.IsEmpty)
131+
continue;
132+
133+
WriteRecord(
134+
writer,
135+
new BindingType(FullType.Empty, GetJavaFullType(mapping.Key)),
136+
new BindingType(FullType.Empty, GetJavaFullType(mapping.Value)),
137+
$"WARNING: The .NET assemblies did not use the Java type {mapping.Key} => {mapping.Value}.");
138+
}
139+
}
140+
141+
private static FullType GetJavaFullType(string javaFullName)
142+
{
143+
for (var i = 1; i < javaFullName.Length; i++)
144+
{
145+
if (char.IsUpper(javaFullName, i) && javaFullName[i - 1] == '.')
146+
return new FullType(
147+
javaFullName.Substring(0, i - 1),
148+
javaFullName.Substring(i));
140149
}
150+
151+
return FullType.Empty;
152+
}
153+
154+
private static void WriteRecord(TextWriter writer, string message) =>
155+
WriteRecord(writer, BindingType.Empty, BindingType.Empty, message);
156+
157+
private static void WriteRecord(TextWriter writer, BindingType supportType, BindingType androidXType, string message = "")
158+
{
159+
writer.WriteLine(
160+
$"{supportType.NetType.Namespace}," +
161+
$"{supportType.NetType.Name}," +
162+
$"{androidXType.NetType.Namespace}," +
163+
$"{androidXType.NetType.Name}," +
164+
$"{androidXType.NetType.Container}," +
165+
$"{supportType.JavaType.Namespace}," +
166+
$"{supportType.JavaType.Name}," +
167+
$"{androidXType.JavaType.Namespace}," +
168+
$"{androidXType.JavaType.Name}," +
169+
message);
141170
}
142171

143172
private bool TryGetExactMatch(IEnumerable<BindingType> xTypes, BindingType supportType, out BindingType exactMatch)

0 commit comments

Comments
 (0)