private PropertyMap<?> createPropertyMap(String propertyName, Program p,
			PropertyMap<?> originalMap) throws DuplicateNameException {

		PropertyMapManager usrPropertyManager = p.getUsrPropertyManager();
		if (originalMap instanceof IntPropertyMap) {
			return usrPropertyManager.createIntPropertyMap(propertyName);
		}
		else if (originalMap instanceof LongPropertyMap) {
			return usrPropertyManager.createLongPropertyMap(propertyName);
		}
		else if (originalMap instanceof StringPropertyMap) {
			return usrPropertyManager.createStringPropertyMap(propertyName);
		}
		else if (originalMap instanceof VoidPropertyMap) {
			return usrPropertyManager.createVoidPropertyMap(propertyName);
		}
		else if (originalMap instanceof ObjectPropertyMap) {
			Class<? extends Saveable> objectClass =
				((ObjectPropertyMap<?>) originalMap).getValueClass();
			return usrPropertyManager.createObjectPropertyMap(propertyName, objectClass);
		}
		return null;
	}
Replaces the user defined properties from the origin program into the result
 program at the address that is equivalent to the origin address.
 Note: To merge properties, there must be a code unit AT the equivalent address
 in the result program.
@param originAddress the address of the code unit to get the properties from in the origin program.
Ghidra/Features/Base/src/main/java/ghidra/program/util/ProgramMerge.java