void (PsiDocTag tag, JavadocManager manager, PsiElement context, ProblemsHolder holder, boolean isOnTheFly) { PsiDocTagValue value = tag.getValueElement(); if (value == null) return; String tagName = tag.getName(); JavadocTagInfo info = manager.getTagInfo(tagName); if (info != null && !info.isValidInContext(context)) return; if (info != null && info.isInline()) { String message = info.checkTagValue(value); if (message != null) { holder.registerProblem(holder.getManager().createProblemDescriptor( value, message, isOnTheFly, null, ProblemHighlightType.LIKE_UNKNOWN_SYMBOL)); } } PsiReference reference = value.getReference(); if (reference == null) return; int textOffset = value.getTextOffset(); if (textOffset == value.getTextRange().getEndOffset()) return; PsiDocTagValue valueElement = tag.getValueElement(); if (valueElement == null) return; PsiElement element = reference.resolve(); String paramName = value.getContainingFile().getViewProvider().getContents().subSequence(textOffset, value.getTextRange().getEndOffset()).toString(); String message = element == null && reference instanceof PsiPolyVariantReference ? getResolveErrorMessage(((PsiPolyVariantReference)reference).multiResolve(false), context, paramName) : getResolveErrorMessage(element, context, paramName); if (message == null) { return; } List<LocalQuickFix> fixes = new ArrayList<>(); if (isOnTheFly && "param".equals(tagName)) { PsiDocCommentOwner commentOwner = PsiTreeUtil.getParentOfType(tag, PsiDocCommentOwner.class); if (commentOwner instanceof PsiMethod method) { PsiParameter[] parameters = method.getParameterList().getParameters(); PsiDocTag[] tags = tag.getContainingComment().getTags(); Set<String> unboundParams = new HashSet<>(); for (PsiParameter parameter : parameters) { if (!MissingJavadocInspection.hasTagForParameter(tags, parameter)) { unboundParams.add(parameter.getName()); } } if (!unboundParams.isEmpty()) { fixes.add(new RenameReferenceQuickFix(unboundParams)); } } } fixes.add(new RemoveTagFix(tagName, paramName)); if (isOnTheFly && element != null && REPORT_INACCESSIBLE) { fixes.add(LocalQuickFix.from(new UpdateInspectionOptionFix( this, "REPORT_INACCESSIBLE", JavaBundle.message("disable.report.inaccessible.symbols.fix"), false))); } holder.registerProblem(holder.getManager().createProblemDescriptor( valueElement, reference.getRangeInElement(), message, ProblemHighlightType.LIKE_UNKNOWN_SYMBOL, isOnTheFly, fixes.toArray(LocalQuickFix.EMPTY_ARRAY))); }