package org.intellij.sonar.analysis; import java.util.Set; import com.intellij.codeInspection.GlobalInspectionContext; import com.intellij.codeInspection.GlobalSimpleInspectionTool; import com.intellij.codeInspection.InspectionManager; import com.intellij.codeInspection.ProblemDescriptionsProcessor; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiFile; import org.intellij.sonar.index.IssuesByFileIndex; import org.intellij.sonar.index.SonarIssue; import org.intellij.sonar.util.Finders; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; public abstract class BaseGlobalInspectionTool extends GlobalSimpleInspectionTool { @Override public void checkFile( @NotNull final PsiFile psiFile, @NotNull final InspectionManager manager, @NotNull final ProblemsHolder problemsHolder, @NotNull final GlobalInspectionContext globalContext, @NotNull final ProblemDescriptionsProcessor problemDescriptionsProcessor ) { Set<SonarIssue> issues = IssuesByFileIndex.getIssuesForFile(psiFile); for (final SonarIssue issue : issues) { if (!processIssue(issue)) continue; final ProblemHighlightType severity = SonarToIjSeverityMapping.toProblemHighlightType(issue.getSeverity()); final TextRange textRange = Finders.getLineRange(psiFile,issue.getLine()); final ProblemDescriptor problemDescriptor = problemsHolder.getManager().createProblemDescriptor( psiFile, textRange, issue.formattedMessage()+" "+issue.getRuleKey(), severity, false ); problemDescriptionsProcessor.addProblemElement( globalContext.getRefManager().getReference(psiFile), problemDescriptor ); } } /** @see com.intellij.codeInspection.InspectionEP#displayName @see com.intellij.codeInspection.InspectionEP#key @see com.intellij.codeInspection.InspectionEP#bundle */ @Nls @NotNull @Override public String getDisplayName() { return "SonarQube Issue"; } public abstract Boolean processIssue(SonarIssue issue); }