void (@NotNull PyStringLiteralExpression pyString) { final ScopeOwner owner = ScopeUtil.getScopeOwner(pyString); if (owner != null && !(owner instanceof PsiFile)) { final PsiElement instrAnchor = getControlFlowAnchorForString(pyString); if (instrAnchor == null) return; final Instruction[] instructions = ControlFlowCache.getControlFlow(owner).getInstructions(); final int startInstruction = ControlFlowUtil.findInstructionNumberByElement(instructions, instrAnchor); if (startInstruction < 0) return; final Project project = pyString.getProject(); final List<Pair<PsiElement, TextRange>> pairs = InjectedLanguageManager.getInstance(project).getInjectedPsiFiles(pyString); if (pairs != null) { for (Pair<PsiElement, TextRange> pair : pairs) { pair.getFirst().accept(new PyRecursiveElementVisitor() { @Override public void visitPyReferenceExpression(@NotNull PyReferenceExpression expr) { final PyExpression qualifier = expr.getQualifier(); if (qualifier != null) { qualifier.accept(this); return; } final String name = expr.getName(); if (name != null) { analyzeReadsInScope(name, owner, instructions, startInstruction, pyString); } } }); } } } }