List<PsiClass> (ExpressionContext context, Expression[] params) { if (params == null || params.length == 0) return null; PsiManager instance = PsiManager.getInstance(context.getProject()); Result result = params[0].calculateResult(context); if (result == null) return null; final String paramResult = result.toString(); if (paramResult == null) return null; final boolean isAllowAbstract = isAllowAbstract(context, params); final PsiClass myBaseClass = JavaPsiFacade.getInstance(instance.getProject()).findClass(paramResult, GlobalSearchScope.allScope(context.getProject())); if (myBaseClass != null) { final List<PsiClass> classes = new ArrayList<>(); ClassInheritorsSearch.search(myBaseClass).forEach(new PsiElementProcessorAdapter<>(new PsiElementProcessor<>() { @Override public boolean execute(@NotNull PsiClass element) { if (isAllowAbstract || !isAbstractOrInterface(element)) { classes.add(element); } return true; } })); return classes; } return null; }