public void Compile()
        {
            Assembly assembly = Assembly.LoadFrom(Configuration.InputPath);

            var markerAttribute = GetAssemblyAttribute(assembly);

            foreach (var type in markerAttribute.Types ?? Enumerable.Empty <Type>())
            {
                var head = new CSharpNode(type.Name, TypeConversion.FromCSharpReflection(type));
                if (head.CSNodeType.Equals(CSharpNodeType.None))
                {
                    continue;
                }
                head.Visibility = Visibility.Public;

                Heads.Add(head);

                foreach (var property in type.GetProperties())
                {
                    InsertPropertyNodeInTree(property);
                }

                Trees.Add(Generator.GetSyntaxTree(head));
            }

            Trees.ForEach(tree => Generator.LinkingResolver.Resolve(tree));
        }