private void SearchForSourceFiles(List <SourceFileInfo> sourceFiles, DirectoryInfo directory)
        {
            if (directory.GetFiles("*.asmdef", SearchOption.TopDirectoryOnly).Length > 1)
            {
                // Source file is managed by another asmdef
                return;
            }

            foreach (FileInfo fileInfo in directory.GetFiles("*.cs", SearchOption.TopDirectoryOnly))
            {
                sourceFiles.Add(SourceFileInfo.Parse(fileInfo, null));
            }

            foreach (DirectoryInfo subDirectory in directory.GetDirectories("*", SearchOption.TopDirectoryOnly))
            {
                SearchForSourceFiles(sourceFiles, subDirectory);
            }
        }
        /// <summary>
        /// Gets the source files for this assembly definition.
        /// </summary>
        /// <returns>The array of <see cref="SourceFileInfo"/>.</returns>
        public SourceFileInfo[] GetSources()
        {
            if (sourceFiles == null)
            {
                List <SourceFileInfo> sourceFiles = new List <SourceFileInfo>();
                if (assembly != null)
                {
                    foreach (string sourceFile in assembly.sourceFiles)
                    {
                        MonoScript asset = AssetDatabase.LoadAssetAtPath <MonoScript>(sourceFile);
                        sourceFiles.Add(SourceFileInfo.Parse(new FileInfo(Utilities.GetFullPathFromKnownRelative(sourceFile)), asset.GetClass()));
                    }
                }
                else
                {
                    SearchForSourceFiles(sourceFiles, file.Directory);
                }
                this.sourceFiles = sourceFiles.ToArray();
            }

            return(sourceFiles);
        }