|
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Linq;
using Mono.Cecil;
namespace Mono.Linker.Steps
{
public class RemoveResourcesStep : BaseStep
{
protected override void ProcessAssembly (AssemblyDefinition assembly)
{
if (!ShouldProcess (assembly)) return;
RemoveFSharpCompilationResources (assembly);
}
private bool ShouldProcess (AssemblyDefinition assembly)
{
if (!assembly.MainModule.HasResources)
return false;
var action = Annotations.GetAction (assembly);
return action == AssemblyAction.Link || action == AssemblyAction.Save;
}
private void RemoveFSharpCompilationResources (AssemblyDefinition assembly)
{
var resourcesInAssembly = assembly.MainModule.Resources.OfType<EmbeddedResource> ();
foreach (var resource in resourcesInAssembly.Where (IsFSharpCompilationResource)) {
Annotations.AddResourceToRemove (assembly, resource);
}
static bool IsFSharpCompilationResource (Resource resource)
=> resource.Name.StartsWith ("FSharpSignatureData", StringComparison.Ordinal)
|| resource.Name.StartsWith ("FSharpOptimizationData", StringComparison.Ordinal);
}
}
}
|