Skip to content

Commit 005e273

Browse files
authored
[generator] Allow multiple generator --apiversions (#593)
Context: dotnet/android#4356 (comment) A "funny" thing was found with API-R: the Android SDK `platforms/android-R/data/api-versions.xml` file is *missing* members present in previous API versions, e.g. `java.lang.StringBuilder.trimToSize()` is not mentioned in API-R, while it *is* mentioned in API-29 and the "global" `platform-tools/api/api-versions.xml`. Try to improve sanity for this conundrum by allowing `generator --apiversions` to be specified multiple times, e.g. this diff to apply to xamarin-android: diff --git a/src/Mono.Android/Mono.Android.targets b/src/Mono.Android/Mono.Android.targets index 8735c2ae..baae759b 100644 --- a/src/Mono.Android/Mono.Android.targets +++ b/src/Mono.Android/Mono.Android.targets @@ -78,10 +78,13 @@ Inputs="metadata;enumflags;map.csv;methodmap.csv;$(IntermediateOutputPath)mcw\api.xml" Outputs="$(IntermediateOutputPath)mcw\Mono.Android.projitems"> <MakeDir Directories="$(IntermediateOutputPath)mcw" /> - <PropertyGroup> - <_ApiVersions Condition="Exists('$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml')">"$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml"</_ApiVersions> - <_ApiVersions Condition="'$(_ApiVersions)'==''">"$(AndroidSdkDirectory)\platform-tools\api\api-versions.xml"</_ApiVersions> - </PropertyGroup> + <ItemGroup> + <_ApiVersion Include="$(AndroidSdkDirectory)\platform-tools\api\api-versions.xml" /> + <_ApiVersion + Condition="Exists('$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml')" + Include="$(AndroidSdkDirectory)\platforms\android-$(AndroidPlatformId)\data\api-versions.xml" + /> + </ItemGroup> <PropertyGroup> <Generator>"$(XAInstallPrefix)xbuild\Xamarin\Android\generator.exe"</Generator> <_GenFlags>--public --product-version=7</_GenFlags> @@ -91,7 +94,7 @@ <_Fixup>--fixup=metadata</_Fixup> <_Enums1>--preserve-enums --enumflags=enumflags --enumfields=map.csv --enummethods=methodmap.csv</_Enums1> <_Enums2>--enummetadata=$(IntermediateOutputPath)mcw\enummetadata</_Enums2> - <_Versions>--apiversions=$(_ApiVersions)</_Versions> + <_Versions>@(_ApiVersion->'--apiversions="%(Identity)"', ' ')</_Versions> <_Annotations>--annotations="$(AndroidSdkDirectory)\platform-tools\api\annotations.zip"</_Annotations> <_Assembly>--assembly="Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"</_Assembly> <_TypeMap>--type-map-report=$(IntermediateOutputPath)mcw\type-mapping.txt</_TypeMap> The `generator --apiversions` files are applied in order, with *later* versions overriding/replacing earlier versions. This is why `platform-tools/api/api-versions.xml` is present *first*.
1 parent eb0520a commit 005e273

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

tools/generator/CodeGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ static void Run (CodeGeneratorOptions options, DirectoryAssemblyResolver resolve
5353
string enum_flags = options.EnumFlagsFile;
5454
string enum_methods_map = options.EnumMethodsMapFile;
5555
var fixups = options.FixupFiles;
56-
string api_versions_xml = options.ApiVersionsXmlFile;
5756
var annotations_zips = options.AnnotationsZipFiles;
5857
string filename = options.ApiDescriptionFile;
5958
string mapping_file = options.MappingReportFile;
@@ -157,8 +156,9 @@ static void Run (CodeGeneratorOptions options, DirectoryAssemblyResolver resolve
157156

158157
Validate (gens, opt, new CodeGeneratorContext ());
159158

160-
if (api_versions_xml != null)
159+
foreach (var api_versions_xml in options.ApiVersionsXmlFiles) {
161160
ApiVersionsSupport.AssignApiLevels (gens, api_versions_xml);
161+
}
162162

163163
foreach (GenBase gen in gens)
164164
gen.FillProperties ();

tools/generator/CodeGeneratorOptions.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public class CodeGeneratorOptions
1010
{
1111
public CodeGeneratorOptions ()
1212
{
13+
ApiVersionsXmlFiles = new Collection<string> ();
1314
AssemblyReferences = new Collection<string> ();
1415
FixupFiles = new Collection<string> ();
1516
LibraryPaths = new Collection<string> ();
@@ -26,7 +27,9 @@ public CodeGeneratorOptions ()
2627
public bool GlobalTypeNames {get; set;}
2728
public bool OnlyBindPublicTypes {get; set;}
2829
public string ApiDescriptionFile {get; set;}
30+
[Obsolete ("Use ApiVersionsXmlFiles")]
2931
public string ApiVersionsXmlFile {get; set;}
32+
public Collection<string> ApiVersionsXmlFiles {get; set;}
3033
public Collection<string> AnnotationsZipFiles {get; set;}
3134
public string EnumFieldsMapFile {get; set;}
3235
public string EnumFlagsFile {get; set;}
@@ -138,7 +141,7 @@ public static CodeGeneratorOptions Parse (string[] args)
138141
v => opts.EnumMethodsMapFile = v },
139142
{ "apiversions=",
140143
"For internal use.",
141-
v => opts.ApiVersionsXmlFile = v },
144+
v => opts.ApiVersionsXmlFiles.Add (v) },
142145
{ "annotations=",
143146
"For internal use.",
144147
v => opts.AnnotationsZipFiles.Add (v) },

0 commit comments

Comments
 (0)