package org.intellij.sonar.index; import java.util.Collection; import java.util.Map; import java.util.Optional; import java.util.Set; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; import org.intellij.sonar.persistence.IssuesByFileIndexProjectComponent; public class IssuesByFileIndex { public static Map<String,Set<SonarIssue>> getIndex(Project project) { final Optional<IssuesByFileIndexProjectComponent> indexComponent = IssuesByFileIndexProjectComponent.getInstance( project ); if (!indexComponent.isPresent()) { return Maps.newConcurrentMap(); } else { return indexComponent.get().getIndex(); } } public static Set<SonarIssue> getIssuesForFile(PsiFile psiFile) { String fullPath = psiFile.getVirtualFile().getPath(); Project project = psiFile.getProject(); final Map<String,Set<SonarIssue>> index = getIndex(project); Set<SonarIssue> issues = index.get(fullPath); if (issues == null) { issues = Sets.newLinkedHashSet(); } return issues; } public static void clearIndexFor(Collection<PsiFile> psiFiles) { for (PsiFile psiFile : psiFiles) { getIndex(psiFile.getProject()).remove(psiFile.getVirtualFile().getPath()); } } }