package org.jetbrains.plugins.cucumber.inspections; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.cucumber.CucumberBundle; import org.jetbrains.plugins.cucumber.psi.*; import java.util.List; public class GherkinBrokenTableInspection extends GherkinInspection { @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, boolean isOnTheFly) { return new GherkinElementVisitor() { @Override public void visitScenarioOutline(GherkinScenarioOutline outline) { final List<GherkinExamplesBlock> examples = outline.getExamplesBlocks(); for (GherkinExamplesBlock block : examples) { if (block.getTable() != null) { checkTable(block.getTable(), holder); } } } @Override public void visitStep(GherkinStep step) { final GherkinTable table = PsiTreeUtil.getChildOfType(step, GherkinTable.class); if (table != null) { checkTable(table, holder); } } }; } private static void checkTable(@NotNull final GherkinTable table, @NotNull final ProblemsHolder holder) { GherkinTableRow header = table.getHeaderRow(); for (GherkinTableRow row : table.getDataRows()) { if (header == null) { header = row; } if (row.getPsiCells().size() != header.getPsiCells().size()) { holder.registerProblem(row, CucumberBundle.message("inspection.gherkin.table.is.broken.row.error.message")); } } } @Nls @NotNull @Override public String getDisplayName() { return CucumberBundle.message("inspection.gherkin.table.is.broken.name"); } @NotNull @Override public String getShortName() { return "GherkinBrokenTableInspection"; } }