コード例 #1
0
        private static void TransformProgram(WholeProgram wholeProgram,
                                             string transformedBinariesPath,
                                             string reportsPath,
                                             MethodRemoval methodRemoval,
                                             TargetProfile profile)
        {
            System.IO.Directory.CreateDirectory(transformedBinariesPath);

            StubMethodBodyEmitter stubEmitter = GetStubMethodBodyEmitterForProfile(profile, wholeProgram);

            foreach (IAssembly assembly in wholeProgram.AllAssemblies())
            {
                if (AssemblyShouldBeRewritten(assembly))
                {
                    if (assembly.PublicKeyToken.Count() > 0)
                    {
                        Console.WriteLine("Warning: rewriting assembly with a public key token. {0}", assembly);
                    }

                    string outputBinary = transformedBinariesPath + @"\" + Path.GetFileName(assembly.Location);

                    var copy = new MetadataDeepCopier(wholeProgram.Host()).Copy(assembly);


                    DocumentationCommentDefinitionIdStringMap idMap = new DocumentationCommentDefinitionIdStringMap(new IAssembly[] { copy });

                    AssemblyReport assemblyReport = AssemblyReport.CreateAssemblyReportFromPath(copy, reportsPath, idMap);

                    stopwatch.Start();
                    RewriteBinary(copy, assemblyReport, wholeProgram.Host(), outputBinary, methodRemoval, stubEmitter);

                    stopwatch.Start();
                }
                else
                {
                    //Console.WriteLine("Skipping rewrite of of assembly {0}", assembly.Name.Value);
                }
            }
        }
コード例 #2
0
    public void TestCreateEntryPointListFromString() {
      // Test parsing whitespace separated entrypoint string.

      string source =
@"
namespace Ns {
  class Foo {
    static void A() {}
    static void B() {}
    static void C() {}
  }
}
";

      ConstructWholeProgramForSources(new string[] { source }, (compilerResults, wholeProgram) => {
        DocumentationCommentDefinitionIdStringMap idStringMap = new DocumentationCommentDefinitionIdStringMap(wholeProgram.AllAssemblies());

        IEnumerable<IMethodReference> emptyList = idStringMap.CreateEntryPointListFromString("");
        Assert.AreEqual(0, emptyList.Count());

        IEnumerable<IMethodReference> singletonList = idStringMap.CreateEntryPointListFromString("M:Ns.Foo.A");
        Assert.AreEqual(1, singletonList.Count());
        Assert.AreEqual("A", singletonList.ElementAt(0).Name.Value);

        IEnumerable<IMethodReference> singletonListWithTerminatingNewline = idStringMap.CreateEntryPointListFromString("M:Ns.Foo.A\n");
        Assert.AreEqual(1, singletonListWithTerminatingNewline.Count());
        Assert.AreEqual("A", singletonListWithTerminatingNewline.ElementAt(0).Name.Value);

        IEnumerable<IMethodReference> newlineSeparatedList = idStringMap.CreateEntryPointListFromString("M:Ns.Foo.A\nM:Ns.Foo.B\nM:Ns.Foo.C\n");
        Assert.AreEqual(3, newlineSeparatedList.Count());
        Assert.AreEqual("A", newlineSeparatedList.ElementAt(0).Name.Value);
        Assert.AreEqual("B", newlineSeparatedList.ElementAt(1).Name.Value);
        Assert.AreEqual("C", newlineSeparatedList.ElementAt(2).Name.Value);

        IEnumerable<IMethodReference> spaceSeparatedList = idStringMap.CreateEntryPointListFromString("M:Ns.Foo.A M:Ns.Foo.B M:Ns.Foo.C");
        Assert.AreEqual(3, newlineSeparatedList.Count());
        Assert.AreEqual("A", newlineSeparatedList.ElementAt(0).Name.Value);
        Assert.AreEqual("B", newlineSeparatedList.ElementAt(1).Name.Value);
        Assert.AreEqual("C", newlineSeparatedList.ElementAt(2).Name.Value);
      });
    }
コード例 #3
0
    public void TestStaticMethodIDStrings() {
      // Tests for static method IDs. These are methods
      // that can be actual entry points

      string source =
@"
namespace Ns {
  class Foo {
    static void Main(string[] args) {}
    static void Main() {}
    static void MyMain(int i) {}
    static int OtherEntry() { return 0;}
  }

  class Bar {
    static void Main(string[] args) {

    }
  }
}
";

      ConstructWholeProgramForSources(new string[] { source }, (compilerResults, wholeProgram) => {
        DocumentationCommentDefinitionIdStringMap idStringMap = new DocumentationCommentDefinitionIdStringMap(wholeProgram.AllAssemblies());

        IMethodReference Ns_Foo_Main_strings = idStringMap.GetMethodDefinitionsWithIdentifier("M:Ns.Foo.Main(System.String[])").First();
        Assert.IsNotNull(Ns_Foo_Main_strings);
        Assert.AreEqual("Main", Ns_Foo_Main_strings.Name.Value);
        Assert.AreEqual("Foo", ((INamedTypeReference)Ns_Foo_Main_strings.ContainingType).Name.Value);
        Assert.AreEqual(1, Ns_Foo_Main_strings.ParameterCount);


        IMethodReference Ns_Foo_Main_void = idStringMap.GetMethodDefinitionsWithIdentifier("M:Ns.Foo.Main").First();
        Assert.IsNotNull(Ns_Foo_Main_void);
        Assert.AreEqual("Main", Ns_Foo_Main_void.Name.Value);
        Assert.AreEqual("Foo", ((INamedTypeReference)Ns_Foo_Main_void.ContainingType).Name.Value);
        Assert.AreEqual(0, Ns_Foo_Main_void.ParameterCount);

        IMethodReference Ns_Foo_MyMain_int = idStringMap.GetMethodDefinitionsWithIdentifier("M:Ns.Foo.MyMain(System.Int32)").First();
        Assert.IsNotNull(Ns_Foo_MyMain_int);
        Assert.AreEqual("MyMain", Ns_Foo_MyMain_int.Name.Value);
        Assert.AreEqual("Foo", ((INamedTypeReference)Ns_Foo_MyMain_int.ContainingType).Name.Value);
        Assert.AreEqual(1, Ns_Foo_MyMain_int.ParameterCount);

        IMethodReference Ns_Foo_OtherEntry_void = idStringMap.GetMethodDefinitionsWithIdentifier("M:Ns.Foo.OtherEntry").First();
        Assert.IsNotNull(Ns_Foo_OtherEntry_void);
        Assert.AreEqual("OtherEntry", Ns_Foo_OtherEntry_void.Name.Value);
        Assert.AreEqual("Foo", ((INamedTypeReference)Ns_Foo_OtherEntry_void.ContainingType).Name.Value);
        Assert.AreEqual(0, Ns_Foo_OtherEntry_void.ParameterCount);

        IMethodReference Ns_Bar_Main_strings = idStringMap.GetMethodDefinitionsWithIdentifier("M:Ns.Bar.Main(System.String[])").First();
        Assert.IsNotNull(Ns_Bar_Main_strings);
        Assert.AreEqual("Main", Ns_Bar_Main_strings.Name.Value);
        Assert.AreEqual("Bar", ((INamedTypeReference)Ns_Bar_Main_strings.ContainingType).Name.Value);
        Assert.AreEqual(1, Ns_Bar_Main_strings.ParameterCount);
      });
    }
コード例 #4
0
    private static void TransformProgram(WholeProgram wholeProgram,
        string transformedBinariesPath,
        string reportsPath,
        MethodRemoval methodRemoval,
        TargetProfile profile) {

      System.IO.Directory.CreateDirectory(transformedBinariesPath);

      StubMethodBodyEmitter stubEmitter = GetStubMethodBodyEmitterForProfile(profile, wholeProgram);

      foreach (IAssembly assembly in wholeProgram.AllAssemblies()) {
        if (AssemblyShouldBeRewritten(assembly)) {

          if (assembly.PublicKeyToken.Count() > 0) {
            Console.WriteLine("Warning: rewriting assembly with a public key token. {0}", assembly);
          }

          string outputBinary = transformedBinariesPath + @"\" + Path.GetFileName(assembly.Location);

          var copy = new MetadataDeepCopier(wholeProgram.Host()).Copy(assembly);


          DocumentationCommentDefinitionIdStringMap idMap = new DocumentationCommentDefinitionIdStringMap(new IAssembly[] { copy });

          AssemblyReport assemblyReport = AssemblyReport.CreateAssemblyReportFromPath(copy, reportsPath, idMap);

          stopwatch.Start();
          RewriteBinary(copy, assemblyReport, wholeProgram.Host(), outputBinary, methodRemoval, stubEmitter);

          stopwatch.Start();
        }
        else {
          //Console.WriteLine("Skipping rewrite of of assembly {0}", assembly.Name.Value);
        }
      }
    }