Icon (PsiClass psiClass) { PsiMethod method = getMethod(psiClass, false); if (method != null) { if (method.hasModifierProperty(PsiModifier.ABSTRACT)) { return null; } return AllIcons.Hierarchy.MethodDefined; } if (myTreeStructure.isSuperClassForBaseClass(psiClass)) { return AllIcons.Hierarchy.MethodNotDefined; } boolean isAbstractClass = psiClass.hasModifierProperty(PsiModifier.ABSTRACT); // was it implemented is in superclasses? PsiMethod baseClassMethod = getMethod(psiClass, true); boolean hasBaseImplementation = baseClassMethod != null && !baseClassMethod.hasModifierProperty(PsiModifier.ABSTRACT); if (hasBaseImplementation || isAbstractClass) { return AllIcons.Hierarchy.MethodNotDefined; } else { return AllIcons.Hierarchy.ShouldDefineMethod; } }