public static boolean paramClassesMatch()

in core/src/main/java/org/adoptopenjdk/jitwatch/util/ParseUtil.java [468:579]


	public static boolean paramClassesMatch(boolean memberHasVarArgs, List<String> memberParamClassesNames,
			List<String> signatureParamClassesNames, boolean matchTypesExactly)
	{
		boolean result = true;

		final int memberParamCount = memberParamClassesNames.size();
		final int signatureParamCount = signatureParamClassesNames.size();

		if (DEBUG_LOGGING_SIG_MATCH)
		{
			logger.debug("MemberParamCount:{} SignatureParamCount:{} varArgs:{}", memberParamCount, signatureParamCount,
							memberHasVarArgs);
		}

		if (memberParamCount == 0 && signatureParamCount == 0)
		{
			if (DEBUG_LOGGING_SIG_MATCH)
			{
				logger.debug("both have zero params");
			}

			result = true;
		}
		else if (signatureParamCount < memberParamCount)
		{
			if (DEBUG_LOGGING_SIG_MATCH)
			{
				logger.debug("signature has less params than method");
			}

			result = false;
		}
		else if (signatureParamCount > memberParamCount && !memberHasVarArgs)
		{
			if (DEBUG_LOGGING_SIG_MATCH)
			{
				logger.debug("signature has more params than non-varargs method");
			}

			result = false;
		}
		else
		{
			// signature params >= memberParams

			int memPos = 0;

			for (int sigPos = 0; sigPos < signatureParamCount; sigPos++)
			{
				String sigParamClassName = signatureParamClassesNames.get(sigPos);

				String memParamClassName = memberParamClassesNames.get(memPos);

				if (DEBUG_LOGGING_SIG_MATCH)
				{
					logger.debug("Comparing member param[{}] {} to sig param[{}] {}", memPos, memParamClassName, sigPos, sigParamClassName);
				}

				boolean classMatch = false;

				if (matchTypesExactly)
				{
					classMatch = memParamClassName.equals(sigParamClassName);
				}
				else
				{
					classMatch = memParamClassName.equals(sigParamClassName);
					logger.error("matchTypesExactly=false not implemented");
				}

				if (classMatch)
				{
					if (DEBUG_LOGGING_SIG_MATCH)
					{
						logger.debug("{} equals/isAssignableFrom {}", memParamClassName, sigParamClassName);
					}
				}
				else
				{
					boolean memberParamCouldBeVarArgs = false;

					boolean isLastParameter = (memPos == memberParamCount - 1);

					if (memberHasVarArgs && isLastParameter)
					{
						memberParamCouldBeVarArgs = true;
					}

					if (memberParamCouldBeVarArgs)
					{
						logger.debug("vararg member param {} approximately {}", memParamClassName, sigParamClassName);
					}
					else
					{
						result = false;
						break;
					}

				} // if classMatch

				memPos++;

				if (memPos >= memberParamCount)
				{
					memPos = memberParamCount - 1;
				}

			} // for
		}

		return result;
	}