diff options
Diffstat (limited to 'src/main/java/com')
-rw-r--r-- | src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java | 5 | ||||
-rw-r--r-- | src/main/java/com/fasterxml/jackson/databind/util/ClassUtil.java | 10 |
2 files changed, 9 insertions, 6 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java b/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java index 0df42e025..9c84bedd8 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java @@ -875,9 +875,8 @@ name, ((AnnotatedParameter) m).getIndex()); if (ClassUtil.isProxyType(type)) { throw new IllegalArgumentException("Cannot deserialize Proxy class "+type.getName()+" as a Bean"); } - /* also: can't deserialize some local classes: static are ok; in-method not; - * other non-static inner classes are ok - */ + // also: can't deserialize some local classes: static are ok; in-method not; + // other non-static inner classes are ok typeStr = ClassUtil.isLocalType(type, true); if (typeStr != null) { throw new IllegalArgumentException("Cannot deserialize Class "+type.getName()+" (of type "+typeStr+") as a Bean"); diff --git a/src/main/java/com/fasterxml/jackson/databind/util/ClassUtil.java b/src/main/java/com/fasterxml/jackson/databind/util/ClassUtil.java index 2a984dc90..78f5562e9 100644 --- a/src/main/java/com/fasterxml/jackson/databind/util/ClassUtil.java +++ b/src/main/java/com/fasterxml/jackson/databind/util/ClassUtil.java @@ -184,11 +184,15 @@ public final class ClassUtil { /* As per [JACKSON-187], GAE seems to throw SecurityExceptions * here and there... and GAE itself has a bug, too - * (see []). Bah. So we need to catch some wayward exceptions on GAE + * Bah. So we need to catch some wayward exceptions on GAE */ try { + final boolean isStatic = Modifier.isStatic(type.getModifiers()); + // one more: method locals, anonymous, are not good: - if (hasEnclosingMethod(type)) { + // 23-Jun-2020, tatu: [databind#2758] With JDK14+ should allow + // local Record types, however + if (!isStatic && hasEnclosingMethod(type)) { return "local/anonymous"; } /* But how about non-static inner classes? Can't construct @@ -196,7 +200,7 @@ public final class ClassUtil * happens to be enclosing... but that gets convoluted) */ if (!allowNonStatic) { - if (isNonStaticInnerClass(type)) { + if (!isStatic && getEnclosingClass(type) != null) { return "non-static member class"; } } |