private static boolean areProjectAndLibsParsed(CsmProject project) { if (!project.isStable(null)) { return false; } HashSet<CsmProject> visited = new HashSet<>(); visited.add(project); return areProjectLibsParsed(project.getLibraries(), visited); }
private static boolean areProjectLibsParsed(Collection<CsmProject> libs, Collection<CsmProject> visited) { if (libs != null) { for (CsmProject lib : libs) { if (visited.contains(lib)) { continue; } visited.add(lib); if (!lib.isStable(null) || !areProjectLibsParsed(lib.getLibraries(), visited)) { return false; } } } return true; } }
@Override protected boolean isProjectBeeingParsed(boolean openingSource) { if (!openingSource) { if (getFinder() != null) { CsmFile file = getFinder().getCsmFile(); if (file != null && file.getProject() != null) { return !file.getProject().isStable(file); } } } return false; }
if (isRootNamespase && !getProject().isStable(null)) { PersistentKey key = PersistentKey.createKey(getProject()); if (key != null) {
/** * Notificates projects about finish of parsing in libs. * * @param project - parsed project */ public static void onParseFinish(CsmProject project) { synchronized (instance) { instance.waitingProjects.remove(project); if (areProjectAndLibsParsed(project)) { if (project instanceof ProjectBase) { ((ProjectBase) project).onLibParseFinish(); } for (CsmProject lib : instance.waitingProjects) { if (isProjectsLib(lib, project)) { if (areProjectAndLibsParsed(lib)) { if (lib instanceof ProjectBase) { instance.waitingProjects.remove(lib); ((ProjectBase) lib).onLibParseFinish(); } } } } } else { if(project.isStable(null)) { instance.waitingProjects.add(project); } } } }