Fix: issue 4503 Unable to find the method declaration corresponding to a method reference
diff --git a/javaparser-core/src/main/java/com/github/javaparser/resolution/logic/MethodResolutionLogic.java b/javaparser-core/src/main/java/com/github/javaparser/resolution/logic/MethodResolutionLogic.java
index ec9cd28..e04aae2 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/resolution/logic/MethodResolutionLogic.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/resolution/logic/MethodResolutionLogic.java
@@ -193,7 +193,14 @@
                     // we want to keep this method for future resolution
                     if (actualArgumentType.isConstraint()
                             && withWildcardTolerance
-                            && expectedDeclaredType.isPrimitive()) {
+                            && (actualArgumentType.asConstraintType().getBound().isTypeVariable()
+                                    || (!actualArgumentType
+                                                    .asConstraintType()
+                                                    .getBound()
+                                                    .isTypeVariable()
+                                            && expectedDeclaredType.isAssignableBy(actualArgumentType
+                                                    .asConstraintType()
+                                                    .getBound())))) {
                         needForWildCardTolerance = true;
                         continue;
                     }
diff --git a/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue4503Test.java b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue4503Test.java
new file mode 100755
index 0000000..886fbf7
--- /dev/null
+++ b/javaparser-symbol-solver-testing/src/test/java/com/github/javaparser/symbolsolver/Issue4503Test.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2013-2024 The JavaParser Team.
+ *
+ * This file is part of JavaParser.
+ *
+ * JavaParser can be used either under the terms of
+ * a) the GNU Lesser General Public License as published by
+ *     the Free Software Foundation, either version 3 of the License, or
+ *     (at your option) any later version.
+ * b) the terms of the Apache License
+ *
+ * You should have received a copy of both licenses in LICENCE.LGPL and
+ * LICENCE.APACHE. Please refer to those files for details.
+ *
+ * JavaParser is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ */
+
+package com.github.javaparser.symbolsolver;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+import com.github.javaparser.ParserConfiguration;
+import com.github.javaparser.StaticJavaParser;
+import com.github.javaparser.ast.CompilationUnit;
+import com.github.javaparser.ast.expr.MethodReferenceExpr;
+import com.github.javaparser.symbolsolver.resolution.AbstractResolutionTest;
+import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+public class Issue4503Test extends AbstractResolutionTest {
+
+    @Test
+    void test() {
+        String code = "import java.util.function.Function;\n"
+                + "import java.math.BigDecimal;\n"
+                + "public class Test {\n"
+                + "    public static <T, R> String logAndCatch(String moduleName, Object filter1, Object filter2, T req, Function<T, R> func) {\n"
+                + "        return null;\n"
+                + "    }\n"
+                + "    public void test(String testModule, String filter1, String filter2) {\n"
+                + "        Test.logAndCatch(testModule, filter1, filter2, \"1.2\", this::getAmount);\n"
+                + "    }\n"
+                + "    public BigDecimal getAmount(String amount) {\n"
+                + "        return new BigDecimal(amount);\n"
+                + "    }\n"
+                + "}";
+
+        ParserConfiguration config = new ParserConfiguration();
+        config.setLanguageLevel(ParserConfiguration.LanguageLevel.JAVA_18);
+        config.setSymbolResolver(new JavaSymbolSolver(new ReflectionTypeSolver(false)));
+        StaticJavaParser.setConfiguration(config);
+
+        CompilationUnit cu = StaticJavaParser.parse(code);
+        List<MethodReferenceExpr> exprs = cu.findAll(MethodReferenceExpr.class);
+        for (MethodReferenceExpr expr : exprs) {
+            if (expr.getIdentifier().contentEquals("getAmount")) {
+                assertEquals("Test.getAmount(java.lang.String)", expr.resolve().getQualifiedSignature());
+            }
+        }
+    }
+}