def METHOD_NAME(self, parent, jdata, is_hard):
    info = self._createBasicInfo(parent, jdata, is_hard)
    for name, child in self.getDict(jdata, "subblocks").items():
        child["name"] = name
        child_info = self.METHOD_NAME(info, child, True & is_hard)
        info.addChildBlock(child_info)
        self.path_map[child_info.path] = child_info
    for name, child in self.getDict(jdata, "types").items():
        child["name"] = name
        child_info = self.METHOD_NAME(info, child, False)
        info.types[name] = child_info
    if "star" in jdata:
        jdata["star"]["name"] = "*"
        star_node = self.METHOD_NAME(info, jdata["star"], False)
        info.setStarInfo(star_node)
    for name, child in self.getDict(jdata, "subblock_types").items():
        child["name"] = name
        child_info = self.METHOD_NAME(info, child, False)
        info.types[name] = child_info
    common_params = self._getCommonParameters(jdata)
    for name, param in common_params.items():
        param_info = ParameterInfo(info, name)
        param_info.setFromData(param)
        info.addParameter(param_info)
    for name, param in self.getDict(jdata, "parameters").items():
        param_info = ParameterInfo(info, name)
        param_info.setFromData(param)
        info.addParameter(param_info)
    for t in jdata.get("associated_types", []):
        self.type_to_block_map.setdefault(t, []).append(parent.path)
    return info