Mixin cross-referencing tool
Based on a novel by Patrick Größ
Overview
The mixin cross referencer ("MixinXRef") is a tool for generating a browsable report (HTML). The report aids understanding of large architectures that use many mixins.
The source can be found in the re-motion contribution GitHub
Using MixinXRef
MixinXRef assembly-directory output-directory [custom-remotion-reflector-qualified-name]
- The assembly directory contains the assemblies for analysis; all dependencies must resolve.
- If pages already exist in the output directory, MixinXRef asks for confirmation for overwriting these files
- A custom remotion reflector is an implementation for an
IRemotionReflector
, i.e. a module for interpreting the mixin configuration. You won't need this unless the current API for mixin discovery changes or you change it for your project.
The directory xml_utilities
must exist in the same directory where MixinXRef.exe
is located. The xml_utilities
contains XSLT style-sheets, the saxon XSLT processor and the resources
directory (for .css, Javascript, pictures).
How it works
MixinXRef loads the assemblies for analysis via .NET reflection and generates an XML document. MixinXRef uses XSLT 2.0 for transforming that XML document to HTML pages.
Technologies, dependencies
- .NET reflection and mixin reflection (re-mix)
- LINQ to XML
- XSLT 20.0 (Saxon XSLT processor)
- JavaScript, JQuery (tablesorter, tablepager, cookies, etc.)
Adapting MixinXRef
Configuring XML formatting
The interface MixinXRef.Formatting.IOutputFormatter
controls output of "modifiers" for types and their members, as well as "signatures" for members. The output formatter currently in use lovingly renders signatures, i.e. type names, highlighting and usage of C# aliases.
New re-motion version
You can use MixinXRef for projects with various versions of re-motion – for as long as the mixin reflection API does not change. As soon as it DOES change, you must adapt MixinXRef.Reflection.Remotion.IRemotionReflector
accordingly. What's more, the RemotionReflectorFactory.DetectVersion ()
must return an appropriate instance. The alternative is to drop in an IRemotionReflector
implementation with the third, optional,
custom-remotion-reflector-assembly-qualified-name
(see above, Using MixinXRef).