Skip to content

[Xamarin.Android.Build.Tasks] combine CheckTargetFrameworks/ResolveAssemblies #2174

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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
76 changes: 0 additions & 76 deletions src/Xamarin.Android.Build.Tasks/Tasks/CheckTargetFrameworks.cs

This file was deleted.

56 changes: 49 additions & 7 deletions src/Xamarin.Android.Build.Tasks/Tasks/ResolveAssemblies.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ public class ResolveAssemblies : AsyncTask
[Required]
public string ReferenceAssembliesDirectory { get; set; }

[Required]
public string TargetFrameworkVersion { get; set; }

[Required]
public string ProjectFile { get; set; }

public string ProjectAssetFile { get; set; }

public string TargetMoniker { get; set; }
Expand Down Expand Up @@ -122,6 +128,14 @@ void Execute (DirectoryAssemblyResolver resolver)
// Add I18N assemblies if needed
AddI18nAssemblies (resolver, assemblies);

var mainapiLevel = MonoAndroidHelper.SupportedVersions.GetApiLevelFromFrameworkVersion (TargetFrameworkVersion);
foreach (var item in api_levels.Where (x => mainapiLevel < x.Value)) {
var itemOSVersion = MonoAndroidHelper.SupportedVersions.GetFrameworkVersionFromApiLevel (item.Value);
Log.LogCodedWarning ("XA0105", ProjectFile, 0,
"The $(TargetFrameworkVersion) for {0} ({1}) is greater than the $(TargetFrameworkVersion) for your project ({2}). " +
"You need to increase the $(TargetFrameworkVersion) for your project.", Path.GetFileName (item.Key), itemOSVersion, TargetFrameworkVersion);
}

var resolvedAssemblies = new List<ITaskItem> (assemblies.Count);
var resolvedSymbols = new List<ITaskItem> (assemblies.Count);
var resolvedFrameworkAssemblies = new List<ITaskItem> (assemblies.Count);
Expand Down Expand Up @@ -149,6 +163,7 @@ void Execute (DirectoryAssemblyResolver resolver)
}

readonly List<string> do_not_package_atts = new List<string> ();
readonly Dictionary<string, int> api_levels = new Dictionary<string, int> ();
int indent = 2;

AssemblyDefinition ResolveRuntimeAssemblyForReferenceAssembly (LockFile lockFile, DirectoryAssemblyResolver resolver, string assemblyPath)
Expand Down Expand Up @@ -198,13 +213,8 @@ void AddAssemblyReferences (DirectoryAssemblyResolver resolver, Dictionary<strin

if (resolutionPath == null)
resolutionPath = new List<string>();

foreach (var att in assembly.CustomAttributes.Where (a => a.AttributeType.FullName == "Java.Interop.DoNotPackageAttribute")) {
string file = (string) att.ConstructorArguments.First ().Value;
if (string.IsNullOrWhiteSpace (file))
LogError ("In referenced assembly {0}, Java.Interop.DoNotPackageAttribute requires non-null file name.", assembly.FullName);
do_not_package_atts.Add (Path.GetFileName (file));
}

CheckAssemblyAttributes (assembly);

LogMessage ("{0}Adding assembly reference for {1}, recursively...", new string (' ', indent), assembly.Name);
resolutionPath.Add (assembly.Name.Name);
Expand Down Expand Up @@ -245,6 +255,38 @@ void AddAssemblyReferences (DirectoryAssemblyResolver resolver, Dictionary<strin
resolutionPath.RemoveAt (resolutionPath.Count - 1);
}

void CheckAssemblyAttributes (AssemblyDefinition assembly)
{
foreach (var att in assembly.CustomAttributes) {
switch (att.AttributeType.FullName) {
case "Java.Interop.DoNotPackageAttribute": {
string file = (string)att.ConstructorArguments.First ().Value;
if (string.IsNullOrWhiteSpace (file))
LogError ("In referenced assembly {0}, Java.Interop.DoNotPackageAttribute requires non-null file name.", assembly.FullName);
do_not_package_atts.Add (Path.GetFileName (file));
}
break;
case "System.Runtime.Versioning.TargetFrameworkAttribute": {
foreach (var p in att.ConstructorArguments) {
var value = p.Value.ToString ();
if (value.StartsWith ("MonoAndroid")) {
var values = value.Split ('=');
var apiLevel = MonoAndroidHelper.SupportedVersions.GetApiLevelFromFrameworkVersion (values [1]);
if (apiLevel != null) {
var assemblyName = assembly.Name.Name;
Log.LogDebugMessage ("{0}={1}", assemblyName, apiLevel);
api_levels [assemblyName] = apiLevel.Value;
}
}
}
}
break;
default:
break;
}
}
}

static LinkModes ParseLinkMode (string linkmode)
{
if (string.IsNullOrWhiteSpace (linkmode))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,6 @@
<Compile Include="Tasks\JavaCompileToolTask.cs" />
<Compile Include="Tasks\AsyncTask.cs" />
<Compile Include="Utilities\ResourceMerger.cs" />
<Compile Include="Tasks\CheckTargetFrameworks.cs" />
<Compile Include="Tasks\Dx.cs" />
<Compile Include="Tasks\CreateMsymManifest.cs" />
<Compile Include="Utilities\AndroidResource.cs">
Expand Down
12 changes: 2 additions & 10 deletions src/Xamarin.Android.Build.Tasks/Xamarin.Android.Common.targets
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
<UsingTask TaskName="Xamarin.Android.Tasks.CalculateLayoutCodeBehind" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
<UsingTask TaskName="Xamarin.Android.Tasks.CalculateProjectDependencies" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
<UsingTask TaskName="Xamarin.Android.Tasks.CheckForRemovedItems" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
<UsingTask TaskName="Xamarin.Android.Tasks.CheckTargetFrameworks" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
<UsingTask TaskName="Xamarin.Android.Tasks.CheckForInvalidResourceFileNames" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
<UsingTask TaskName="Xamarin.Android.Tasks.CompileToDalvik" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
<UsingTask TaskName="Xamarin.Android.Tasks.CollectPdbFiles" AssemblyFile="Xamarin.Android.Build.Tasks.dll" />
Expand Down Expand Up @@ -487,14 +486,6 @@ Copyright (C) 2011-2012 Xamarin. All rights reserved.
</CreateItem>
</Target>

<Target Name="_CheckTargetFrameworks"
DependsOnTargets="_ResolveAssemblies">
<CheckTargetFrameworks
ResolvedAssemblies="@(ResolvedAssemblies)"
ProjectFile="$(MSBuildProjectFullPath)"
TargetFrameworkVersion="$(TargetFrameworkVersion)" />
</Target>

<Target Name="_StripEmbeddedLibraries"
Inputs="@(ResolvedAssemblies)"
Outputs="$(_AndroidStripFlag)"
Expand Down Expand Up @@ -1891,6 +1882,8 @@ because xbuild doesn't support framework reference assemblies.
Assemblies="@(FilteredAssemblies)"
I18nAssemblies="$(MandroidI18n)"
LinkMode="$(AndroidLinkMode)"
ProjectFile="$(MSBuildProjectFullPath)"
TargetFrameworkVersion="$(TargetFrameworkVersion)"
ProjectAssetFile="$(ProjectLockFile)"
TargetMoniker="$(NuGetTargetMoniker)"
ReferenceAssembliesDirectory="$(TargetFrameworkDirectory)">
Expand Down Expand Up @@ -2143,7 +2136,6 @@ because xbuild doesn't support framework reference assemblies.
<_PrepareAssembliesDependsOnTargets>
_ResolveAssemblies
;_ResolveSatellitePaths
;_CheckTargetFrameworks
;_CreatePackageWorkspace
;_StripEmbeddedLibraries
;_LinkAssemblies
Expand Down