PsiElementVisitor (@NotNull JsonValue root, @Nullable JsonSchemaObject schema, @NotNull JsonSchemaService service, @NotNull ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { if (schema == null) return PsiElementVisitor.EMPTY_VISITOR; final JsonLikePsiWalker walker = JsonLikePsiWalker.getWalker(root, schema); if (walker == null) return PsiElementVisitor.EMPTY_VISITOR; Project project = root.getProject(); return new JsonElementVisitor() { @Override public void visitProperty(@NotNull JsonProperty o) { annotate(o); super.visitProperty(o); } private void annotate(@NotNull JsonProperty o) { JsonPointerPosition position = walker.findPosition(o, true); if (position == null) return; final MatchResult result = new JsonSchemaResolver(project, schema, position).detailedResolve(); Iterable<JsonSchemaObject> iterable; if (result.myExcludingSchemas.size() == 1) { iterable = ContainerUtil.concat(result.mySchemas, result.myExcludingSchemas.get(0)); } else { iterable = result.mySchemas; } for (JsonSchemaObject object : iterable) { String message = object.getDeprecationMessage(); if (message != null) { holder.registerProblem(o.getNameElement(), JsonBundle.message("property.0.is.deprecated.1", o.getName(), message)); return; } } } }; }