Search in sources :

Example 1 with GherkinScenarioOutlineImpl

use of org.jetbrains.plugins.cucumber.psi.impl.GherkinScenarioOutlineImpl in project intellij-plugins by JetBrains.

the class CucumberCreateExamplesSectionFix method applyFix.

public void applyFix(@NotNull final Project project, @NotNull ProblemDescriptor descriptor) {
    final GherkinScenarioOutlineImpl outline = (GherkinScenarioOutlineImpl) descriptor.getPsiElement();
    final PsiFile featureFile = outline.getContainingFile();
    final String language = GherkinKeywordTable.getFeatureLanguage(featureFile);
    final GherkinKeywordTable keywordsTable = GherkinKeywordTable.getKeywordsTable(featureFile, project);
    final StringBuilder buff = new StringBuilder();
    buff.append(keywordsTable.getScenarioOutlineKeyword()).append(": boo\n");
    buff.append(keywordsTable.getExampleSectionKeyword()).append(":\n|");
    final List<String> params = new ArrayList<>();
    final PsiElement[] elements = outline.getChildren();
    for (PsiElement element : elements) {
        if (!(element instanceof GherkinStep)) {
            continue;
        }
        final GherkinStep step = (GherkinStep) element;
        final List<String> substitutions = step.getParamsSubstitutions();
        for (String substitution : substitutions) {
            if (!params.contains(substitution)) {
                params.add(substitution);
            }
        }
    }
    if (params.isEmpty()) {
        buff.append(" |");
    } else {
        for (String substitution : params) {
            buff.append(' ').append(substitution).append(" |");
        }
    }
    final String text = buff.toString();
    GherkinScenarioOutline fakeScenario = (GherkinScenarioOutline) GherkinElementFactory.createScenarioFromText(project, language, text);
    final GherkinExamplesBlock fakeExampleSection = fakeScenario.getExamplesBlocks().get(0);
    assert fakeExampleSection != null;
    GherkinExamplesBlockImpl addedSection = (GherkinExamplesBlockImpl) outline.add(fakeExampleSection);
    addedSection = CodeInsightUtilCore.forcePsiPostprocessAndRestoreElement(addedSection);
    final GherkinTable table = addedSection.getTable();
    assert table != null;
    final GherkinTableRow headerRow = table.getHeaderRow();
    assert headerRow != null;
    final List<GherkinTableCell> cells = headerRow.getPsiCells();
    final int firstCellOffset = cells.size() > 0 && cells.get(0).getTextLength() > 0 ? cells.get(0).getTextOffset() : headerRow.getTextOffset() + 1;
    final Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
    assert editor != null;
    // commit current document
    final Document document = editor.getDocument();
    PsiDocumentManager.getInstance(project).commitDocument(document);
    editor.getCaretModel().moveToOffset(firstCellOffset);
}
Also used : ArrayList(java.util.ArrayList) Document(com.intellij.openapi.editor.Document) GherkinExamplesBlockImpl(org.jetbrains.plugins.cucumber.psi.impl.GherkinExamplesBlockImpl) GherkinScenarioOutlineImpl(org.jetbrains.plugins.cucumber.psi.impl.GherkinScenarioOutlineImpl) PsiFile(com.intellij.psi.PsiFile) Editor(com.intellij.openapi.editor.Editor) PsiElement(com.intellij.psi.PsiElement)

Aggregations

Document (com.intellij.openapi.editor.Document)1 Editor (com.intellij.openapi.editor.Editor)1 PsiElement (com.intellij.psi.PsiElement)1 PsiFile (com.intellij.psi.PsiFile)1 ArrayList (java.util.ArrayList)1 GherkinExamplesBlockImpl (org.jetbrains.plugins.cucumber.psi.impl.GherkinExamplesBlockImpl)1 GherkinScenarioOutlineImpl (org.jetbrains.plugins.cucumber.psi.impl.GherkinScenarioOutlineImpl)1