Package org.jetbrains.plugins.cucumber.groovy.steps

Source Code of org.jetbrains.plugins.cucumber.groovy.steps.GrStepDefinition

package org.jetbrains.plugins.cucumber.groovy.steps;

import com.intellij.ide.util.EditSourceUtil;
import com.intellij.openapi.editor.Document;
import com.intellij.pom.Navigatable;
import com.intellij.pom.PomNamedTarget;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.CachedValueProvider;
import com.intellij.psi.util.CachedValuesManager;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.cucumber.groovy.GrCucumberUtil;
import org.jetbrains.plugins.cucumber.steps.AbstractStepDefinition;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* @author Max Medvedev
*/
public class GrStepDefinition extends AbstractStepDefinition implements PomNamedTarget {
  public GrStepDefinition(GrMethodCall stepDefinition) {
    super(stepDefinition);
  }

  public static GrStepDefinition getStepDefinition(final GrMethodCall statement) {
    return CachedValuesManager.getCachedValue(statement, new CachedValueProvider<GrStepDefinition>() {
      @Nullable
      @Override
      public Result<GrStepDefinition> compute() {
        final Document document = PsiDocumentManager.getInstance(statement.getProject()).getDocument(statement.getContainingFile());
        return Result.create(new GrStepDefinition(statement), document);
      }
    });
  }

  @Override
  public List<String> getVariableNames() {
    PsiElement element = getElement();
    if (element instanceof GrMethodCall) {
      GrClosableBlock[] closures = ((GrMethodCall)element).getClosureArguments();
      assert closures.length == 1;
      GrParameter[] parameters = closures[0].getParameterList().getParameters();
      ArrayList<String> result = new ArrayList<String>();
      for (GrParameter parameter : parameters) {
        result.add(parameter.getName());
      }

      return result;
    }
    return Collections.emptyList();
  }

  @Nullable
  @Override
  protected String getCucumberRegexFromElement(PsiElement element) {
    if (!(element instanceof GrMethodCall)) {
      return null;
    }
    return GrCucumberUtil.getStepDefinitionPatternText((GrMethodCall)element);
  }

  @Override
  public String getName() {
    return getCucumberRegex();
  }

  @Override
  public boolean isValid() {
    final PsiElement element = getElement();
    return element != null && element.isValid();
  }

  @Override
  public void navigate(boolean requestFocus) {
    Navigatable descr = EditSourceUtil.getDescriptor(getElement());
    if (descr != null) descr.navigate(requestFocus);
  }

  @Override
  public boolean canNavigate() {
    return EditSourceUtil.canNavigate(getElement());
  }

  @Override
  public boolean canNavigateToSource() {
    return canNavigate();
  }
}
TOP

Related Classes of org.jetbrains.plugins.cucumber.groovy.steps.GrStepDefinition

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.