var Path = require("path"),
    FS   = require("fs"),
    Task = require("sake/task")
;

//------------------------------------------------------------------------
// Publics
//------------------------------------------------------------------------
module.exports = Task.derive({
    get exists () {
        return Path.existsSync(this.name);
    },
    /**
     * @property isNeeded
     * @type {boolean}
     * @override Task#isNeeded
     */
    get isNeeded () {
        var outOfDate = this.prerequisites.some(function (preq) {
                var t = Task.get(preq);
                return t && t.timestamp > this.timestamp;
            }, this)
        ;
        
        return !this.exists || outOfDate;
    },

    /**
     * @property timestamp
     * @type {integer}
     * @override Task#timestamp
     */
    get timestamp () {
        if (Path.existsSync(this.name)) {
            return (new Date(FS.statSync(this.name).mtime)).getTime();
        }
        else {
            return Date.now();
        }
    }
});

@@ -1,12 +1,13 @@
+%0A
 var Path = r
@@ -275,16 +275,166 @@
 erive(%7B%0A
+    self: %7B%0A        synthesize: function (filepath) %7B%0A            return Path.existsSync(filepath) ? new this(filepath) : null;%0A        %7D%0A    %7D,%0A    %0A
     get 

Add static synthesize method.