whole_func_string: async function(compileInfo) {
        var t = this;
        var _arguments = arguments;
        var application = compileInfo.application;
        var targetUri = t._getOutputRootUri(application);
        var appRootDir = this.getApplicationRoot(application);
        
        // ResourceUri does not have a trailing "/" because qx.util.ResourceManager.toUri always adds one
        var mapTo = this.getPathMapping(path.join(appRootDir, this.getOutputDir(), "resource"));
        var resourceUri = mapTo ? mapTo : targetUri + "resource";
        
        compileInfo.build = { 
            parts: {}
        };
        await qx.tool.compiler.utils.Promisify.forEachOfSeries(compileInfo.configdata.loader.packages,
            (pkg, pkgId) => {
              compileInfo.build.parts[pkgId] = { 
                  uris: pkg.uris,
                  hashValue: null,
                  modified: true
                };
                                            
              pkg.uris = ["__out__:" + t.getScriptPrefix() + "part-" + pkgId + ".js"];
            });
  
        var libraries = this.getAnalyser().getLibraries();
        var libraryLookup = {};
        libraries.forEach(function(library) {
          libraryLookup[library.getNamespace()] = library;
          compileInfo.configdata.libraries[library.getNamespace()] = {
            sourceUri: ".",
            resourceUri: resourceUri
          };
        });
        
        await qx.Promise.all([
          t._syncAssets(compileInfo),
          
          async () => {
            let buildJson = path.join(appRootDir, "build-data.json");
            let data = await qx.tool.compiler.utils.Json.loadJsonAsync(buildJson);
            if (data !== null) {
              await fs.unlinkAsync(buildJson).catch(() => {});
              try {
                data = data ? JSON.parse(data) : null;
              } catch (ex) {
                // Nothing
              }
              if (data.parts) {
                for (var pkgId in data.parts) {
                  if (compileInfo.build.parts[pkgId]) {
                    compileInfo.build.parts[pkgId].hashValue = data.parts[pkgId].hashValue;
                  }
                }
              }
            }
          }
        ])
        .then(() => t.base(_arguments, compileInfo));
      }
func_code_string: async function(compileInfo) {
        var t = this;
        var _arguments = arguments;
        var application = compileInfo.application;
        var targetUri = t._getOutputRootUri(application);
        var appRootDir = this.getApplicationRoot(application);
        
        // ResourceUri does not have a trailing "/" because qx.util.ResourceManager.toUri always adds one
        var mapTo = this.getPathMapping(path.join(appRootDir, this.getOutputDir(), "resource"));
        var resourceUri = mapTo ? mapTo : targetUri + "resource";
        
        compileInfo.build = { 
            parts: {}
        };
        await qx.tool.compiler.utils.Promisify.forEachOfSeries(compileInfo.configdata.loader.packages,
            (pkg, pkgId) => {
              compileInfo.build.parts[pkgId] = { 
                  uris: pkg.uris,
                  hashValue: null,
                  modified: true
                };
                                            
              pkg.uris = ["__out__:" + t.getScriptPrefix() + "part-" + pkgId + ".js"];
            });
  
        var libraries = this.getAnalyser().getLibraries();
        var libraryLookup = {};
        libraries.forEach(function(library) {
          libraryLookup[library.getNamespace()] = library;
          compileInfo.configdata.libraries[library.getNamespace()] = {
            sourceUri: ".",
            resourceUri: resourceUri
          };
        });
        
        await qx.Promise.all([
          t._syncAssets(compileInfo),
          
          async () => {
            let buildJson = path.join(appRootDir, "build-data.json");
            let data = await qx.tool.compiler.utils.Json.loadJsonAsync(buildJson);
            if (data !== null) {
              await fs.unlinkAsync(buildJson).catch(() => {});
              try {
                data = data ? JSON.parse(data) : null;
              } catch (ex) {
                // Nothing
              }
              if (data.parts) {
                for (var pkgId in data.parts) {
                  if (compileInfo.build.parts[pkgId]) {
                    compileInfo.build.parts[pkgId].hashValue = data.parts[pkgId].hashValue;
                  }
                }
              }
            }
          }
        ])
        .then(() => t.base(_arguments, compileInfo));
      }
func_documentation_string: /*
  @Override