@Override public void visitNewExpression(@NotNull PsiNewExpression expression) { final PsiType type = expression.getType(); if (!(type instanceof PsiClassType)) { return; } final PsiClass aClass = ((PsiClassType) type).resolve(); if (aClass == null) { return; } if (!UtilityClassUtil.isUtilityClass(aClass)) { return; } registerNewExpressionError(expression); }
@Override public void visitClass(@NotNull PsiClass aClass) { // no call to super, so that it doesn't drill down to inner classes if (aClass.hasModifierProperty(PsiModifier.ABSTRACT)) { return; } if (!UtilityClassUtil.isUtilityClass(aClass)) { return; } if (ignoreClassesWithOnlyMain && hasOnlyMain(aClass)) { return; } if (hasPrivateConstructor(aClass)) { return; } final SearchScope scope = GlobalSearchScope.projectScope(aClass.getProject()); final Query<PsiClass> query = ClassInheritorsSearch.search(aClass, scope, true, true); final PsiClass subclass = query.findFirst(); if (subclass != null) { return; } registerClassError(aClass, aClass); }