void (PsiClass inheritor, ArrayList<? super UsageInfo> usages) { ClassReferenceScanner scanner = new ClassReferenceSearchingScanner(inheritor); final MyClassInstanceReferenceVisitor instanceVisitor = new MyClassInstanceReferenceVisitor(inheritor, usages); scanner.processReferences( new ClassInstanceScanner(inheritor, instanceVisitor) ); MyClassInheritorMemberReferencesVisitor classMemberVisitor = new MyClassInheritorMemberReferencesVisitor(inheritor, usages, instanceVisitor); inheritor.accept(classMemberVisitor); PsiSubstitutor inheritorSubstitutor = TypeConversionUtil.getSuperClassSubstitutor(myClass, inheritor, PsiSubstitutor.EMPTY); PsiMethod[] methods = inheritor.getMethods(); for (PsiMethod method : methods) { final PsiMethod baseMethod = findSuperMethodInBaseClass(method); if (baseMethod != null) { if (!baseMethod.hasModifierProperty(PsiModifier.ABSTRACT)) { usages.add(new NoLongerOverridingSubClassMethodUsageInfo(method, baseMethod)); } else { final PsiMethod[] methodsByName = myClass.findMethodsByName(method.getName(), false); for (final PsiMethod classMethod : methodsByName) { final MethodSignature signature = classMethod.getSignature(inheritorSubstitutor); if (signature.equals(method.getSignature(PsiSubstitutor.EMPTY))) { if (!classMethod.hasModifierProperty(PsiModifier.ABSTRACT)) { usages.add(new NoLongerOverridingSubClassMethodUsageInfo(method, baseMethod)); break; } } } } } } }