void (PsiClass aClass, final MyClassInstanceReferenceVisitor instanceReferenceVisitor) { NonPublicClassMemberWrappersSet members = new NonPublicClassMemberWrappersSet(); members.addElements(aClass.getFields()); members.addElements(aClass.getMethods()); members.addElements(aClass.getInnerClasses()); final RefactoringUtil.IsDescendantOf isDescendantOf = new RefactoringUtil.IsDescendantOf(aClass); final PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage(aClass.getContainingFile().getContainingDirectory()); final GlobalSearchScope packageScope = aPackage == null ? aClass.getResolveScope() : PackageScope.packageScopeWithoutLibraries(aPackage, false); for (final ClassMemberWrapper memberWrapper : members) { ReferencesSearch.search(memberWrapper.getMember(), packageScope, false).forEach(reference -> { final PsiElement element = reference.getElement(); if (element instanceof PsiReferenceExpression expression) { final PsiExpression qualifierExpression = expression.getQualifierExpression(); if (qualifierExpression != null) { final PsiType type = qualifierExpression.getType(); if (type != null) { final PsiClass resolvedTypeClass = PsiUtil.resolveClassInType(type); if (isDescendantOf.value(resolvedTypeClass)) { instanceReferenceVisitor.visitMemberReference(memberWrapper.getMember(), expression, isDescendantOf); } } } else { instanceReferenceVisitor.visitMemberReference(memberWrapper.getMember(), expression, isDescendantOf); } } return true; }); } }