public static boolean memberMatchesMethodID()

in core/src/main/java/org/adoptopenjdk/jitwatch/compilation/CompilationUtil.java [200:320]


	public static boolean memberMatchesMethodID(IMetaMember member, String methodID, IParseDictionary parseDictionary)
	{
		boolean result = false;

		Tag methodTag = parseDictionary.getMethod(methodID);

		StringBuilder builder = null;

		if (DEBUG_LOGGING_METHOD_ID_MATCH)
		{
			builder = new StringBuilder();
			builder.append(
					String.format("methodID: %s methodTag: %s", methodID, methodTag != null ? methodTag.toString(true) : "null"))
					.append(S_NEWLINE);
			builder.append(String.format("member: %s ", member.toString())).append(S_NEWLINE);
		}

		if (methodTag != null)
		{
			Map<String, String> methodTagAttributes = methodTag.getAttributes();

			String klassID = methodTagAttributes.get(ATTR_HOLDER);

			Tag klassTag = parseDictionary.getKlass(klassID);

			if (klassTag != null)
			{
				if (DEBUG_LOGGING_METHOD_ID_MATCH)
				{
					builder.append(String.format("klass tag: %s", klassTag.toString(false))).append(S_NEWLINE);
				}

				String klassAttrName = klassTag.getAttributes().get(ATTR_NAME);
				String methodAttrName = StringUtil.replaceXMLEntities(methodTagAttributes.get(ATTR_NAME));

				if (klassAttrName != null)
				{
					klassAttrName = klassAttrName.replace(C_SLASH, C_DOT);
				}

				String returnType = ParseUtil.getMethodTagReturn(methodTag, parseDictionary);
				List<String> paramTypes = ParseUtil.getMethodTagArguments(methodTag, parseDictionary);

				if (DEBUG_LOGGING_METHOD_ID_MATCH)
				{
					builder.append(String.format("memberName: %s/%s", member.getMemberName(), methodAttrName)).append(S_NEWLINE);
					builder.append(String.format("metaClass : %s/%s", member.getMetaClass().getFullyQualifiedName(), klassAttrName))
							.append(S_NEWLINE);
					builder.append(String.format("return    : %s/%s", member.getReturnTypeName(), returnType)).append(S_NEWLINE);
					builder.append(String.format("params    : %s/%s", StringUtil.arrayToString(member.getParamTypeNames()),
							StringUtil.listToString(paramTypes))).append(S_NEWLINE);
				}

				boolean nameMatches;

				if (S_CONSTRUCTOR_INIT.equals(methodAttrName))
				{
					if (DEBUG_LOGGING_METHOD_ID_MATCH)
					{
						builder.append(
								String.format("Looks like a constructor. Checking %s vs %s", member.getMemberName(), klassAttrName))
								.append(S_NEWLINE);
					}

					String unqualifiedClassName = StringUtil.getUnqualifiedClassName(klassAttrName);

					nameMatches = member.getMemberName().equals(unqualifiedClassName);
				}
				else
				{
					nameMatches = member.getMemberName().equals(methodAttrName);
				}

				boolean klassMatches = member.getMetaClass().getFullyQualifiedName().equals(klassAttrName);
				boolean returnMatches = member.getReturnTypeName().equals(returnType);

				boolean paramsMatch = true;

				if (member.getParamTypeNames().length == paramTypes.size())
				{
					for (int pos = 0; pos < member.getParamTypeNames().length; pos++)
					{
						String memberParamType = member.getParamTypeNames()[pos];
						String tagParamType = paramTypes.get(pos);

						if (DEBUG_LOGGING_METHOD_ID_MATCH)
						{
							builder.append(String.format("checking: %s/%s", memberParamType, tagParamType)).append(S_NEWLINE);
						}

						if (!memberParamType.equals(tagParamType))
						{
							paramsMatch = false;
							break;
						}
					}
				}
				else
				{
					paramsMatch = false;
				}

				result = nameMatches && klassMatches && returnMatches && paramsMatch;

				if (DEBUG_LOGGING_METHOD_ID_MATCH)
				{
					builder.append(String.format("Matched name: %s klass: %s return: %s params: %s", nameMatches, klassMatches,
							returnMatches, paramsMatch)).append(S_NEWLINE);

					builder.append(String.format("Matches member:%s = %s", member, result)).append(S_NEWLINE);

					if (!result)
					{
						logger.error(builder.toString());
					}
				}
			}
		}

		return result;
	}