package de.jigp.plugin.actions.contextmenu;
import com.intellij.openapi.actionSystem.DataContext;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.actionSystem.EditorActionHandler;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.pom.Navigatable;
import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import de.jigp.plugin.PsiHelper;
public abstract class GeneratorEditorActionHandler extends EditorActionHandler {
public void execute(Editor editor, DataContext dataContext) {
final PsiHelper psiHelper = new PsiHelper(dataContext);
final PsiClass selectedInterface = psiHelper.getCurrentClass();
final Project project = psiHelper.getProject();
// if (selectedInterface != null && !selectedInterface.isInterface()) {
// com.intellij.openapi.ui.Messages.showMessageDialog(project, "Generator works just for interfaces", "Warning", Messages.getWarningIcon());
// return;
// }
JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
psiHelper.setElementFactory(psiFacade.getElementFactory());
Computable<PsiClass> computable = createGenerator(dataContext, selectedInterface);
PsiClass builderClass = com.intellij.openapi.application.ApplicationManager.getApplication().runWriteAction(computable);
if (builderClass != null) {
jumpToGeneratoedClass(builderClass);
}
}
private void jumpToGeneratoedClass(PsiClass psiClass) {
Navigatable navigatable = com.intellij.ide.util.EditSourceUtil.getDescriptor(psiClass);
if (navigatable != null) {
navigatable.navigate(true);
}
}
protected abstract Computable<PsiClass> createGenerator(DataContext dataContext, PsiClass selectedInterface);
}