circle)) return array();//如果已经被分析过则直接返回 array_push($this->circle, $domain); $include = array(); $cnts = self::get_src_cnt($domain); $is = $cnts['i']; if(sizeof($is) > 0) foreach($is as $d){ if($recurse) $include = array_merge($include, $this->get_import_srcs($d)); else $include[$d] = self::$_cache[$d]; } //因为依赖关系的前后联系,最后在include中加入当前domain if($recurse) $include[$domain] = $cnts['c']; return $include; } /** * 读取源文件内容,支持缓存,支持覆盖率文件读取,覆盖率路径在Config中配置 * @param string $domain * @see Config::$COVERAGE_PATH */ static function get_src_cnt($domain){ new Analysis(); if(!array_key_exists($domain, self::$_cache)){ $cnt =''; $covcnt = ''; //$path = join('/', explode('.', $domain)).'.js'; //为了支持xx.xx.js类型的文件名而修改 田丽丽 //文件在当前项目存在则取当前项目,否则取tangram项目 require_once 'config.php'; foreach(Config::$SOURCE_PATH as $i=>$d){ if(Config::$DEBUG) var_dump($d.$path); if(file_exists($d.$path)){ $cnt = file_get_contents($d.$path); $cnt.="\n";//读取文件内容必须加个回车 break; } } //尝试读取cov目录下的文件,如果不存在则忽略 $covpath = Config::$COVERAGE_PATH.$path; if(file_exists($covpath)){ if(Config::$DEBUG)var_dump($covpath); $covcnt = file_get_contents($covpath); } else $covcnt = $cnt; if($cnt == ''){ if(Config::$DEBUG) print "fail read file : ".$path; return array('', array(), ''); } if(Config::$DEBUG) print "start read file $domain
"; $is = array(); //正则匹配,提取所有(///import xxx;)中的xxx preg_match_all('/\/\/\/import\s+([^;]+);?/ies', $cnt, $is, PREG_PATTERN_ORDER); //移除//,顺便移除空行 // $cnt = preg_replace('/\/\/.*/m', '', $cnt);TODO:正则处理出现在“”或者正则中的//时出现问题 //移除/**/ // $cnt = preg_replace('/\/\*.*\*\//sU', '', $cnt); self::$_cache[$domain] = array('c'=>$cnt, 'i'=>$is[1], 'cc'=>$covcnt); } return self::$_cache[$domain]; } } ?>