private ProjectWrapper( final GantBinding binding, final String prjDir, final String setupScript, final Map<String, String> pathVariables, final boolean loadHistory) { affectedFiles = new HashSet<String>(); myProject = new GantBasedProject(binding == null ? new GantBinding() : binding); myProjectBuilder = myProject.getBuilder(); final File prjFile = new File(prjDir); final boolean dirBased = !(prjFile.isFile() && prjDir.endsWith(".ipr")); myRoot = dirBased ? getCanonicalPath(prjDir) : getCanonicalPath(prjFile.getParent()); final String loadPath = dirBased ? getAbsolutePath(myIDEADir) : prjDir; IdeaProjectLoader.loadFromPath( myProject, loadPath, pathVariables != null ? pathVariables : Collections.<String, String>emptyMap(), setupScript); myProjectSnapshot = myHomeDir + File.separator + myJPSDir + File.separator + myRoot.replace(File.separatorChar, myFileSeparatorReplacement); try { dependencyMapping = new Mappings(getMapDir()); } catch (IOException e) { throw new RuntimeException(e); } backendCallback = dependencyMapping.getCallback(); for (Module m : myProject.getModules().values()) { myModules.put(m.getName(), new ModuleWrapper(m)); } for (Library l : myProject.getLibraries().values()) { myLibraries.put(l.getName(), new LibraryWrapper(l)); } myHistory = loadHistory ? loadSnapshot(affectedFiles) : null; if (loadHistory) { dependencyMapping = myHistory.dependencyMapping; } }