boolean (PsiClassType psiType, Set<PsiClass> checked) { if (TypeUtils.isJavaLangObject(psiType)) return true; PsiClass psiClass = psiType.resolve(); if (psiClass == null || !checked.add(psiClass)) return false; PsiMethod[] constructors = psiClass.getConstructors(); for (PsiMethod constructor : constructors) { if (constructor.getParameterList().isEmpty()) { PsiElement nav = constructor.getNavigationElement(); if (nav instanceof PsiMethod) { constructor = (PsiMethod)nav; } PsiCodeBlock body = constructor.getBody(); if (body == null || !ControlFlowUtils.isEmptyCodeBlock(body)) return false; } } for (PsiField field : psiClass.getFields()) { if (!field.hasModifierProperty(PsiModifier.STATIC)) return false; } PsiClassType[] supers = psiClass.getExtendsListTypes(); return supers.length == 0 || supers.length == 1 && isStatelessSuperClass(supers[0], checked); }