void (@NotNull PsiMethod method) { super.visitMethod(method); if (IGNORE_UNCHECKED_OVERRIDING) return; if (!method.isConstructor()) { List<HierarchicalMethodSignature> superMethodSignatures = method.getHierarchicalMethodSignature().getSuperSignatures(); if (!superMethodSignatures.isEmpty() && !method.hasModifierProperty(PsiModifier.STATIC)) { final MethodSignature signature = method.getSignature(PsiSubstitutor.EMPTY); for (MethodSignatureBackedByPsiMethod superSignature : superMethodSignatures) { PsiMethod baseMethod = superSignature.getMethod(); PsiSubstitutor substitutor = MethodSignatureUtil.getSuperMethodSignatureSubstitutor(signature, superSignature); if (substitutor == null) substitutor = superSignature.getSubstitutor(); if (PsiUtil.isRawSubstitutor(baseMethod, superSignature.getSubstitutor())) continue; final PsiType baseReturnType = substitutor.substitute(baseMethod.getReturnType()); final PsiType overriderReturnType = method.getReturnType(); if (baseReturnType == null || overriderReturnType == null) return; if (JavaGenericsUtil.isRawToGeneric(baseReturnType, overriderReturnType)) { final String message = JavaErrorBundle.message("unchecked.overriding.incompatible.return.type", JavaHighlightUtil.formatType(overriderReturnType), JavaHighlightUtil.formatType(baseReturnType)); final PsiTypeElement returnTypeElement = method.getReturnTypeElement(); LOG.assertTrue(returnTypeElement != null); registerProblem(message, null, returnTypeElement, LocalQuickFix.EMPTY_ARRAY); } } } } }