[linker-analyzer] added --flat option (#5629)
commit6a867bd856a0310e63aacc6f4a7cc81dcd8294b0
authorRadek Doulik <radekdoulik@users.noreply.github.com>
Tue, 5 Dec 2017 03:23:36 +0000 (4 22:23 -0500)
committerMarek Safar <marek.safar@gmail.com>
Tue, 5 Dec 2017 03:23:36 +0000 (4 22:23 -0500)
tree1bb2ec1b90c9981c09cff9b410f6af04f4be5437
parent399c2c89c7c11ac8843f15269567bc9cde6fa1c0
[linker-analyzer] added --flat option (#5629)

* [linker-analyzer] added --flat option

This options allows to see all dependencies per vertex at once, with
displayed distance in the graph between the vertex and dependent
vertex.

An example of flat output:

    Loading dependency tree from: linker-dependencies.xml.gz

    --- Type dependencies: 'Android.App.Activity' --------------------------

    Distance | TypeDef:Android.App.Activity [total deps: 7]
    ------------------------------------------------------------------------
           1 | TypeDef:XA.App.MainActivity
           2 | Assembly:XA.App, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
           3 | Other:Mono.Linker.Steps.ResolveFromAssemblyStep
           3 | Other:Mono.Tuner.CustomizeActions
           3 | Other:MonoDroid.Tuner.MonoDroidMarkStep
           2 | TypeDef:XA.App.MainActivity/<>c__DisplayClass1_0

* [linker-analyzer] Get back to using "unnamed" tuples

Use unnamed tuples to workaround mcs bug. We can revert this change,
once mcs is updated.

The build with mcs was failing like this, because of mcs bug:

```
MacBook:linker-analyzer rodo$ make
/Applications/Xcode.app/Contents/Developer/usr/bin/make all-local
MCS     [net_4_x-darwin] linkeranalyzer.exe

Unhandled Exception:
System.NotImplementedException: named tuples for .interfaceimpl
  at Mono.CSharp.TypeDefinition.Emit () [0x00028] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.ClassOrStruct.Emit () [0x00025] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.TypeDefinition.Emit () [0x002e8] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.ClassOrStruct.Emit () [0x00025] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.Class.Emit () [0x00000] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.TypeDefinition.EmitContainer () [0x0000f] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.TypeContainer.EmitContainer () [0x0001e] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.NamespaceContainer.EmitContainer () [0x00007] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.TypeContainer.EmitContainer () [0x0001e] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.NamespaceContainer.EmitContainer () [0x00007] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.TypeContainer.EmitContainer () [0x0001e] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.ModuleContainer.EmitContainer () [0x0009c] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.AssemblyDefinition.Emit () [0x00098] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.AssemblyDefinitionStatic.Emit () [0x00126] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.Driver.Compile () [0x002f3] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.Driver.Main (System.String[] args) [0x00052] in <e953cb7042ea446195951c3e14c2cc5a>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.NotImplementedException: named tuples for .interfaceimpl
  at Mono.CSharp.TypeDefinition.Emit () [0x00028] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.ClassOrStruct.Emit () [0x00025] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.TypeDefinition.Emit () [0x002e8] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.ClassOrStruct.Emit () [0x00025] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.Class.Emit () [0x00000] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.TypeDefinition.EmitContainer () [0x0000f] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.TypeContainer.EmitContainer () [0x0001e] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.NamespaceContainer.EmitContainer () [0x00007] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.TypeContainer.EmitContainer () [0x0001e] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.NamespaceContainer.EmitContainer () [0x00007] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.TypeContainer.EmitContainer () [0x0001e] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.ModuleContainer.EmitContainer () [0x0009c] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.AssemblyDefinition.Emit () [0x00098] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.AssemblyDefinitionStatic.Emit () [0x00126] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.Driver.Compile () [0x002f3] in <e953cb7042ea446195951c3e14c2cc5a>:0
  at Mono.CSharp.Driver.Main (System.String[] args) [0x00052] in <e953cb7042ea446195951c3e14c2cc5a>:0
make[1]: *** [../../class/lib/net_4_x-darwin/linkeranalyzer.exe] Error 1
make: *** [do-all] Error 2

```
mcs/tools/linker-analyzer/ConsoleDependencyGraph.cs
mcs/tools/linker-analyzer/LinkerAnalyzerCore/DependencyGraph.cs
mcs/tools/linker-analyzer/Main.cs
mcs/tools/linker-analyzer/Makefile
mcs/tools/linker-analyzer/README.md
mcs/tools/linker-analyzer/linkeranalyzer-net_4_x.csproj