import org.apache.tools.ant.Task;\r
import org.apache.tools.ant.taskdefs.Sequential;\r
import org.tianocore.common.logger.EdkLog;\r
+import org.tianocore.common.cache.FileTimeStamp;\r
\r
/**\r
Class OnDepdendency is used to check the timestamp between source files and\r
be re-generated from source files.\r
**/\r
public class OnDependency extends Task {\r
- ///\r
- /// cache the modified timestamp of files accessed, to speed up the depencey check\r
- /// \r
- private Map<String, Long> timeStampCache = new HashMap<String, Long>();\r
- ///\r
- /// source files list\r
- ///\r
+ //\r
+ // source files list\r
+ //\r
private DpFileList sources = null;\r
- ///\r
- /// target files list\r
- ///\r
+\r
+ //\r
+ // target files list\r
+ //\r
private DpFileList targets = null;\r
- ///\r
- /// tasks to be performed to generate target files\r
- ///\r
+\r
+ //\r
+ // tasks to be performed to generate target files\r
+ //\r
private Sequential task = null;\r
\r
- ///\r
- /// An empty constructor for an ANT task can avoid some potential issues\r
- ///\r
+ /**\r
+ An empty constructor for an ANT task can avoid some potential issues\r
+ **/\r
public OnDependency(){\r
}\r
\r
if (isOutOfDate() && task != null) {\r
task.perform();\r
}\r
+\r
+ //\r
+ // Update the time stamp of target files since they are just re-generated\r
+ // \r
+ for (Iterator dstIt = targets.nameList.iterator(); dstIt.hasNext();) {\r
+ FileTimeStamp.update((String)dstIt.next());\r
+ }\r
}\r
\r
- ///\r
- /// check if the target files are outofdate\r
- ///\r
+ //\r
+ // check if the target files are outofdate\r
+ //\r
private boolean isOutOfDate() {\r
///\r
/// if no source files specified, take it as a fresh start\r
return true;\r
}\r
\r
- long dstTimeStamp = dstFile.lastModified();\r
+ long dstTimeStamp = FileTimeStamp.get(dstFileName);\r
Iterator srcIt = sources.nameList.iterator();\r
while (srcIt.hasNext()) {\r
String srcFileName = (String)srcIt.next();\r
- long srcTimeStamp;\r
-\r
- if (timeStampCache.containsKey(srcFileName)) {\r
- srcTimeStamp = ((Long)timeStampCache.get(srcFileName)).longValue();\r
- } else {\r
- File srcFile = new File(srcFileName);\r
- if (!srcFile.exists()) {\r
- throw new BuildException("Source File name: " + srcFileName + " doesn't exist!!!");\r
- }\r
- srcTimeStamp = srcFile.lastModified();\r
- timeStampCache.put(srcFileName, new Long(srcTimeStamp));\r
+ long srcTimeStamp = FileTimeStamp.get(srcFileName);\r
+\r
+ if (srcTimeStamp == 0) {\r
+ //\r
+ // time stamp 0 means that the file doesn't exist\r
+ // \r
+ throw new BuildException("Source File name: " + srcFileName + " doesn't exist!!!");\r
}\r
\r
if (dstTimeStamp < srcTimeStamp) {\r