TreeSet<ModulesKey> inModulesManager = new TreeSet<ModulesKey>(Arrays.asList(onlyDirectModules));
Set<String> allAdditionalInfoModuleNames = new TreeSet<String>();
List<Tuple<AbstractAdditionalTokensInfo, IPythonNature>> additionalInfoAndNature = AdditionalProjectInterpreterInfo
.getAdditionalInfoAndNature(nature, false, false, false);
AbstractAdditionalTokensInfo additionalProjectInfo;
if (additionalInfoAndNature.size() == 0) {
addChild(new LeafElement(this, "No additional infos found (1 expected) -- skipping other checks."));
return;
} else {
if (additionalInfoAndNature.size() > 1) {
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format(
"%s additional infos found (only 1 expected) -- continuing checks but analysis may be wrong.",
additionalInfoAndNature.size())));
}
additionalProjectInfo = additionalInfoAndNature.get(0).o1;
allAdditionalInfoModuleNames.addAll(additionalProjectInfo.getAllModulesWithTokens());
}
for (ModulesKey key : inModulesManager) {
if (!expectedModuleNames.contains(key)) {
info.modulesNotInDisk.add(key);
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format("%s exists in memory but not in the disk.", key)));
}
}
ModulesKey tempKey = new ModulesKey(null, null);
for (String s : allAdditionalInfoModuleNames) {
tempKey.name = s;
if (!expectedModuleNames.contains(tempKey)) {
info.additionalModulesNotInDisk.add(s);
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format(
"%s exists in the additional info but not in the disk.", s)));
}
}
for (ModulesKey key : expectedModuleNames) {
boolean isInModulesManager = inModulesManager.contains(key);
if (!isInModulesManager) {
info.modulesNotInMemory.add(key);
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format("%s exists in the disk but not in memory.", key)));
}
if (!allAdditionalInfoModuleNames.contains(key.name)) {
try {
AbstractModule mod = AbstractModule.createModule(key.name, key.file, info.nature, true);
if (!(mod instanceof SourceModule)) {
continue;
}
SourceModule module = (SourceModule) mod;
if (module == null || module.getAst() == null) {
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format(
"Warning: cannot parse: %s - %s (so, it's ok not having additional info on it)",
key.name, key.file)));
} else {
try {
Iterator<ASTEntry> innerEntriesForAST = AbstractAdditionalDependencyInfo
.getInnerEntriesForAST(module.getAst()).o2;
if (innerEntriesForAST.hasNext()) {
info.moduleNotInAdditionalInfo.add(module);
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format(
"The additional info index of the module: %s is not updated.", key.name)));
}
} catch (Exception e) {
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format(
"Unexpected error happened on: %s - %s: %s", key.name, key.file, e.getMessage())));
}
}
} catch (IOException e) {
//OK, it cannot be parsed, so, we cannot generate its info
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format(
"Warning: cannot parse: %s - %s (so, it's ok not having additional info on it)", key.name,
key.file)));
}
}
}
//modules manager
if (info.modulesNotInDisk.size() > 0) {
for (ModulesKey m : info.modulesNotInDisk) {
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format("FIX: Removing from modules manager: %s", m)));
}
projectModulesManager.removeModules(info.modulesNotInDisk);
}
for (ModulesKey key : info.modulesNotInMemory) {
addChild(new LeafElement(this, "FIX: Adding to modules manager: " + key));
projectModulesManager.addModule(key);
}
//additional info
for (String s : info.additionalModulesNotInDisk) {
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format("FIX: Removing from additional info: %s", s)));
additionalProjectInfo.removeInfoFromModule(s, true);
}
for (SourceModule mod : info.moduleNotInAdditionalInfo) {
addChild(new LeafElement(this, com.aptana.shared_core.string.StringUtils.format("FIX: Adding to additional info: %s", mod.getName())));
additionalProjectInfo.addAstInfo(mod.getAst(), mod.getModulesKey(), true);
}
}