package com.seventh7.mybatis.intention;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiJavaFile;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.PsiParameter;
import com.seventh7.mybatis.service.JavaService;
import com.seventh7.mybatis.util.JavaUtils;
import org.jetbrains.annotations.NotNull;
/**
* @author yanglin
*/
public abstract class JavaFileIntentionChooser implements IntentionChooser {
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
if (!(file instanceof PsiJavaFile))
return false;
PsiElement element = file.findElementAt(editor.getCaretModel().getOffset());
return null != element && JavaUtils.isElementWithinInterface(element) && isAvailable(element);
}
public abstract boolean isAvailable(@NotNull PsiElement element);
public boolean isPositionOfParameterDeclaration(@NotNull PsiElement element) {
return element.getParent() instanceof PsiParameter;
}
public boolean isPositionOfMethodDeclaration(@NotNull PsiElement element) {
return element.getParent() instanceof PsiMethod;
}
public boolean isPositionOfInterfaceDeclaration(@NotNull PsiElement element) {
return element.getParent() instanceof PsiClass;
}
public boolean isTargetPresentInXml(@NotNull PsiElement element) {
return JavaService.getInstance(element.getProject()).findWithFindFirstProcessor(element).isPresent();
}
}