@@ -99,33 +99,47 @@ public boolean isNonStaticInnerClass() {
9999 public abstract List <BeanPropertyDefinition > findProperties ();
100100
101101 /**
102- * Returns the set of property names that are marked to be ignored, from both
103- * per-property {@code @JsonIgnore} markers and class-level
104- * {@code @JsonIgnoreProperties} (annotation and config overrides).
105- * The set is direction-specific: a name may appear for serialization but not
102+ * Returns the full set of property names marked ignored — combining per-property
103+ * {@code @JsonIgnore} markers, class-level {@code @JsonIgnoreProperties}
104+ * (annotation and config overrides), and read/write-only access rules. The set
105+ * is direction-specific: a name may appear for serialization but not
106106 * deserialization, depending on the annotation attributes.
107107 *<p>
108- * <b>Caveat for factory layers:</b> this set is <em>not</em> a complete runtime
109- * ignore-list. Names that collide with a creator parameter may have been
110- * removed during property renaming (see {@code [databind#2001]} /
111- * {@code [databind#2118]} handling in {@code POJOPropertiesCollector}). When
112- * building a deserializer's ignorable-property set, factories must therefore
113- * combine this with {@link #getPropertyIgnorals()}'s direction-specific names
114- * to get the full effective set. See
115- * {@code BeanDeserializerFactory#addBeanProps} for the canonical pattern.
108+ * Per-property names that have been "rescued" by a creator parameter renamed
109+ * to the same name (see {@code [databind#2001]}) are excluded; class-level
110+ * names are absolute and always appear. This is the canonical accessor for
111+ * building a deserializer's runtime ignore-list — factory code does not need
112+ * to combine it with {@link #getPropertyIgnorals()}.
116113 */
117114 public abstract Set <String > getIgnoredPropertyNames ();
118115
116+ /**
117+ * Returns the un-rescued view of {@link #getIgnoredPropertyNames()}: includes
118+ * per-property names that {@code [databind#2001]} would later rescue when a
119+ * creator parameter is renamed to the same name. Class-level names are
120+ * included exactly as in the rescued view (they are absolute either way).
121+ *<p>
122+ * Default implementation returns {@link #getIgnoredPropertyNames()}; subclasses
123+ * backed by a property collector override to return the un-rescued set. Most
124+ * callers should use {@link #getIgnoredPropertyNames()}; this exists for
125+ * tooling that needs to inspect the original ignoral declarations.
126+ *
127+ * @since 3.2
128+ */
129+ public Set <String > getNonRescuedIgnoredPropertyNames () {
130+ return getIgnoredPropertyNames ();
131+ }
132+
119133 /**
120134 * Returns the class-level property ignorals value (annotation plus config overrides),
121135 * pre-computed during property collection. Preferred over re-calling
122136 * {@code findPropertyIgnoralByName()} in factory code since the result is cached.
123137 * Returns {@code null} when neither annotation nor config override defines any ignorals.
124138 *<p>
125- * Note: this only carries class-level ignorals. Per-property {@code @JsonIgnore }
126- * names live in {@link #getIgnoredPropertyNames()} instead. Neither accessor on
127- * its own is a complete runtime ignore-list — see the caveat on
128- * {@link #getIgnoredPropertyNames()} .
139+ * Equivalent to the class-level subset of {@link #getIgnoredPropertyNames() }
140+ * but in {@link JsonIgnoreProperties.Value} form, which additionally carries
141+ * the {@code ignoreUnknown}, {@code allowGetters}, {@code allowSetters}, and
142+ * {@code merge} attributes .
129143 */
130144 public JsonIgnoreProperties .Value getPropertyIgnorals () {
131145 return null ;
0 commit comments