private void addTypesForNameAndTypeInfo(AbstractConstantPoolInfoJava[] constantPool, int i,
			DataTypeManager dtm) {
		ConstantPoolNameAndTypeInfo nameAndType = (ConstantPoolNameAndTypeInfo) constantPool[i];
		ConstantPoolUtf8Info utf8 =
			(ConstantPoolUtf8Info) constantPool[nameAndType.getDescriptorIndex()];
		String descriptor = utf8.getString();
		//method descriptor
		if (descriptor.contains("(")) {
			List<String> classNames = DescriptorDecoder.getTypeNameList(descriptor, true, false);
			for (String className : classNames) {
				if (isPrimitiveType(className)) {
					continue;
				}
				DescriptorDecoder.resolveClassForString(className, dtm, DWordDataType.dataType);
			}
		}
		//field descriptor
		else {
			String className = DescriptorDecoder.getTypeNameFromDescriptor(descriptor, true, false);
			if (isPrimitiveType(className)) {
				return;
			}
			DescriptorDecoder.resolveClassForString(className, dtm, DWordDataType.dataType);

		}
	}
Create datatypes for all classes mentioned in the constant pool
@param program program file
@param classFile ClassFileJava associated with {@code program} 
@param monitor for canceling analysis
@param messageLog for logging messages
Ghidra/Processors/JVM/src/main/java/ghidra/javaclass/analyzers/JavaAnalyzer.java