PsiClass (DataContext context) { Editor editor = CommonDataKeys.EDITOR.getData(context); Project project = CommonDataKeys.PROJECT.getData(context); if (editor == null || project == null) return null; PsiFile file = CommonDataKeys.PSI_FILE.getData(context); if (file == null) return null; PsiClass contextClass = PsiTreeUtil.findElementOfClassAtOffset(file, editor.getCaretModel().getOffset(), PsiClass.class, false); if (contextClass == null || contextClass.isEnum() || contextClass.isInterface() || contextClass instanceof PsiAnonymousClass) { return null; } final JavaPsiFacade javaPsiFacade = JavaPsiFacade.getInstance(file.getProject()); PsiClass componentClass = javaPsiFacade.findClass(BASE_COMPONENT, file.getResolveScope()); if (componentClass == null || !contextClass.isInheritor(componentClass, true)) return null; PsiClass persistenceStateComponentClass = javaPsiFacade.findClass(PERSISTENCE_STATE_COMPONENT, file.getResolveScope()); if (persistenceStateComponentClass == null || contextClass.isInheritor(persistenceStateComponentClass, true)) return null; return contextClass; }