List<String> () { final Set<String> enclosingScopeReads = new LinkedHashSet<>(); for (ScopeOwner owner : PsiTreeUtil.collectElementsOfType(myFunction, ScopeOwner.class)) { final AnalysisResult result = analyseScope(owner); if (!result.nonlocalWritesToEnclosingScope.isEmpty()) { throw new IncorrectOperationException(PyBundle.message("refactoring.make.function.top.level.error.nonlocal.writes")); } if (!result.readsOfSelfParametersFromEnclosingScope.isEmpty()) { throw new IncorrectOperationException(PyBundle.message("refactoring.make.function.top.level.error.self.reads")); } for (PsiElement element : result.readsFromEnclosingScope) { if (element instanceof PyElement) { ContainerUtil.addIfNotNull(enclosingScopeReads, ((PyElement)element).getName()); } } } return Lists.newArrayList(enclosingScopeReads); }