void (@NotNull PsiAnnotation annotation) { super.visitAnnotation(annotation); if (!CommonClassNames.JAVA_IO_SERIAL.equals(annotation.getQualifiedName())) return; PsiClass psiClass = PsiTreeUtil.getParentOfType(annotation, PsiClass.class); if (psiClass == null) return; if (!SerializationUtils.isSerializable(psiClass)) { registerError(annotation, annotation); return; } PsiAnnotationOwner annotationOwner = annotation.getOwner(); if (!(annotationOwner instanceof PsiModifierList)) return; PsiElement annotationOwnerParent = ((PsiModifierList)annotationOwner).getParent(); PsiField psiField = null; PsiMethod psiMethod = null; if (annotationOwnerParent instanceof PsiField) { psiField = (PsiField)annotationOwnerParent; } else if (annotationOwnerParent instanceof PsiMethod) { psiMethod = (PsiMethod)annotationOwnerParent; } else { return; } boolean isWellAnnotatedElement; if (SerializationUtils.isExternalizable(psiClass)) { isWellAnnotatedElement = psiField == null ? MissingSerialAnnotationInspection.isSerialMethodInExternalizable(psiMethod) : SerializationUtils.isSerialVersionUid(psiField); } else { isWellAnnotatedElement = psiField == null ? MissingSerialAnnotationInspection.isSerialMethodInSerializable(psiMethod) : SerializationUtils.isSerialVersionUid(psiField) || SerializationUtils.isSerialPersistentFields(psiField); } if (!isWellAnnotatedElement) { registerError(annotation, annotation); } }