| 357 | |
| 358 | @property |
| 359 | def fullname(self) -> str: |
| 360 | if self._fullname is None: |
| 361 | if self.class_info: |
| 362 | parents = [] |
| 363 | class_info: ClassInfo | None = self.class_info |
| 364 | while class_info is not None: |
| 365 | parents.append(class_info.name) |
| 366 | class_info = class_info.parent |
| 367 | namespace = ".".join(reversed(parents)) |
| 368 | self._fullname = f"{self.module_name}.{namespace}.{self.name}" |
| 369 | else: |
| 370 | self._fullname = f"{self.module_name}.{self.name}" |
| 371 | return self._fullname |
| 372 | |
| 373 | |
| 374 | def infer_method_ret_type(name: str) -> str | None: |