/// <summary>
        /// Ensures that reference for specified type presents in specified file
        /// </summary>
        /// <param name="t">Type to reference</param>
        /// <returns>Reference AST node or null if no reference needed. Returns existing reference in case if type is already referenced</returns>
        internal void EnsureReference(Type t)
        {
            if (TypesToExport.Contains(t))
            {
                return;
            }
            var bp = _context.Project.Blueprint(t);

            if (bp.ThirdParty != null)
            {
                foreach (var tpi in bp.ThirdPartyReferences)
                {
                    References.AddReference(tpi);
                }
                return;
            }
            if (AllTypesIsSingleFile)
            {
                return;
            }
            var relPath = GetRelativePathForType(t, FileName);
            var result  = new RtReference()
            {
                Path = relPath
            };

            References.AddReference(result);
        }
        /// <summary>
        /// Ensures that imports for specified type presents in specified file
        /// </summary>
        /// <param name="t">Type to import</param>
        /// <param name="typeName">Type name (probably overriden)</param>
        /// <returns>Import AST node or null if no import needed. Returns existing import in case if type is already imported</returns>
        internal RtImport EnsureImport(Type t, string typeName)
        {
            if (TypesToExport.Contains(t))
            {
                return(null);
            }

            var bp = _context.Project.Blueprint(t);

            if (bp.ThirdParty != null)
            {
                foreach (var tpi in bp.ThirdPartyImports)
                {
                    References.AddImport(tpi);
                }

                return(null);
            }

            if (AllTypesIsSingleFile)
            {
                return(null);
            }

            var relPath = GetRelativePathForType(t, FileName);

            if (string.IsNullOrEmpty(relPath))
            {
                return(null);
            }

            RtImport result = null;

            if (References.StarImports.ContainsKey(relPath))
            {
                return(References.StarImports[relPath]);
            }

            if (_context.Global.DiscardNamespacesWhenUsingModules)
            {
                var target = string.Format("{{ {0} }}", typeName);
                result = new RtImport()
                {
                    From = relPath, Target = target
                };
                References.AddImport(result);
            }
            else
            {
                var alias  = Path.GetFileNameWithoutExtension(relPath);
                var target = string.Format("* as {0}", alias);
                result = new RtImport()
                {
                    From = relPath, Target = target
                };
                References.AddImport(result);
            }
            return(result);
        }