package com.chrisfolger.needsmoredojo.intellij.actions; import com.chrisfolger.needsmoredojo.core.settings.DojoSettings; import com.chrisfolger.needsmoredojo.core.util.PsiFileUtil; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.components.ServiceManager; import com.intellij.psi.PsiFile; public abstract class JavaScriptAction extends AnAction { protected boolean fileAgnostic() { return false; } protected boolean supportsFileType(PsiFile file) { if(file == null || file.getProject() == null) { return false; } DojoSettings settings = ServiceManager.getService(file.getProject(), DojoSettings.class); String[] fileTypes = settings.getSupportedFileTypes().split(","); for(String type : fileTypes) { if(type.trim().equals(file.getVirtualFile().getExtension())) { return true; } } return false; } @Override public void update(AnActionEvent e) { if(e.getProject() == null) { e.getPresentation().setEnabled(false); return; } if(!ServiceManager.getService(e.getProject(), DojoSettings.class).isNeedsMoreDojoEnabled()) { e.getPresentation().setEnabled(false); return; } else { e.getPresentation().setEnabled(true); } if(fileAgnostic()) { e.getPresentation().setEnabled(true); return; } final PsiFile psiFile = PsiFileUtil.getPsiFileInCurrentEditor(e.getProject()); if(psiFile == null) { e.getPresentation().setEnabled(false); return; } if(!supportsFileType(psiFile)) { e.getPresentation().setEnabled(false); return; } e.getPresentation().setEnabled(true); } }