package org.infernus.idea.checkstyle.checker; import com.intellij.codeInspection.InspectionManager; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.psi.PsiElement; import org.infernus.idea.checkstyle.CheckStyleBundle; import org.infernus.idea.checkstyle.csapi.SeverityLevel; import org.jetbrains.annotations.NotNull; public class Problem { private final PsiElement target; private final SeverityLevel severityLevel; private final int line; private final int column; private final String message; private final boolean afterEndOfLine; private final boolean suppressErrors; public Problem(@NotNull final PsiElement target, @NotNull final String message, @NotNull final SeverityLevel severityLevel, final int line, final int column, final boolean afterEndOfLine, final boolean suppressErrors) { this.target = target; this.message = message; this.severityLevel = severityLevel; this.line = line; this.column = column; this.afterEndOfLine = afterEndOfLine; this.suppressErrors = suppressErrors; } @NotNull public ProblemDescriptor toProblemDescriptor(final InspectionManager inspectionManager) { return inspectionManager.createProblemDescriptor(target, CheckStyleBundle.message("inspection.message", message()), null, problemHighlightType(), false, afterEndOfLine); } @NotNull public String message() { return message; } @NotNull public SeverityLevel severityLevel() { return severityLevel; } public int line() { return line; } public int column() { return column; } private ProblemHighlightType problemHighlightType() { if (!suppressErrors) { switch (severityLevel()) { case Error: return ProblemHighlightType.ERROR; case Warning: return ProblemHighlightType.GENERIC_ERROR_OR_WARNING; case Info: return ProblemHighlightType.WEAK_WARNING; case Ignore: return ProblemHighlightType.INFORMATION; default: return ProblemHighlightType.GENERIC_ERROR_OR_WARNING; } } return ProblemHighlightType.GENERIC_ERROR_OR_WARNING; } @Override public boolean equals(final Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } final Problem problem = (Problem) o; if (line != problem.line) { return false; } if (column != problem.column) { return false; } if (afterEndOfLine != problem.afterEndOfLine) { return false; } if (suppressErrors != problem.suppressErrors) { return false; } if (!target.equals(problem.target)) { return false; } if (severityLevel != problem.severityLevel) { return false; } return message.equals(problem.message); } @Override public int hashCode() { int result = target.hashCode(); result = 31 * result + severityLevel.hashCode(); result = 31 * result + line; result = 31 * result + column; result = 31 * result + message.hashCode(); result = 31 * result + (afterEndOfLine ? 1 : 0); result = 31 * result + (suppressErrors ? 1 : 0); return result; } }