@@ -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