static void markupMethod(OatHeader oatHeader, OatClass oatClassHeader, DexHeader dexHeader,
			ClassDefItem classDefItem, Program program, Symbol oatDataSymbol,
			Namespace classNameSpace, MessageLog log, TaskMonitor monitor)
			throws CancelledException, InvalidInputException {

		if (classDefItem.getClassDataOffset() == 0) {
			return;
		}

		SymbolTable symbolTable = program.getSymbolTable();

		List<EncodedMethod> allMethods =
			OatUtilities.getAllMethods(classDefItem.getClassDataItem());

		if (oatClassHeader.getType() == OatClassType.kOatClassAllCompiled) {
			for (int j = 0; j < oatClassHeader.getMethodOffsets().size(); ++j) {
				monitor.checkCancelled();

				OatMethodOffsets methodOffset = oatClassHeader.getMethodOffsets().get(j);
				if (methodOffset.getCodeOffset() == 0) {
					continue;//undefined address
				}
				Address toAddr = oatDataSymbol.getAddress().add(methodOffset.getCodeOffset());
				toAddr = OatUtilities.adjustForThumbAsNeeded(oatHeader, program, toAddr, log);

				EncodedMethod encodedMethod = allMethods.get(j);

				MethodIDItem methodID = dexHeader.getMethods().get(encodedMethod.getMethodIndex());

				String methodName = DexUtil.convertToString(dexHeader, methodID.getNameIndex());

				symbolTable.createLabel(toAddr, methodName, classNameSpace, SourceType.ANALYSIS);
			}
		}
		else if (oatClassHeader.getType() == OatClassType.kOatClassSomeCompiled) {
			int offset = 0;
			for (int j = 0; j < allMethods.size(); ++j) {
				monitor.checkCancelled();
				if (oatClassHeader.isMethodNative(j)) {
					OatMethodOffsets methodOffset = oatClassHeader.getMethodOffsets().get(offset++);
					if (methodOffset.getCodeOffset() == 0) {
						continue;//undefined address
					}
					Address toAddr = oatDataSymbol.getAddress().add(methodOffset.getCodeOffset());
					toAddr = OatUtilities.adjustForThumbAsNeeded(oatHeader, program, toAddr, log);

					EncodedMethod encodedMethod = allMethods.get(j);
					MethodIDItem methodID =
						dexHeader.getMethods().get(encodedMethod.getMethodIndex());

					String methodName = DexUtil.convertToString(dexHeader, methodID.getNameIndex());

					symbolTable.createLabel(toAddr, methodName, classNameSpace,
						SourceType.ANALYSIS);
				}
			}
		}
		else if (oatClassHeader.getType() == OatClassType.kOatClassNoneCompiled) {
			// do nothing... all methods are still dalvik
		}
		else if (oatClassHeader.getType() == OatClassType.kOatClassMax) {
			throw new RuntimeException("invalid state!!");
		}
	}
Table size is determined by the DexHeader's "classDefsIdsSize" field.
@param caller the caller class
@param address the address to perform markup
@param dexHeader the dex header
@param oatHeader the oat header
@param program the program to markup
@param monitor the task monitor for canceling
@param log the message log for logging messages
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/oat/oatdexfile/OatDexFileUtilities.java