XSourcePosition (String name, String parentType) { if (name == null) return null; XSourcePosition currentPosition = getCurrentFrameSourcePosition(); final PsiFile file = getPsiFile(currentPosition); if (file == null) return null; if (Strings.isNullOrEmpty(parentType)) { final Ref<PsiElement> elementRef = resolveInCurrentFrame(name, currentPosition, file); return elementRef.isNull() ? null : XDebuggerUtil.getInstance().createPositionByElement(elementRef.get()); } else { final PyType parentDef = resolveTypeFromString(parentType, file); if (parentDef == null) { return null; } final var context = TypeEvalContext.codeInsightFallback(file.getProject()); List<? extends RatedResolveResult> results = parentDef.resolveMember(name, null, AccessDirection.READ, PyResolveContext.defaultContext(context)); if (results != null && !results.isEmpty()) { return XDebuggerUtil.getInstance().createPositionByElement(results.get(0).getElement()); } else { return typeToPosition(parentDef); // at least try to return parent } } }