void (@NotNull XmlAttributeValue xmlAttributeValue) { super.visitXmlAttributeValue(xmlAttributeValue); final PsiElement valueParent = xmlAttributeValue.getParent(); if (!(valueParent instanceof XmlAttribute attribute)) return; final List<PsiMethod> eventHandlerMethods = getEventHandlerMethods(attribute); if (eventHandlerMethods.size() == 0) return; if (eventHandlerMethods.size() != 1) { holder.registerProblem(xmlAttributeValue, JavaFXBundle.message("inspection.javafx.event.handler.ambiguous.problem")); } if (myDetectNonVoidReturnType) { eventHandlerMethods.stream() .map(PsiMethod::getReturnType) .filter(returnType -> !PsiTypes.voidType().equals(returnType)) .findAny() .ifPresent(ignored -> holder.registerProblem(xmlAttributeValue, JavaFXBundle.message("inspection.javafx.event.handler.return.type.problem"))); } final PsiClassType declaredType = JavaFxPsiUtil.getDeclaredEventType(attribute); if (declaredType == null) return; for (PsiMethod method : eventHandlerMethods) { final PsiParameter[] parameters = method.getParameterList().getParameters(); if (parameters.length == 1) { final PsiType actualType = parameters[0].getType(); if (actualType instanceof PsiClassType) { if (!actualType.isAssignableFrom(declaredType)) { final LocalQuickFix parameterTypeFix = new ChangeParameterTypeQuickFix(attribute, method, declaredType); final PsiClassType actualRawType = ((PsiClassType)actualType).rawType(); final PsiClassType expectedRawType = declaredType.rawType(); if (actualRawType.isAssignableFrom(expectedRawType)) { final List<LocalQuickFix> quickFixes = new ArrayList<>(); quickFixes.add(parameterTypeFix); collectFieldTypeFixes(attribute, (PsiClassType)actualType, quickFixes); holder.registerProblem(xmlAttributeValue, JavaFXBundle.message("inspection.javafx.event.handler.incompatible.generic.parameter.problem", actualType.getCanonicalText(), declaredType.getCanonicalText()), quickFixes.toArray(LocalQuickFix.EMPTY_ARRAY)); } else { holder.registerProblem(xmlAttributeValue, JavaFXBundle.message("inspection.javafx.event.handler.incompatible.handler.argument", actualRawType.getCanonicalText(), expectedRawType.getCanonicalText()), parameterTypeFix); } } } } } }