package org.jetbrains.plugins.cucumber.java.steps.search;
import com.intellij.openapi.application.ReadAction;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiReference;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.util.Processor;
import com.intellij.util.QueryExecutor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.cucumber.CucumberUtil;
import org.jetbrains.plugins.cucumber.java.CucumberJavaUtil;
public class CucumberJavaStepDefinitionSearch implements QueryExecutor<PsiReference, ReferencesSearch.SearchParameters> {
@Override
public boolean execute(@NotNull final ReferencesSearch.SearchParameters queryParameters,
@NotNull final Processor<PsiReference> consumer) {
final PsiElement myElement = queryParameters.getElementToSearch();
if (!(myElement instanceof PsiMethod)) {
return true;
}
final PsiMethod method = (PsiMethod)myElement;
Boolean isStepDefinition = ReadAction.compute(() -> CucumberJavaUtil.isStepDefinition(method));
if (!isStepDefinition) {
return true;
}
final PsiAnnotation stepAnnotation =
ReadAction.compute(() -> CucumberJavaUtil.getCucumberStepAnnotation(method));
final String regexp = CucumberJavaUtil.getPatternFromStepDefinition(stepAnnotation);
if (regexp == null) {
return true;
}
return CucumberUtil.findGherkinReferencesToElement(myElement, regexp, consumer, queryParameters.getEffectiveSearchScope());
}
}