diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.java b/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.java index ee519e983c..bafae9c538 100644 --- a/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.java +++ b/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.java @@ -195,7 +195,7 @@ private List _findPotentialFactories(TypeFactory typeFactory, // First find all potentially relevant static methods for (Method m : ClassUtil.getClassMethods(type.getRawClass())) { - if (!Modifier.isStatic(m.getModifiers())) { + if (!_isIncludableFactoryMethod(m)) { continue; } // all factory methods are fine: @@ -233,7 +233,7 @@ private List _findPotentialFactories(TypeFactory typeFactory, if (primaryMixIn != null) { MemberKey[] methodKeys = null; for (Method mixinFactory : primaryMixIn.getDeclaredMethods()) { - if (!Modifier.isStatic(mixinFactory.getModifiers())) { + if (!_isIncludableFactoryMethod(mixinFactory)) { continue; } if (methodKeys == null) { @@ -270,6 +270,14 @@ private List _findPotentialFactories(TypeFactory typeFactory, return result; } + private static boolean _isIncludableFactoryMethod(Method m) + { + return Modifier.isStatic(m.getModifiers()) + // 09-Nov-2020, ckozak: Avoid considering synthetic methods such as + // lambdas used within methods because they're not relevant. + && !m.isSynthetic(); + } + protected AnnotatedConstructor constructDefaultConstructor(ClassUtil.Ctor ctor, ClassUtil.Ctor mixin) { diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.java b/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.java index d547f0250e..29db7051bb 100644 --- a/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.java +++ b/src/main/java/com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.java @@ -174,7 +174,7 @@ protected void _addMethodMixIns(TypeResolutionContext tc, Class targetClass, } } - private boolean _isIncludableMemberMethod(Method m) + private static boolean _isIncludableMemberMethod(Method m) { if (Modifier.isStatic(m.getModifiers()) // Looks like generics can introduce hidden bridge and/or synthetic methods.