public static void addSourceFileOrFolderIncludedInSourceCode(List <string> sourceCodeFiles, List <string> referencedAssemblies)
        {
            var currentSourceDirectories = new List <string>(); // in case we need to resolve file names below

            foreach (var file in sourceCodeFiles)
            {
                if (file.valid())
                {
                    var directory = Path.GetDirectoryName(file);
                    if (false == currentSourceDirectories.Contains(directory))
                    {
                        currentSourceDirectories.Add(directory);
                    }
                }
            }

            var filesToAdd = new List <string>();

            // find the extra files to add
            foreach (var sourceCodeFile in sourceCodeFiles)
            {
                if (sourceCodeFile.valid() && sourceCodeFile.extension(".h2").isFalse())
                {
                    var fileLines = Files.getFileLines(sourceCodeFile);
                    foreach (var fileLine in fileLines)
                    {
                        var match = StringsAndLists.TextStartsWithStringListItem(fileLine, specialO2Tag_ExtraSourceFile);
                        if (match != "")
                        {
                            //   var file = fileLine.Replace(specialO2Tag_ExtraSourceFile, "").Trim();
                            var file = fileLine.Replace(match, "").Trim();
                            if (false == sourceCodeFiles.Contains(file) && false == filesToAdd.Contains(file))
                            {
                                //handle the File:xxx:Ref:xxx case
                                if (CompileEngine.isFileAReferenceARequestToUseThePrevioulsyCompiledVersion(file, referencedAssemblies)
                                    .isFalse())
                                {
                                    filesToAdd.Add(file);
                                }
                            }
                        }
                        //else if (fileLine.StartsWith(specialO2Tag_ExtraFolder))
                        else
                        {
                            match = StringsAndLists.TextStartsWithStringListItem(fileLine, specialO2Tag_ExtraFolder);
                            if (match != "")
                            {
                                var folder = fileLine.Replace(match, "").Trim();
                                if (false == Directory.Exists(folder))
                                {
                                    foreach (var path in currentSourceDirectories)
                                    {
                                        if (Directory.Exists(Path.Combine(path, folder)))
                                        {
                                            folder = Path.Combine(path, folder);
                                            break;
                                        }
                                    }
                                }
                                foreach (var file in Files.getFilesFromDir_returnFullPath(folder, "*.cs", true))
                                {
                                    if (false == sourceCodeFiles.Contains(file) && false == filesToAdd.Contains(file))
                                    {
                                        filesToAdd.Add(file);
                                    }
                                }
                            }

                            else
                            {
                                match = StringsAndLists.TextStartsWithStringListItem(fileLine, specialO2Tag_PathMapping);
                                if (match != "")
                                {
                                    addCompilationPathMappings(fileLine.remove(match));
                                }
                            }
                        }
                    }
                }
            }

            applyCompilationPathMappings(filesToAdd);

            // add them to the list (checking if the file exist)
            if (filesToAdd.Count > 0)
            {
                PublicDI.log.info("There are {0} extra files to add to the list of source code files to compile: {0}", filesToAdd.Count);
                foreach (var file in filesToAdd)
                {
                    var filePath = "";
                    if (File.Exists(file))
                    {
                        filePath = file;
                    }
                    else
                    {
                        // try to find the file in the current sourceCodeFiles directories
                        foreach (var directory in currentSourceDirectories)
                        {
                            if (File.Exists(Path.Combine(directory, file)))
                            {
                                filePath = Path.Combine(directory, file);
                                break;
                            }
                        }
                        if (filePath.fileExists().isFalse())
                        {
                            filePath = findScriptOnLocalScriptFolder(file);
                        }

                        if (filePath == "")
                        {
                            PublicDI.log.error("in addSourceFileOrFolderIncludedInSourceCode, could not file file to add: {0}", file);
                        }
                    }
                    if (filePath != "")
                    {
                        filePath = Path.GetFullPath(filePath);
                        if (false == sourceCodeFiles.lower().Contains(filePath.lower()))
                        {
                            sourceCodeFiles.Add(filePath);
                            addSourceFileOrFolderIncludedInSourceCode(sourceCodeFiles, referencedAssemblies); // we need to recursively add new new dependencies
                        }
                    }
                }
            }
        }