private void recursiveSourceFileJavaSearch(boolean firstTime,String scriptFileJavaCannonPath,int rootFolderOfSourcesIndex,FileExt parentPath,String[] relPathList,ClassDescriptorSourceFileRegistry sourceRegistry,LinkedList<ClassDescriptorSourceUnit> updatedSourceFiles,LinkedList<ClassDescriptorSourceUnit> newSourceFiles)
    {
        FileExt rootFolderOfSources = parent.getFolderSourceList().getArray()[rootFolderOfSourcesIndex];           
        JProxyInputSourceFileExcludedListener listener = parent.getJProxyInputSourceFileExcludedListener();        
        
        for(String relPath : relPathList)
        {
            File file = new File(parentPath.getCanonicalPath() + "/" + relPath);
            FileExt fileExt = new FileExt(file);        
            if (file.isDirectory())
            {
                if (listener != null && listener.isExcluded(file,rootFolderOfSources.getFile())) 
                    continue;                
                
                String[] children = file.list();  // Si está vacío el array está vacío pero existe
                recursiveSourceFileJavaSearch(firstTime,scriptFileJavaCannonPath,rootFolderOfSourcesIndex,fileExt,children,sourceRegistry,updatedSourceFiles,newSourceFiles);
            }
            else
            {
                String ext = JProxyUtil.getFileExtension(file); // Si no tiene extensión devuelve ""
                if (!"java".equals(ext)) continue;
                //if (!"jsh".equals(ext)) continue;

                String cannonPath = JProxyUtil.getCanonicalPath(file);
                if (scriptFileJavaCannonPath != null && scriptFileJavaCannonPath.equals(cannonPath))
                    continue; // Es el propio archivo script inicial que es .java, así evitamos considerarlo dos veces
                
                if (listener != null && listener.isExcluded(file,rootFolderOfSources.getFile())) 
                    continue;
                                
                SourceFileJavaNormal sourceFile = new SourceFileJavaNormal(fileExt,rootFolderOfSources);
                processSourceFileJava(firstTime,sourceFile,sourceRegistry,updatedSourceFiles,newSourceFiles);
            }
        }
    }